printf语句从右向左计算?

来源:百度知道 编辑:UC知道 时间:2024/09/19 18:54:37
我在谭浩强主编的那本书上看到一题这样的

若ch为char型变量,k为int型变量(已知字符a的ASCⅡ十进制代码为97),则执行下列语句后的输出为
A)因变量类型和格式描述符的类型不匹配,输出无定值
B)输出项与格式描述符个数不符,输出为零值或不定值
C)61,141,k=%d
D)61,141,k=%12

ch='a';
k=12;
printf("%x,%o,",ch,ch,k);
printf("k=%%d\n",k);

我想问一下,第一个printf的计算不是最先从k开始,再到第二个ch,最后是第一个ch吗?(即从右向左计算)为什么书解释里说输出项k才是多余项(即变成从左向右计算了)?

与以下这题类似
#include<stdio.h>
main()
{int a=1,b=2;
printf("%d\n",a=a+1;a+b,b+1);
}

谢谢了。。。

编译的时候确实是从右向左的。输出的时候再从左向右。

如你给的题应该是a=2所以输出是2

又如

int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);

写在一起的时候程序器是从右向左计算的。也就是说
i-- ----8,i=7
i++ ----7,i=8
--i ----7,i=7
++i ----8,i=8
然后反向输出,就是8,7,7,8.

输出项k就是多余的,因为前面的"%x,%o"里只包含两项
下面你举的例子输出的是第一个运算a=a+1的值:2

虽然我不是很了解
不过
printf与scanf函数是
这个是从左到右对应的
printf p是左f是右
还有你后面那函数写错了哈哈

int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
输出应该是8 7 8 8;
因为i++和i--是在printf执行后才执行的!!