《C專家程式設計》隨筆3 賦值傳遞

2021-08-18 08:28:15 字數 629 閱讀 2977

而 char *cp;

const char *ccp;

ccp = cp;

是合法的。why?

解讀:要使賦值形式合法,必須滿足下列條件之一:兩個運算元都是指向有限定符或無限定符的相容型別的指標,左邊指標所指向的型別必須具有右邊指標所指向型別的全部限定符。

假設,左運算元的型別是foo2,它是指向foo的指標,而foo是乙個沒有限定符的指標,它指向乙個帶有const限定符的char型,而且......

右運算元的型別是baz2,它是指向baz的指標,而baz是乙個沒有限定符的指標,它指向乙個沒有限定符的支付型別。

foo和baz指向的型別是相容的,而且它們本身都沒有限定符,所以符合約束條件,兩者之間進行賦值是合法的。但foo2和baz2之間的關係又有不同,由於相容性不能傳遞,雖然foo2和baz2都沒有限定符,但他們之間不能進行賦值。也就是說,它們都是不帶限定符的指標,但是它們所指向的物件是不同的,所以它們之間不能進行賦值,也就不能分別作為函式的形參和實參。。這個約束條件令人惱火,也很容易讓人混淆,所以,折衷賦值方式目前基於cfront的c++編譯器是合法的(雖然這在將來可能會改變)。

《C專家程式設計》隨筆1 讀者心得

自己在閱讀完 c和指標 和 c陷阱與缺陷 之後,結合實際的專案,對c語言有了一定熟悉。c和指標 是一本非常不錯的c語言基礎書,詳細介紹了c語言的知識點,相對於譚浩強的紅書之外,學到了許多基礎知識,應該是乙個c語言入門的必備。c陷阱與缺陷 多講一些前輩們遇到的問題,自己看了一遍,可能對遇到的問題會有一...

《C專家程式設計》筆記3

const int grape int const grape int const grape 最後一種情況指標是唯讀的,上面兩種指標所指的物件是唯讀的 結構體可以用於段位,之前沒聽說過吧 includeint main struct bit field temp temp.a 1 printf d...

《C專家程式設計》筆記3

第三章 分析c語言的宣告 const int grape int const grape int const grape 最後一種情況指標是唯讀的,上面兩種指標所指的物件是唯讀的 結構體可以用於段位,之前沒聽說過吧 cpp include int main struct bit field temp...