關鍵字const並不能把變量變成常量。在一個符號前加上const限定符只是表示這個符號不能被賦值。它的值對於這個符號是隻讀的,但他不能防止經過程序的內部(甚至是外部)的方法來修改這個值。編程
const int limit = 10;
若是在兩邊加上指針,就不同了:指針
const int * limitp = &limit; int i = 27; limitp = &i; printf("%d\n",limit); //10 printf("%d\n",*limitp); //27
這段代碼表示limitp是一個指向常量整形的指針。這個指針不能用於修改這個整型數,但在任什麼時候候,這個指針自己的值卻能夠改變。這樣,它就指向了不一樣的地址,對它進行解除引用操做時會獲得一個不一樣的值!
const限定符是修飾指針所指向的類型,而不是指針自己!
更變態的是 const int **
是一個沒有限定符的指針類型。它的類型是「指向有const限定符的int類型的指針的指針」!若是那你企圖:code
int **a; const int **b; b=a;
則會警告b和a是不相容的。儘管它們都是指針,但它們指向的類型不同。
參考資料:《C專家編程》it