软枣苗:C语言问题~求助!

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 02:41:11
main()
{
int a=1,b=2;
printf("%d,%d",a=b,a);
}
结果为什么是2,1,怎么不是2,2?
那把printf()改成
printf("%d,%d",a=b,a,a);
从右读取的话,结果为什么不是1,1?

简单一点。

在tc中printf函数运行顺序从右向左!

关于你的问题补充:

tc在执行函数时,前面的%d对应的是a=b,后面的%d对应的是a。

所谓顺序,是指计算机在scan时的方向。

计算机只是先扫描最右边的a,再扫描中间的a,最后为a=b.

但是对应时第一个%d仍然对应a=b,而第二个%d则对应中间的那个a

Printf 语句,先是 右边的参数,然后往左边执行
也就实先执行 a 再 执行 a=b


因为你定义的a=1,
在printf里 你只是暂时的把b的值给了a,a 的值并没有变
这就是C语言与VB的不同吧

C语言中的函数的参数是从右至左读取的。

先读取参数a,结果是1。然后是参数a=b,结果是2,最后才是那个字符串,所以结果是2,1。

从右开始传递参数是【函数调用】时候的事情,函数里面对参数想怎么处理就怎么处理。printf("%d,%d",a=b,a,a);是按a=b这个参数先匹配到第一个%d。所以执行结果还是不变。

你可以试试改成
printf("%d,%d",a=1,a=2,a=3);
执行结果将是1,1而不是3,3。

应该把 a=b改成 a+b

1、C语言里函数参数传递默认是值传递;
2、函数参数是从右向左,逐个压入堆栈的;

因此,这个printf执行时,先是右边的a的值压入堆栈,即1入栈,其次再执行a=b,再将此时a的值,即2入栈。