#include<stdio.h>
#include<conio.h>
void main()
{
int a=10,b=11;
clrscr();
printf("%d");
getch();
}
输出= 11 如果输出是11,我甚至没有在printf函数中提到变量名。
答案 0 :(得分:5)
由于b
变量,11位于堆栈中,并且您的printf()
函数正在堆栈上查找堆栈上的值,因为这是变量传递的位置。
如果你添加一个c=47
,你可能会得到47.但这是未定义的行为。
答案 1 :(得分:3)
这称为&#34;未定义的行为&#34;,这意味着程序可以做任何事情。
在这种情况下实际发生的是变量和函数参数都放在堆栈上。由于您没有传递printf期望的参数,因此最终会从堆栈中提取其他内容,即b
变量。
但是因为它是未定义的行为,如果你有不同的编译器,不同的CPU,甚至不同的编译选项,例如更高的优化级别,你可能得到非常不同的结果。