char ** 與const char **的轉換

在讀《C專家編程》這本書的時候,對於19頁的類型約束相關內容不是太理解,查閱了stackoverflow上面的相關回答後,總結如下:


舉個例子:

char *cp="test";
const char * ccp;
ccp = cp;
這段代碼編譯不會出錯,但是反過來

cp = ccp;

就不可以了。無法從“const char *”轉換爲“char *”。

其實理由也是很簡單,防止更改const變量的內容。試想,如果可以正常執行,當改變cp所指向的內容時,則ccp對應的內容也會被改變,此時的const便起不到保護的作用。


但是對於如下的代碼,又是爲何不可以賦值呢?

char **argv;
const char**p = argv;   // compile error
原因其實與上面的問題類似,具體可以參考如下的鏈接:

Why am I getting an error converting a ‘float**’ to ‘const float**’?

Why am I getting an error converting a Foo** → Foo const**?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章