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

C语言局部未初始化静态变量为何不调用全局同名变量值?

为什么局部静态未初始化变量不会使用全局同名变量的值?

先看你给出的代码:

#include<stdio.h>
static int i=27;
int main()
{
  static int i;
  printf("%d",i);
}

程序输出0,核心原因有两个:

  • 局部变量遮蔽了全局变量:在main函数里声明的static int i是一个独立的局部静态变量,它和全局作用域的static int i=27完全是两个不同的变量。C语言的作用域规则是:当当前作用域存在同名变量时,编译器会优先使用当前作用域的变量,全局的同名变量会被“遮蔽”,根本不会被访问到。

  • 静态变量的零初始化规则:C语言规定,所有未显式初始化的静态变量(不管是全局静态还是局部静态)都会被自动初始化为0。所以main里的i虽然没写初始化值,但会被系统自动设为0,而不是去“继承”全局变量的值——因为它们本来就是两个毫不相关的变量。

简单说,这俩i只是名字一样,实际是两块不同的内存空间,各自有自己的初始化规则,互相不影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:22:02