常量指標 指標常量

2021-08-03 14:39:19 字數 1113 閱讀 8134

int const *p;

表示p是乙個指向常量的指標,這種情況下,編譯器會講p所指向的物件當作常量處理,即便不是常量。

所以無法改變其指向的物件的值,但是指標本身的值即其指向可以發生改變。

int *const p

表示指標是乙個常量,其本身值(即其指向)不可以修改,但是其指向的值(無論是常量還是變數)可以發生修改

const int *const p

表示指標是乙個常量,其本身值(即其指向)不可以修改。其指向的目標也是乙個常量,值也不可以修改。

const int a = 10;

int *p = &a;

*p = 100;

.c檔案下雖然能編譯成成功,a的值確實也修改了,但是會有警告。.cpp是直接報錯。

所以還是要做到型別匹配,既然是常量,就不要去修改它的值。

所有的指標的值都是乙個位址,所有的位址都可以認為是乙個沒來得及起名字的指標。

char *a[10] 是乙個指標陣列

如果要定義乙個指向該陣列的指標,應該定義成二級指標 char **p = a;

否則會提示 char* 與 char**就間接級別不同

char *p;

p = 「hello world」;

記憶體先開闢乙個空間,將常量字串」hello world」寫入該儲存區域,然後將首位址賦值給p,那麼此時p指向的是乙個字串常量。

此時不允許修改p指向的值。但是可以改變p的指向。

p = 「hello boy」

通過列印位址可以發現,p的值發生了改變。

如果需要通過終端輸入來給p賦值,那麼需要提前分配記憶體

p = (char*)malloc(sizeof(char));

gets(p);

此時雖然編譯可以通過,但是如果輸入的字串過長,有可能導致程式崩潰。

因為我們申請記憶體的時候只申請了乙個位元組的區域,如果該位元組位址往後的區域

未占用我們可以一直輸入,一旦我們輸入的字串長度過長,沒有足夠空白空間來儲存就會崩潰。

所以在申請是應該盡可能了制定長度。

p = (char * ) malloc(sizeof(char)*1000);

指標常量 常量指標

指標常量 指向常量的指標 const int pa int const pa 兩者等價。因為指向常量的指標有時候會指向常量,所以它具有這個性質 不能靠解引用改變它指向的物件的值 以此保護它所指向的常量的常量性。pa d 不可行 d是已經宣告過的整型 但指標本身的值是可變的 pa d 可行 d是已經宣...

常量指標?指標常量?

今天學習c 的時候,遇到了兩個問題 常量指標?指標常量?我的天啊看了好些遍書本還是模模糊糊的。在網上找了一些寫的文章,才恍然大悟。區別 const int prt 和 int const prt。const int prt 稱為常量指標 指向常量的指標 int const prt 稱為指標常量 該指...

常量指標,指標常量,野指標

在我看來,不必太糾結於常量指標和指標常量的漢語名稱,一定要記住用法就好了。記有一指標,p表示位址,p表示值。1 常量指標 書寫方式有const int p或者int const p。在這種情況之下,const始終在 p之前,也就是說const 常量 修飾 p 指標的值 p不能修改,就是說該指標指向的...