17++與--操作符
阿新 • • 發佈:2018-06-07
本質 變量 不可 包含 c語言 可能 com gcc urn
++和--操作符的本質
++和--操作符對應兩條匯編指令,前置時,表示變量自增(減)1,然後取變量值,後置表示變量先取變量值,然後變量自增(減)1
一個有趣的問題
int i = 0;
(i++) + (i++)+(i++);
(++i) + (++i) + (++i);
上面兩個表達式的值分別是多少?
例子1:頭疼的++
#include<stdio.h>
int main()
{
int i = 0;
int r = 0;
r = (i++) + (i++) + (i++);
printf("i = %d,r = %d\n" ,i,r);
r = (++i) + (++i) + (++i);
printf("i = %d,r = %d\n",i,r);
return 0;
}
在不同的編譯器中,運行結果不同,在gcc中結果為3,3 ————————6,16
面試中的奇葩題
貪心法:++,--表達式的閱讀技巧
- 編譯器處理的每個符號應該盡可能多的包含字符
- 編譯器從左到右的順序一個一個盡可能多的讀入字符
- 當讀入的字符不可能和已讀入的字符組成合法字符未知
例子2:貪心法閱讀
#include<stdio.h>
int main()
{
int i = 0;
// int j = ++i+++i+++i;
int j = ++i+ ++i+ ++i;
printf("i = %d\n",i); // 3
printf("j = %d\n",j); // 7 不同編譯器結果可能不同
// printf("j = %d\n",j);
int a = 1;
int b = 2;
int c = a+++b;
printf("c = %d\n",c // 3
return 0;
}
小結
- ++與--操作符在混合運算中的行為可能不同
- 編譯器通過貪心算法處理表達式中的子表達式
- 空格可以作為c語言中一個完整符號的休止符
- 編譯器讀入空格後立即對之前讀入的符號進行處理
17++與--操作符