C语言题:求结果,要给出解释

设int a=0;,错误的语句是( )
A. ++a; B. a++;
C. a=-a; D. (-a)++;

设int a=1,b=2,c=3,d=4,f;,执行语句f=(a!=b)?c++:d++;后f的值是( )
A. 2 B. 3
C. 4 D. 5

第一题:D 。
++是一个运算符,运算符的左边需要一个左值,即可寻址的值。而(-a)是一个表达式,该表达式返回的是一个右值,++运算符不能作用在一个右值上。

但并不是所有表达式都返回右值。赋值表达式返回的就是左值,如果这样写:(a=3)++; 这句程序是正确的,可以通过编译。因为(a=3)是赋值表达式,返回左值,而++运算符正好作用于一个左值。

第二题:B 。
c++的意思是先返回c的值,然后再将c加1。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-05
借用一下,第一题 选D "++"需要一个左值,而-a系统无法定为左值
第二题 选B a!=b推出f=c++=3
补充一下:
最后执行语句涉及到一个执行顺序问题,你可以查一下书,=优先级最差,所以上述语句等价于:
f=((a!=b)?c++:d++); 而(a!=b)?c++:d++;表示如果a不等于b,那么返回值是c++,即是f = c++;否则f = d++
++运算符在变量前及后的情况如下:
int a = 1;
那么++a的值为2,立即生效;
a++的值仍为1,但是遇到;后a的值变为2,即:
int a = 1,b;
如果b = ++a;则b = 2;
如果b = a++;则b = 1;
但是不论经过其中任何一条语句后,a的值都会变为2.
第2个回答  2013-09-05
第一题 选D "++"需要一个左值,左值只能是变量,不能是常量。
第二题 选B a!=b推出f=c++=3
第3个回答  2013-09-05
C,
2.B括号内为真是c++,c++为后加加。f=3
相似回答
大家正在搜