关于c语言的逗号表达式。。。

来源:百度知道 编辑:UC知道 时间:2024/09/24 21:25:57
#include "stdio.h"
#include "conio.h"

main()
{
int a;
a=3+5,6+8;
printf("%d\n",a);

getch();

}

上面这几行代码执行完结果等于8,可是书上写结果应该等于14!

#include "stdio.h"
#include "conio.h"

main()
{
int a;
a=3+5,a+8;
printf("%d\n",a);

getch();

}

这个代码书上说结果等于16,可是我却算还是得8。

疑惑了,知道的帮帮忙,先谢谢了

书上搞错了,逗号的优先级最低,所以这两个程序中的表达式,运算顺序应该是
(a=3+5),6+8;

(a=3+5),a+8;
,书上错误地把式子划分成
a=(3+5,6+8);

a=(3+5,a+8);

逗号运算符的优先级比赋值运算符(=)低,因此程序中总是先对a进行赋值以后再去求逗号后面的表达式。
对第一个程序:
a=3+5,6+8;
改为:a=(3+5,6+8);
对第二个程序:
int a;
a=3+5,a+8;
这是很怪异的,一方面,若直接写为:a=3+5,a+8,则a的结果肯定为8,理由如前。
如果写为:a=(3+5,a+8);
则a的值是不确定的,因为这里a应该等于a+8的值,而计算a+8时,a尚未初始化,它的值只是栈上的一个垃圾数据。这样的代码哪本教科书上的?把那个作者拿去烹了得了。。。。。。。。。。误人子弟!!!

谁说的? 你看到什么书啊?还有1、2、3楼的都在胡说。逗号表达式能加吗?4楼正解。
a=3+5,a+8 结果a=8,没错。

书上说的可能是逗号表达式的值,逗号表达式的值确实一个为14,一个为16,可是由于=号比逗号优先级高,故a都为8
能不能加5楼的自己去试试不就得了,错了还有理了!

应该是程序有问题~第一个如果是这样答案就是14:
int a;
a=3+5,a=6+8;
printf("%d\n",a);
第二给这样:
int a;
a=3+5,a=a+8;
printf("%d\n",a);
我大二学的,不知道对不对,如果错了,希望别在意~