#include<stdio.h>
int main(void)
{
int a = 10, b = 20, c = 30;
printf("\n %d..%d..%d \n", a+b+c, (b = b*2), (c = c*2));
return 0;
}
知识点:printf函数在处理参数的时候是从右向左处理的,即先处理(c = c*2),再处理(b = b*2),再处理a+b+c,最后处理"\n %d..%d..%d \n"。其中,printf最后三个参数从右向左依次压入栈中,存放在栈中从高到低的地址里面,然后再格式化输出,输出时从低地址到高地址输出。即整个操作可以看做两部分:数据的处理(压栈)和格式化的输出(出栈)。
#include<stdio.h>
int main(void)
{
int a = 10;
printf("\n %d %d\n",a);
return 0;
}
在这个简短的程序中呢,在linux下和windows下(vc6.0)输出结果是不一样的。
windows下(vc6.0):输出10和0;
Linux下:(会有警告)输出10和一个不确定的数。
那么在此我们可以体会出,由于printf里本应该有两个参数用来输出值的,我们只提供了一个,而需要输出两个值。对于另外一个不确定的值,对于不同的环境则会有不同的处理办法。但是,也仅仅是作为一个不确定的数,其实某种程度上相当于一个未定义的变量。