指針常量和常量指針

這兩個概念經常分不清,今天好好總結一下。
一、指針常量
先說指針常量,是因爲它和我們常用的數組有關係。
指針常量的聲明

int * const p;

指針聲明操作符*在常量限定符const前面,叫做指針常量。忽然發現了一點規律^_^。
const限定符修飾的是指針。數組名就是一個指針常量。而數組名和指針有什麼區別呢?可以通過引用數組名去修改指向的內存,但是自身不可以被賦值,不可以進行++、–操作。

二、常量指針
常量指針的聲明

const int * p1;
int const * p2;

常量限定符const在指針聲明操作符*前面,叫做常量指針
const修飾的是指針指向的內存地址。常量指針和上面的指針常量在賦值行爲上相反。自身可以被賦值,支持++、–操作,但是不可以通過指針的引用去修改指向的內存。

總結:記住“數組名就是指針常量”,這個蛋疼的問題就算解決了。

注:
Peter van der Linden寫的《expert C programming》在第69頁提到const和volatile的優先級:
If a const and/or volatile keyword is next to a type specifier (e.g. int, long, etc.) it applies to the type specifier. Otherwise the const and/or volatile keyword applies to the pointer asterisk on its immediate left.
而徐波前輩翻譯時在第64頁寫到:
如果const和(或)volatile關鍵字的後面緊跟…
從常量指針的聲明可以看出const只要和類型說明符相鄰,則const就作用於類型說明符。所以next to在此應譯作在…旁邊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章