You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言未初始化int变量值异常咨询:为何foo值等于函数参数值?

为什么未初始化的局部变量foo会读到函数参数的值?

这事儿本质是未定义行为(Undefined Behavior),但从栈内存的工作机制可以解释你看到的这个特定现象——咱们一步步拆解:

  • 首先,C语言里的局部变量(比如test()里的foo)默认分配在栈上,而且不会自动初始化。如果不对它赋值,它的值就是栈内存里之前留下的“残留垃圾”。
  • 第一次调用test()时,foo所在的栈位置之前可能是随机的垃圾值,所以输出的是不确定的数。
  • 接下来调用funktion(5):函数调用时,参数5会被压入栈中(不同调用约定细节可能有差异,但核心逻辑一致)。funktion执行完后,栈指针会往回移动释放栈帧,但栈内存里的5并不会被主动清空——只是标记这块内存可以被后续使用。
  • 第二次调用test()时,foo又被分配到了栈上的同一个位置(刚好是之前funktion参数5所在的地方),所以它就“捡”到了这个残留值,输出了5。

关键提醒:

这完全是编译器和运行环境的偶然行为,属于C标准里明确的未定义行为——换个编译器、开个优化选项、甚至改改代码顺序,结果都可能不一样。绝对不能依赖这种现象写代码,正确的做法永远是显式初始化所有局部变量,比如写成int foo = 0;。

内容的提问来源于stack exchange,提问作者user3849220

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:19:19