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
相关产品推荐
相关产品推荐

