- 在這裏將會討論const修飾指針的常見三種形式, const關鍵字在C語言中修飾變量,表示這個變量是常量,指針變量也是變量
1)第一種:int const *p等價於 const int *p 此時p本身不是const的,但是p指向的變量是const類型的
2)第二種:int * const p; 此時表示 p本身是const ,但是p指向的變量不是const類型的
2)第三種: const int * const p ;此時p本身是const類型的,p指向的變量也是const類型的
#include <stdio.h>
int main(void)
{
//const int* p1;
//int const* p2;
int* const p3;
int a;
const int * const p4;
//下面開始對上面定義的開始賦值,看下報錯情況,經過編譯,發現p1和p2都是const類型,不能被繼續賦值
//*p1 = 3; //此時p1本身就是一個const 類型,這樣寫回報錯:error C2166: 左值指定 const 對象
//*p2 = 5; //同樣報錯:error C2166: 左值指定 const 對象
//*p3 = 9;
*p4 = 5; //報錯
}
2,const 修飾的變量也是有辦法可以改的
上圖的const類型是沒有辦法修改的,但是請看下圖
const類型的變量就已經更改成功了。
3,今天遇到的問題,也提出來給大家看看
int* const p3=9; //對於常指針,定義的時候就應該初始化一下,
//因爲如果不初始化,局部變量會分部在棧上,會隨機給個值
//如果我這樣寫,就是錯的!
int* const p3; //此時就是錯的,因爲如果不初始化,局部變量會分部在棧上,會隨機給個值
p3=9; //此時再次賦值,相當於把指針指向的變量的值改了