c语言强人过来下,问个printf的问题。。

2025-03-23 18:34:53
推荐回答(5个)
回答1:

我先将你的这样改:
#include;
main()
{
int a=3,b=4;
printf("%d\n",a=b+1);
printf("%d\n",a=b+2);
printf("%d\n",a);
}
输出:
5
6
6
说明问题出在第一个printf上;
说明:printf()函数的原型……
int _Cdecl printf (const char *format, ...);
注意:_Cdecl表示从右往左开始计算
也就是说在输出一组表达式时,进行从右往左计算同时将结果放进内存……最后在从左往右输出……

回答2:

#include;
main()
{
int a=3,b=4;

printf("%d,%d\n",a=b+2,b=b+3);
printf("%d\n",a);
}
9,7
9
看一下这个程序就知道了,
printf 是从右往左运算的(C语言里大部分运算是从右向左的)

回答3:

printf("%d,%d\n",a=b+1,a=b+2);
这个涉及到传参顺序,如果是__cdecl的话就是从右往左传,也就是先传a=b+2,后传a=b+1,这和编译器有关.
你的编译器约定是从右至左,所以最后执行的是a=b+1,是5

回答4:

printf("%d,%d\n",a=b+1,a=b+2);

上式的运算结合顺序是“从右向左”(视编译器而定),a=b+1的值为5,ab+2的值为6,在内存里a的值被a=b+1的值覆盖掉了,所以输出的是5!

你可以再用其它式子试试,看看是不是最内层的式子会被输出~~~

回答5:

把这改下再试 printf("%d%\n",a); 你输入了两个:%