C语言逗号表达式的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/02 12:10:53
C语言,逗号运算符的使用。教材上表述:计算过程是从左向右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。然后教材上有个例子:i=2,j=5;j=(i++,i+3,i-1); 然后教材作分析:首先求i++,求得i值为2,然后求i+3结果为5,最后把5作为逗号表达式的值赋给变量j。
到这里我就看不出什么头绪了,不是最后一个才是最终结果吗?为什么i-1就不被赋值直接出结果5呢?请老师们帮忙解决下

最后结果应该是i=3,j=2,因为:
i++以后,i=3
j=(3,6,2)=2
相信你自己的判断,书是错的。你可以自己试试。

我认为教材应该采用一些更实用的例子,解释逗号操作符到底用在什么地方能简化代码,提高效率。语言是用来沟通和解决问题的,而不是用来卖弄的,试问有人会在应用中写这样的代码么?

建议多实践,多解决实际问题,不要被落后的教育理念束缚手脚。

这个问题有意思……

首先i++是用了之后增加,“日后再说”,但是在i++结束之后i已经加一了,变成了3;
然后i+3,中间的那个表达式变成6;
最后的i-1,变成2(因为此时i是3),最后把2赋给j。

我用如下代码段检验过:
#include <stdio.h>
int main(){
int i=2,j=5;
j=(i++,i+3,i-1);
printf("%d %d.\n", i, j);
return 0;
}

borland C V5.5编译通过,结果为:3 2.

所以你说的几乎全都不对……我看最有可能是你写错了例子。