C陷阱與缺陷學習(一) a b

2021-08-14 23:02:23 字數 694 閱讀 5230

課後練習題1-4;

a+++++b表示什麼含義?

自己編譯了一下, 

int main()

error c2105: 「++」需要左值。

網上查了一下,左值就是可以在"="左邊,能被賦予值的東西;右值則是在"="右邊,可以賦值給別人的東西。所以左值必須是有記憶體空間的東西;而右值則既可以是變數,也可是常量和某種表示式,只要能提供乙個值即可。

為什麼a+++++b會編譯錯誤呢?

第一,編譯器在讀入此語言時,遇到連續多個+,如+++++,自動識別位((++)++)+,即會++比+更優先識別(最長字首優先)。

第二,++運算需要左值的。

a+++++b <=> ((a++)++)+b

a++沒問題,但問題就在於a++卻不能作為左值,即不能被賦予值,因為a++是先返回a的值進行運算,然後再對a的引用加1。然而a的值(value-a)是不能作為左值的。所示((a++)++)錯誤。

++a為什麼可以作為左值呢?

原因在於++a是對a的引用加1,然後返回a的引用。a的引用當然可以作為左值,被賦值了。  

int main()

a+++(++b)  the result is  1

++a+++b  the result is  4

如果你計算++a+++b,也會出現 「++」需要左值的錯誤,自己想想看吧。

c陷阱與缺陷 陷阱

例1 if x y break 這就話的意思就是把y賦值x,判斷x是否為0,實則是在判斷y是否為0 例2 while c c t c n 這句話的意思就是 c t c n 賦值給c,而有 符本身就是不為0的數,所以這就是while 1 的意思。例3 int x 4,p new int p 2 cou...

C陷阱與缺陷(學習筆記)

掌握細節並不難,難的是如何運用之妙!詞 單詞 符號 作為賦值運算,是因為操作頻繁,書寫簡單 a b與表示式a b的含義相同,而與a b的含義不同 y x p與y x p不同 第乙個 被理解為注釋符 理解 這也許就是編碼規範要求操作符兩側新增合理空格的原因之一吧 用雙引號引起的字串,代表的卻是乙個指向...

C陷阱與缺陷

c語言對於符號 包含乙個或多個字元 的識別規則 每乙個符號應該包含盡可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分 如果可能,繼續讀入下乙個字元,重...