初学者的C语言运算问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 09:14:00
a=1;
b= a+(a++);
printf("%d\n",b);

a=1;
printf("%d\n",a+(a++));

输出的结果是2和3,为什么两次输出的结果不一样?
另外:
a=1;
b=a+(a++);
printf("%d,%d/n",a+(a++),b);
printf("%d,%d/n",&(a+(a++)),&b);
结果输出 :
3,2
60,60
为什么地址会一样?
为什么地址一样,里面的值却不一样??

a+(a++); 这样的语句就存在一个编译器的问题,这样的写法存在二义性
不同的编译器编译这样的语句出来的结果是不一样的
我使用TC2.0的结果是2,3
用gcc的结果是2,2
这就能看出这样的写法的弊病
如果自己写程序一定要注意不能这样写 一个表达式就写一个意思,清楚明了,也不会出现移植性的问题

如果是考试题目 没有办法,咱们的考试就是这样的无实际意义,按照自己的想法写结果就好

至于你问的为什么,解释就是一个关于c89/99标准的问题,不同的编译器使用不同的标准

问题二a+(a++)),这是一个常量 没有地址可言

是不是 你测试时候看错咯啊 ·
我计算出来并测试咯都是2啊·

1.我刚才运行了一下,我这边的结果都是2。因为按照去处顺序,结果也应该是2。
2.我这边没法运行。

第一个运行下来都是 2 2啊。

第二个问题里&(a+(a++))的写法是有问题的,在c++里编译就通不过,因为&运算符需要一个左值,也就是一个变量,而(a + (a ++))只是一个运算表达式,也就是说她是没有地址可言的。