C語言const的理解

2021-06-22 03:29:19 字數 1250 閱讀 7209

const 是c語言的新的特性,很多庫函式strcpy等的實現都有使用。 

1. const 修飾普通變數(char, int等)

e.g : const  char c;   

表示變數c是常量

2. const修飾一維指標

e.g:  const char *p;  // 表示p指向的內容不可以, 但p可變

char const *p;   // 同上

char * const p;  // 表示p是常量, 其指向的內容可變

const的結合原則: const 在 「*」號左側, 修飾的指標p指向的內容,  否則修飾指標p

3. const 修飾二維指標

e.g:   const  char **p;

可以拆分為[ const char * ]  [ *p ],  故指標p指向(const char *)型別,即指向乙個指向內容不變的指標

const 指標賦值的問題:

<

我簡單說一下理解: 左右兩個運算元(指向)的資料型別是一致的,左運算元的限定符(限制的條件)多餘或等於右運算元的限定符,

即左運算元約束條件更多

1.  const char * 和 char *

e.g:  const  char *p;   char *q;

p = q;     // 正確。p,q都是char *型別的指標, p中多了限定符const

q = p;     // 錯誤。 q的限制約束小於p

2. const char ** 和 char **

e.g:   const char **p;   char **q;

p = q;    // 錯誤

q = p;    // 錯誤

const char **p 可以根據const的結合原則拆分為: [  const char * ] *p, 指標p指向型別[ const  char *p ]

char **q 可以拆分為: [ char * ] *q, 指標q指向型別[ char * ]

指標p和q均沒有限定符。

因為左右運算元指向的型別是不一致, 故賦值會出現問題。

同理: c++的引用, const char &,  const char * &, 即引用和指標引用,和c語言的 const char * , const char **對應, 也會出現同樣的問題

c++的指標賦值只要出現不相容(除void *), 會直接報錯, 所以正確的使用const在c++中也很重要, 防止出錯了,不能理解錯誤的原因。

C語言對const的理解

教學過程中,很多同學對於const這個關鍵字的理解存在很大的誤解。現在總結下對這個關鍵字理解上的誤區,希望在以後的程式設計中,能夠靈活使用const這個關鍵字。1 const修飾的變數是常量還是變數 對於這個問題,很多同學認為const修飾的變數是不能改變,結果就誤認為該變數變成了常量。那麼對於co...

C語言中對const的理解

const的作用是限定乙個變數不能被修改。對const的理解 1 int const a const int b 這兩句是相等的。2 const char p1 char const p2 const char const p3 第一句的意思是指標p1所指向的記憶體空間不能被修改,如 p1 1 a ...

c語言中const 關鍵字的理解

對於非指標變數的修飾,const可以放在型別的前面,也可以放在型別的後面,例如 int const myint 或者 const int myint 他們所表達的意思是一樣的,都是表示myint 是常量,不能再修改myint的值 對於指標變數的宣告,四種情況,以int為例 1.const int m...