c - 为什么 C 中未初始化的变量仍然产生输出

标签 c variables stack initialization

我想弄清楚为什么即使局部变量 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();
}

最佳答案

行为未定义。统计数据无关紧要。这可能是因为堆栈的布局和初始化,但也可能是由于任何其他原因。

例如,假设:

  1. 不检查变量是否初始化。
  2. 这是一个简单的堆叠机。
  3. 栈初始化为0。
  4. 变量 i 分配在堆栈上,而不是寄存器。
  5. 调用函数时,它不会初始化堆栈。

在这种情况下,i 每次都会引用堆栈中的同一个位置,将从 0 开始,堆栈中的相同位置每次都会递增 1。

关于c - 为什么 C 中未初始化的变量仍然产生输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666964/

相关文章:

c - 将整数存储在 char 数组中

c - ARM架构下调用函数的GCC返回地址

c - 为数组分配一个随机值

c - 如何让 child 等待 parent 返回(而不是退出)然后自杀?

mysql - 在插入更新请求中使用 var 不起作用

php - Python 到 PHP 值

java - 我在尝试用 int 值填充堆栈数组时遇到 OutOfMemoryError

c++ - 制作一堆 int 数组

c - 返回结构体的地址

javascript - JavaScript 变量中的简单 Iframe