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