当前位置: 代码迷 >> C语言 >> 曾怡讲的谭浩强教程中的一个错误?
  详细解决方案

曾怡讲的谭浩强教程中的一个错误?

热度:99   发布时间:2007-04-13 16:59:15.0

看来我还是没有解释错


----------------解决方案--------------------------------------------------------

我看帖后的总结,供参考:
例:
#include "stdio.h"
#include "conio.h"

void main()
{ int a=1;
printf("%d\n",a=3*a,3*a);
getch();
}

输出结果为3。
此处并不是一个逗号表达式。编译器一般是从右到左调用函数。故改为
printf(“%d,%d\n",a=3*a,3*a);输出值为3,3.改为Printf("%d,%d,\n",3*a,a=3*a);输出结果为9,3.
要注意赋值运算符的优先级大于逗号表达式。所以用到逗号表达式时要用()。

此处是严格按输出格式控制输出。


判断关键,看有没有()号。


----------------解决方案--------------------------------------------------------
printf()函数调用时,是从右到左,
所以printf("%d\n",a=3*a,3*a);先执行3*a,再执行a=3*a
结果是:3
printf("%d %d\n",a=3*a,3*a);
结果
3 3
----------------解决方案--------------------------------------------------------
回复:(tvkl)我看帖后的总结,供参考:例:#include...

补充一下,个人理解:

在计算的时候是从右往左,在输出的时候是从左往右。

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

void main()
{ int a=1;
printf("%d\n",3*a,a=3*a);
getch();
}
结果是 9,

说明计算时是先算a=3*a ,再算3*a。 所以结果本应为 9 3 。 但是输出从左往右,此处只有一个%d ,所以只输出了 左边的 9

不知这样理解对不?


----------------解决方案--------------------------------------------------------
嗯,应该是这样理解,注意格式控制是从左向右的,函数调用一般是自右向左的,但有的编译器函数的调用也是从左向右,最后的结果就会是3
----------------解决方案--------------------------------------------------------
  相关解决方案