在讀《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**’?