南昌哪里有男妓店:C语言问题~求助!
来源:百度文库 编辑:中科新闻网 时间:2024/06/05 12:20:32
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?
{
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入栈。