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

Output=11 即使我没有提到 printf 函数中的变量名,输出如何是 11。

4

2 回答 2

5

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

如果添加 a c=47,您可能会得到 47。但这是未定义的行为。

于 2013-09-07T16:32:07.817 回答
3

这被称为“未定义行为”,这意味着程序几乎可以做任何事情。

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

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

于 2013-09-07T16:31:35.337 回答