a++: 先將a的值代入表達式,在表達式運算完畢后,再將a進行++處理
++a: 先將a進行++處理,再將a的值代入表達式
(注意咬字)
a+++++b在編譯時會報錯,(a++)+(++b)和a++ + ++b不會報錯
“a+++++b”這一段根本就無法解析,編譯系統從左至右掃描整條語句,先遇到a++,判斷出來是一個a的后綴自加運算,然后接着掃描,遇到一個+,+是一個二目運算符,它的左邊已經有一個運算數a++了,系統就向右搜索第二個運算數,又遇到一個+,++比+的運算級別要高,這時,編譯系統就將兩個+看成一個整體來處理,既然是++,編譯系統就認定,肯定它的左邊或右邊有一個變量,編譯系統先搜索左邊,發現++,不是變量,再搜索右邊,發現+b,+b是什么東西?編譯系統是無法搞明白的,因此它就認為++是一個缺少左值的自增運算符,於是提示提示用戶:’++’ needs l-value
另外,假如定義int a = 1,b = 2;
c = a++ + ++b;
1:先執行b自加,b變為3;相當於:b = b+ 1;
2:求a與b之和,賦給c;相當於:c = a + b ;//c = 1+3;
3:執行第二步之后,a自加1:a++;
4:如果要輸出的話,(按執行順序)
b = 3;
c = 4;
a = 2;
c= a+++b;
1:先執行a+b,相當於:c= a+b = 1+2;
2:a自增,相當於:a=a+1=2;
//相當於c=a+b; a++;
//假如是 c= (a++)+b; 也是向上面的順序一樣執行。因為a++ 的意思是先將a進行++處理,再將a的值代入表達式
//假如是 c= ++a+b; 就不一樣了。先執行++a,再執行 c=a+b;