#include<stdio.h> void main() { int a=1,b=1,d; d=a++,b++,++b; printf("%d,%d,%d\n",a,b,d); } 为什么d

#include<stdio.h>

void main()
{
int a=1,b=1,d;
d=a++,b++,++b;
printf("%d,%d,%d\n",a,b,d);
}
为什么d会为1,而不是3;逗号表达式不是一个一个表达式算过去,最后一个表达式就为其值吗?
还有就是这个程序

#include<stdio.h>

void main()
{
int a=1,b=1,d;
d=(a++,b++,++b);
printf("%d,%d,%d\n",a,b,d);
}
这个算出来又为d为3:;
这是为什么,这两个表达式有什么不同,谢谢大家了

第1个回答  2011-03-19
d=a++,b++,++b;
第一个是a把值1赋给d后自加,a=2,b自加,b再自加,b=3。b的值未赋给d,故d=1;
d=(a++,b++,++b);
“()”是一个运算式,它有值,值是逗号表达式的最后一个的值,就是b的值3.所以结果不一样。
第2个回答  2011-03-18
第一个因为a++=1,所以d=1,其实d=a++,b++,++b相遇当d=1,,b++,++b;
后一个要一个一个表达式算过去算到最后一个++b,也就是d值
第3个回答  2011-03-18
逗号运算符优先级小于赋值表达式第一个相当于(d=a++),b++,++b;先赋值后运算逗号,
第二个d=(a++,b++,++b);先逗号表达式,然后赋值表达式。本回答被提问者采纳
第4个回答  2011-03-18
因为赋值符号=的优先级大于逗号,
所以d=a++,b++,++b; 先执行d=a
d=(a++,b++,++b); 就是逗号表达式的最后一个值

...{ int a=1,b=1,d; d=a++,b++,++b; printf("%d,%d,%d\\n",a,b,d...
第一个是a把值1赋给d后自加,a=2,b自加,b再自加,b=3。b的值未赋给d,故d=1;d=(a++,b++,++b);“()”是一个运算式,它有值,值是逗号表达式的最后一个的值,就是b的值3.所以结果不一样。

#include<stdio.h> void main() { int a=1,b=1,c=1,d; d=a+(b++)+...
b++的值是 b 然后执行b=b+1 不会应为加了括号值就变化的

#include<stdio.h> main() { int a=1,b; b=(++a)+(++a); printf("%d...
i的值变成6;再做+。即:『=6+6+6=1 8。

#include<stdio.h> int main() { int a=1,b ; b=++a+(++a); printf...
b=++a+(++a)+(++a);编译器先执行两次 a=a+1; 然后将 a+a 的结果放到寄存器 edx,再执行一次 a=a+1,最后执行 b = a + edx,此时 a 的值为 4,edx寄存器的值为 6,所以 b 等于 10。

#include<stdio.h> main() { int a=1,b; b=(++a)+(++a); printf("%d...
这种问题有二义性,在不同的编译系统中,结果不同。不会作为考试题使用的,除非你们老师不懂。

...main() {int a=1,b=2; a++;b++; printf("%d%d\\n",a,b); } 运行结...
因为自增在后,先运算再自增即输出a=1,b=2 有图有真相,能采纳不?

#include <stdio.h> void main() { int a=1; a++; printf("%d,%d,%d...
printf("%d,%d,%d",a,a++,--a);计算机扫描的时候,从左向右扫描。先执行a++,这时a=2(你应该懂的),再执行--a,因为这是并列的,这时值不变,a=1;所以输出应该是1,1,1

#include <stdio.h> main() { int a,b; a=1,b=(++a)+(++a); printf...
a=1,b=(++a)+(++a);这一句么 首先 a=1确定的,然后运行b=(++a)+(++a)括号优先级高,先第一个++a 后a=2,然后运行第二个++a,a=3.最后在运行a+a,所以结果是6。 + 是最后运行的。因为是一个变量 ,第二个++a后同时也改变 b=(这个值)+()楼主多想想就会明白 ...

#include<stdio.h> main() { int a=1,b=1,c=1; a++||
&& 优先级高于 || 则: a++||b++&&c++;等价于: (a++) || (b++&&c++);而 || 只要一个为真,后续语句不用继续执行。a++ 为非 0 值,则为真;后面的 b++&&c++ 就不用执行了。所以输出结果是: 2 1 1

#include<stdio.h> void main() { int a=1; float b; b=++a*++a; p...
这样的问题,建议看一下汇编指令。不同的编译器都有可能不一样,别的不清楚,但是如果你的题目改成a++*++a在vs和GCC上得到的结果是不一致的,可以去验证,所以建议看汇编的结果。

相似回答
大家正在搜