#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:;
这是为什么,这两个表达式有什么不同,谢谢大家了
...{ 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上得到的结果是不一致的,可以去验证,所以建议看汇编的结果。