回覆列表
-
1 # 使用者7261553903946
-
2 # 使用者908425833711
const的指標還分常量指標和指標常量, 常量指標是指--指向常量的指標,就是指標指向的是常量,即,它不能指向變數,它指向的內容不能被改變,不能透過指標來修改它指向的內容,但是指標自身不是常量,它自身的值可以改變,從而可以指向另一個常量。 指標常量是指--指標本身是常量。它指向的地址是不可改變的,但地址裡的內容可以透過指標改變。它指向的地址將伴其一生,直到生命週期結束。有一點需要注意的是,指標常量在定義時必須同時賦初值。 至於非const都可以改變的
-
3 # 使用者4901841896917
舉個例子說下:
int i=39;
const int *p=&i,表示不能透過指標p來改變i的值,*p=20//錯,p=&j//正確
int *const p=&i,表示p只能指向i,不能指向其他變數,但是可以透過p來改變i的值.*p=30//正確,但是p=&j//錯
const int *const p=&i,表示p只能指向i,並且不能透過p來改變i的值
*p=20//錯誤,p=&j//錯誤
先理解const幹了什麼。const將一個變成設定為只讀(不一定是常量)。然後分析形參是這個宣告是什麼樣的: p是一顆const指標(常量指標),本身不可修改(不能修改它讓它指向別的地址),這顆指標p指向了另一個const char(常量)的指標,這顆const char指標不能修改其所指地址的內容,也就是說,p是一個指向指向常量的指標的常量指標。最後來看,你傳入一個char**的指標,那麼你就發現了,這個char**指標既可以被改變去指向另一個地址,其所指指標又可以改變所指地址的內容,顯然不符合形參的要求。而const char**是一個指向常量的二級指標,你就發現和和你的形參宣告基本一致了,不同在於這個實參本身不是常量指標,但是C語言允許常量指標形參的函式接受一個普通指標(自動提升為常量指標),因此不會有警告。至於警告的意義,就在於你自己宣告的形參不允許修改所指地址內容,本身也不可改變所指物件,因此編譯器在發現你傳了一個很自由的指標進去的時候提醒你,你可能傳錯了東西。const比較詭異,可能有誤,歡迎指正。