一些比較容易搞混的宣告:
char *p[20];
char (*p)[20];
第一種宣告由於的優先順序要高於*,所以p先與結合表示p是乙個有20個元素的陣列,這個陣列的元素是指向char型別的指標
第二種宣告由於()的優先順序要高於,所以p先與*結合表示p是乙個指標,指向乙個有著20個char型別的元素的陣列
const int * grade
int const * grade
int *const grade
首先要明白const關鍵字並不能把變數變成常量!在乙個符號前加上const限定符只是表示這個符號不能被賦值。也就是說它的值對於這個符號來說是唯讀的。
最後一種宣告,表示指標是唯讀的,指標的指向不能發生改變,但指標指向的物件的值可以發生該變,即可以通過指標來修改指標指向的物件的值
int a = 3,b;
int * const p = &a //指標常量
//那麼分為一下兩種操作
*p= 9;//操作成功
p = &b;//操作錯誤
前兩種宣告是一樣的,表示grade這個指標指向的物件是唯讀的,指標的指向可以改變,但不能通過指標來改變指標所指向的值
int a,b;
const int *p = &a //常量指標
//那麼分為一下兩種操作
*p = 9;//操作錯誤
p = &b;//操作成功
當然指標所指向的物件和指標有可能都是唯讀的,下面兩種宣告方法都能做到這一點
const int * const a;
int const * const a;
以下是幾種比較複雜的宣告的解讀
char * const *(*next) ();
首先next是乙個指標,next後面又有乙個括號,表明next是乙個指向函式的指標,這個函式的返回值是乙個指標,這個指標指向乙個唯讀的指向char的指標
char *(* c[10])(int **p)
c是乙個大小為10的陣列,該陣列的元素是乙個指標,該指標指向乙個函式,這個函式的引數只乙個指向int型別的指標的指標,返回值是乙個指向char型別的指標 《C專家程式設計》學習筆記(分析C語言的宣告)
一 c語言宣告的語法有時會帶來嚴重的問題 1 物件宣告的形式和使用的形式盡可能相似 1 優點 各種操作符的優先順序在 宣告 和 使用 時是一樣的。2 缺點 操作符的優先順序設計不當 過於複雜。2 無法以一種人們所習慣的自然方式從左到右閱讀乙個宣告,在ansi c加入volatile和const關鍵字...
C專家 分析C語言宣告 關於列舉
列舉 enum 通過一種簡單的途徑,把一串名字與一串整型值聯絡在一起。對於像c這樣的弱型別語言而言,很少有什麼事只能靠列舉來完成而用 define不能解決的。所以,在大多數早期的k r c編譯器中,都省掉了列舉。但是列舉在其它大多數語言中都存在,所以c語言最終也實現了它。現在,對於列舉的一般形式,你...
C專家程式設計 第三章 分析C語言的宣告
1 關於const的宣告 const int p 指標p指向的內容不變 int const p 指標p指向的內容不變 int const p 指標p不變 const int const p 指標和指標指向的內容都不變 int const const p 指標和指標指向的內容都不變。2 一些合法的宣告...