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不能修改,就是說該指標指向的...