指針常量 (const pointer)(意為常量是指針)
p是指針,const要修飾p,所以const要在p前:
int val = 100;
int *const p = &val;
p++; //非法;
*p = 42; //合法;
常量指針 (pointer to const)(意為指向常量的指針)
也就是*p不能變,所以const放在*p前面:
int val = 100;
const int *p = &val;
p++; //合法;
*p = 42; //非法;
其實只有中文才會區分得這么蛋疼,因為人們都喜歡縮寫縮寫,最后苦了自己。看二者英文名字就完全沒有這種區分障礙了。
關鍵是記住const修飾誰就緊緊靠在誰前面。
送分題:
const int *const p = &val;
p++;
*p = 42;
p++和*p = 42兩條語句是否合法?
</br>
數組指針(本質是一個指針,它指向一個數組,數組大小為4):
int (*p)[4];
指針數組(本質是一個數組,里面存放4個指針):
int *p[4];
關鍵看結合順序,int (p)[4]的括號優先級高,因此它先是一個指針,然后就明白是指向一個存放4個int類型的數組;int *p[4]先是看p[4],顯然是個大小為4的數組,再看類型是int *,說明里面存放整數指針*
送分題:
int *(*p)[4];
這條語句何解?