關於c語言裡面的const?

  • 作者:由 匿名使用者 發表于 舞蹈
  • 2021-11-14

關於c語言裡面的const?lw2078 2011-03-30

樓上解釋的貌似不對,這個警告並不是初始化的問題:

cp 是一個指向沒有限定符的char型別的指標

cpp 是一個指向有const限定符的char型別的指標

簡單的來講,沒有限定符的char型別比有const限定符的char型別的範圍要大,限定少。所以cpp=cp正確,而cp=ccp會產生警告。

另外補充一點,*cpp所對應的char是常量,但cpp本身所對應的地址值是可以改變的。比如,ccp=cp是可以的,但是*ccp=*cp是錯誤的。

具體的可以參考《C專家程式設計》20頁。

關於c語言裡面的const?網友d62c2ee 2011-03-30

const 這裡作用是定義一個指向const型char變數的指標,指標並不是const型,所以cpp=cp 編譯正確,cp=cpp警告是因為cp未初始化,指向不確定的空間,所以賦值給cp會警告

關於c語言裡面的const?elesteel 2011-03-30

char *cp;

定義了一個指標變數,指向char

const char *ccp

定義了一個指標變數,指向const char。和上面不同的是,你不能修改ccp所指向的東西的值。

也就是說,像下面這樣的語句是非法的。(假定ccp已經初始化過,指向某處了),編譯器會報錯。

*ccp = ‘a’; // 試圖修改ccp所指區域。

把cp賦值給ccp是安全的。

因為cp指向一個可以讀寫的地址,而ccp保證只對那個地址讀,而不向那個地址寫。

相反,把ccp賦值給cp是不安全的。

因為ccp指向的是一個不希望被寫的區域。而cp卻沒有保證說他一定不會去寫他所指的區域。

cp的使用者完全有權利這樣做

*cp = ‘a’; // 這是完全合法的操作

但是,當他這樣做的時候,原先ccp指向的,不希望被改寫的部分,被修改了。

所以編譯器會提出警告。

關於c語言裡面的const?weida愛問 2011-03-30

這麼跟你說吧:對於Const關鍵字他有三個位置即:

const char * ccp;

char const *cpp;

//上面這兩種情況是一樣的!!

char *const cpp;

char * const cpp;

先來看最後一個,const在最後! 說明cpp這個指標是const,或說cpp是一個常量指標也就是cpp這個指標一旦被賦值後,裡面存放的地址就是一定的了,換一句話說就是說cpp永遠只能指向一個變數!

先說在C++中吧:對於char *const cpp;這行程式碼在C++中是不能被編譯的!為什麼呢??C++認為他既然是一個常指標,那麼就是說cpp裡面的值在定義後永遠不能被改變,所以必須在初始化的時候給他賦值!如:char cc; char * ui;

可以char *const cpp=&cc; 也可以char *const cpp=ui;在定義並賦初始值後cpp裡面的值就是一定的啦!cpp永遠只能指向一個地址!如果你在後面 cpp=ui;或給cpp賦任何值都是錯誤的,編譯器會告訴你,無法賦值!!只是說cpp裡面的值是固定的,也就是說cpp永遠只能指向一個變數的地址,但cpp他所指向的變數的值是可變的!如:char u=‘3’; //給字元u賦值‘3’

char *const cpp=&u;//cpp永遠只能存放u的地址!

但是u的值是可以改變的!你可以

u=‘6’;或 *cpp=‘6’;這都是可以的!!因為你改變的是u的值而不是cpp!

在C中:如果你寫char *const cpp;這是可以的!在C中,他並不需要一定要在定義的時候初始化,但是如果你不在定義時候初始化的話,以後就不能再賦值了,如果在定義時初始化,情況就跟C++中一樣了!這也說明為什麼C++比C更優秀!C ++能幫你檢測是否有這樣的沒有意義常指標,因為你在開始沒賦值,後來又不能賦值,所以這個變數也就沒有任何意義了!

char const *cpp; 或const char *cpp;

我們再來看看這種情況!從字面上就可以看到const 修飾的是( *cpp )這個整體。這種情況下如果用cpp指向了一個變數,如果又想改變該變數的值,一般有兩種方法,一種是用變數名直接修改,另一種就是用指標修改,但在此時,不能用這種型別的指標修改變數的值!!!但是透過變數名還是可以修改的!而且此時cpp的值可以變動!因為cpp並不是常量!在C和C++中情況都是一樣的!

關於c語言裡面的const?hl_zh 2011-03-30

這個問題很簡單。就是指標指向的型別的限定符的問題。

標準規定,指標指向的型別相容的條件下,左值必須具有右值所有的限定符。(記住這一句話就行了)。const 、 volatile 、restrict等就就是限定符。於是,可知

滿足,不滿足。

同理,滿足,不滿足。

Top