[C语言][表达式计算][逗号表达式]表达式计算顺序的疑问先来看表达式:a = 1b = a + (a=0,1);这个表达式的结果是1.但是我奇怪为什么不是2.我的理解是,应该按照结合律,先计算+运算符左边的子表达

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 11:46:27

[C语言][表达式计算][逗号表达式]表达式计算顺序的疑问先来看表达式:a = 1b = a + (a=0,1);这个表达式的结果是1.但是我奇怪为什么不是2.我的理解是,应该按照结合律,先计算+运算符左边的子表达
[C语言][表达式计算][逗号表达式]表达式计算顺序的疑问
先来看表达式:
a = 1
b = a + (a=0,1);
这个表达式的结果是1.
但是我奇怪为什么不是2.我的理解是,应该按照结合律,先计算+运算符左边的子表达式,获得一个值,然后计算右边的子表达式.
这样应该是先获得左边的1,然后右边执行(a=0,1)的时候虽然把a改成了0,但是也不应影响才对.
但是现在来看似乎是先执行了右边的括号,然后反过来计算a,然后计算结果?
后来我做了另一个试验,执行:
b = (a=1,printf("1:%d\n",a),a)+(a=0,printf("2:%d\n",a),a+1)
可以看到输出是:
1:1
2:0
跟我想象是一样的啊,先执行左边,a也是1,坐标的括号应该返回1,然后执行右边,a设成0,返回a+1=1,加起来应该是2才对啊,但是结果b还是1.

[C语言][表达式计算][逗号表达式]表达式计算顺序的疑问先来看表达式:a = 1b = a + (a=0,1);这个表达式的结果是1.但是我奇怪为什么不是2.我的理解是,应该按照结合律,先计算+运算符左边的子表达

以汇编视图查看实际的操作:
1、ptr [ebp-4]置为0,ebp-4得到的是变量a的内存地址,也就是a赋值为0了.
2、寄存器EAX置为ptr [ebp-4],也就是a的值放入寄存器.
3、add  eax,1,就是EAX寄存的值+1.
也就是说int b = a + (a=0,1);这条语句被理解成a=0;int b=a+1;.也不知道不同编译环境下是否还有所不同?我一开始跟楼主想得也一样,b的值应该是2.具体的原因我也很想知道,期待高手详解.不过b = a + (a=0,1);这种代码只能用来研究,不提倡实际编写,编程不是做密码,容易歧义的东西会耽误事的.

C语言表达式的计算练习掌握算术表达式、逗号表达式、赋值表达式的计算练习 c语言,逗号表达式要带括号吗?为什么书上的逗号表达式都带括号? 一道C语言逗号表达式答案是C c语言中while()的()中的表达式可以是逗号表达式吗? c语言 逗号表达式请问逗号表达式:(k=3*2,k+4),k+2的值是多少? c语言逗号表达式y=4,5; 结果y=4.但是整个逗号表达式值是5吧 关于c语言中for语句的逗号表达式请解释一下“整个逗号表达式值为最右边的表达式的值”‘ c语言,逗号运算符和逗号表达式,如图,为什么Y等于最后一个表达式,那前面的表达式不是多余了吗 C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则. c语言中逗号运算符的表达类型是什么?是a=(表达式1,表达式2.)还是a=表达式1,表达式2... C语言 表达式1 c语言for的计算顺序问题for(表达式1,表达式2,表达式3){表达式4}请问先算表达式3还是表达式4? C语言程序中的for循环语句有时要用逗号表达式,这里的逗号表达式具体有什么作用啊?C语言编程 [C语言][表达式计算][逗号表达式]表达式计算顺序的疑问先来看表达式:a = 1b = a + (a=0,1);这个表达式的结果是1.但是我奇怪为什么不是2.我的理解是,应该按照结合律,先计算+运算符左边的子表达 二级C语言求解 计算表达式a++&&b++的值计算表达式a++&&b++的值 c语言逗号表达式 (x=4*5,x*5),x+25 等于多少 C语言逗号表达式(a=3*5,a*4,a+5)的值是多少? C语言里计算X的立方的表达式?