您的位置:首页 > 其它

关于printf函数的思考

2015-07-26 00:00 381 查看
#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里本应该有两个参数用来输出值的,我们只提供了一个,而需要输出两个值。对于另外一个不确定的值,对于不同的环境则会有不同的处理办法。但是,也仅仅是作为一个不确定的数,其实某种程度上相当于一个未定义的变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: