为何文件作用域布尔数组元素初始化为false,块作用域则为未定义?
布尔数组初始化差异的原因
这其实是C语言里存储类别与内存分配规则导致的:
- 文件作用域的变量属于「静态存储期」,程序启动时就会在全局/静态存储区分配内存。C标准规定,这类未显式初始化的变量会被自动初始化为「零值」——对应布尔类型就是false。
- 块作用域(比如函数内、代码块里)的变量默认是「自动存储期」,内存分配在栈上。栈内存会保留之前程序运行留下的残留数据,所以未显式初始化的变量值是随机的、不确定的,自然布尔数组的元素值也没法保证是false。
内容的提问来源于stack exchange,提问作者Willem
相关产品推荐
相关产品推荐

