C語言自增自減運算符總結
【例】
int i=5, j=5, p, q;
p = (i++) + (i++);
q = (++j) + (++j);
printf("%d, %d, %d, %d\n", i, j, p, q);
i=5;
j=5;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf("%d, %d, %d, %d\n", i, j, p, q);
i=5;
j=5;
p = (i++) + (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j) + (++j);
printf("%d, %d, %d, %d\n", i, j, p, q);
i=5;
j=5;
p = (i++) + (i++) + (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j) + (++j) + (++j);
printf("%d, %d, %d, %d\n", i, j, p, q);
【講解】
在VC6.0下編譯,運行。
這段程序的運行結果是
7, 7, 10, 14
8, 8, 15, 22
9, 9, 15, 22
10, 10, 25, 41
可見a++這類運算,是整個式子算完以後,統計一下有幾個++,再統一給a加上幾。而
++a這類運算,在2個以下的時候,是先統計下有幾個++,然後都加上去,然後再進行賦值。超過兩個了,那麼第三個開始,就是分步來,前兩個算完了,第三個把前面得到的值拿來用。所以,q = (++j) + (++j) + (++j); (j=5)q就等於7+7+8=22.
總結一句話:vc環境中: ++i++i先使i的值自增兩次再賦值! i++i++先賦值再使i的值自增兩次!
【注意】
自增自減運算符的對象是變量,不是常量或表達式。如+ + i + + +j就不合法。 這是因為 C 語言的編譯器對程序編譯時,從左到右盡可能多地將字符組成一個運算符或標識符,因此 + + i + + +j 等效於 + + ( i + + ) + j , 第 1 個 “ + + ”作用的對象是表達式 “i + + ” 這是不允許的。
作者“記錄點滴”