请解释这个C程序

时间:2013-09-07 16:30:14

标签: c

#include<stdio.h>
#include<conio.h>
void main()
{
int a=10,b=11;
clrscr();
printf("%d");
getch();
}

输出= 11 如果输出是11,我甚至没有在printf函数中提到变量名。

2 个答案:

答案 0 :(得分:5)

由于b变量,11位于堆栈中,并且您的printf()函数正在堆栈上查找堆栈上的值,因为这是变量传递的位置。

如果你添加一个c=47,你可能会得到47.但这是未定义的行为。

答案 1 :(得分:3)

这称为&#34;未定义的行为&#34;,这意味着程序可以做任何事情。

在这种情况下实际发生的是变量和函数参数都放在堆栈上。由于您没有传递printf期望的参数,因此最终会从堆栈中提取其他内容,即b变量。

但是因为它是未定义的行为,如果你有不同的编译器,不同的CPU,甚至不同的编译选项,例如更高的优化级别,你可能得到非常不同的结果。