今天的笔试题. 名扬 /* 写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) * int a = 4; * (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++); * a = ? */ #include <stdio.h> int main() { int a = 4, b; a += (a++); // a = a + (a++); printf("%d/n", a); // 9 a = 4; a += (++a); // a = a + (++a); printf("%d/n", a); // 10 a = 4; //(++a) += a; /* 记住: ++ 比 += 的优先级高, 且都为右结合. step1: ++a; step2 a = a + a;*/ /* GCC下不行的. */ ++a; a += a; // 10 //(a++) += a; /* a++ 传回的是值(非引用), 不能做左值. (联系C++操作符重载) */ printf("%d/n", a); a = 4; (++a) += (a++); /* 类似于上式情形,需考虑优先级问题. GCC下不行的. */ // ++a; += a; a++; // (实际上a++是第一处理的,但因为++在后面.) printf("%d/n", a); // 11 a = 3; b = (a++) * (++a); printf("%d/n", b); // 16 return 0; }