您的位置:首页 > 其它

一道表达式的经典试题

2012-09-09 11:47 399 查看
写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)

int a = 4;

(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);

a = ?

答:C 错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;

改后答案依次为9,10,10,11。

------------------------------------------------------------------------

自己的实验:

int main()

{

int a = 4;

(++a) += (a++);



int b = 4;

(++b) = (++b) + (b++);



printf("a = %d, b = %d/n", a, b);



return 0;

}

运行结果:

a = 11, b = 13。

根据以上结果(个人猜想):

编译器对表达式进行了两遍处理:

1.第一次:从左到右,进行出现的++运算。

2.第二次:从右到左,进行表达式的计算。

原创:http://blog.163.com/wupengzhi2005@126/blog/static/17101002201082965021807/

// sizeof(a=0)

#include <stdio.h>

int main()

{

int a = -1;

int b = sizeof(a=0);



// 程序实际输出-1

// 原因:

// sizeof在编译连接阶段进行处理,没有对a=0进行处理

printf("%d/n", a);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: