我想弄清楚为什么即使局部变量 i 从未在此 C 程序中初始化,许多系统也会打印出 0 1 2 3 4 5 6 7 8 9
谁能解释一下这是为什么?感谢您的帮助!
void foo() {
int i;
printf("%d ", i++);
}
int main() {
int j;
for (j = 1; j <= 10; j++) foo();
}
最佳答案
行为未定义。统计数据无关紧要。这可能是因为堆栈的布局和初始化,但也可能是由于任何其他原因。
例如,假设:
- 不检查变量是否初始化。
- 这是一个简单的堆叠机。
- 栈初始化为0。
- 变量
i
分配在堆栈上,而不是寄存器。 - 调用函数时,它不会初始化堆栈。
在这种情况下,i
每次都会引用堆栈中的同一个位置,将从 0 开始,堆栈中的相同位置每次都会递增 1。
关于c - 为什么 C 中未初始化的变量仍然产生输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666964/