一道C语言的考题

来源:百度知道 编辑:UC知道 时间:2024/05/27 13:16:23
复习时碰到的一道C的历年考题,求输出结果:

void main()
{

while(1)
{
if (printf ("%d", printf ("%d")))
break;
else continue;
}
}
自己运行了一下,输出来 23674607
不明白怎么得来的

由于第一个printf中包含的第二个printf调用没有变量列表,所以它会自动从程序的自由存储区中提取一个值,并输出,之后第二个printf将返回由它输出的字符数量,这个返回值将做为第一个printf的变量列表中的值予以输出。

通过运行结果可知:由于第二个printf从自由存储区中提取到的是一个2367460,并将它输出,所以这个printf就返回输出的字符个数,也就是7,然后第一个printf将输出这个7,所以就有你看到的结果。

这个程序的运行结果每次可能是不一样的,而且在不同的编译环境中也会有不同的结果。

还真是。。。很莫名其妙啊
我用VC调了下,大概是地址,很可能是改栈里的值结束循环
另外,输出的值不同,因为地址不同的原因吧。
不是很清楚,等我再调调。

哦,匿名的家伙是对的,厉害。

不过我补充一下,在关于字符个数的情况,似乎好像是8个而不是7个,可能是把空字符也算进去了。

内部的pritf()没有第二参数,输出来的是一个任意值,外面的printf()会返回true,应此,程序输出的是一个任意值,并且会执行break语句。

主函数的加载地址和地址数字位数

那个匿名的回答者高手,真是真人不露像啊,^_^

这个程序的运行结果每次可能都不一样的