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...