提问人:Tar 提问时间:11/15/2022 最后编辑:Vlad from MoscowTar 更新时间:11/15/2022 访问量:277
数组的元素在C编程中什么时候存储垃圾值?[复制]
When do the elements of array store garbage value in C programming? [duplicate]
问:
我正在编写代码来学习数组,我注意到如果将数组声明为
a[5];
它将垃圾值存储为其元素 而
a[5] = {};
将 0 存储为所有元素。
有人可以解释发生了什么以及这些值是如何存储的吗?
我想知道这是否是静态数据类型,但似乎不是这样
#include<stdio.h>
void increment();
int main()
{
increment();
increment();
increment();
}
void increment()
{
int a[5]={};
static int b[5]={1,2,3,4,5};
int i;
for(i=0;i<=4;i++)
{
a[i]++;
b[i]++;
}
printf("%d %d\n",a[1],b[1]);
}
答:
1赞
Vlad from Moscow
11/15/2022
#1
具有自动存储持续时间的变量(在没有存储类说明符的块作用域中声明)如果未显式初始化,则它们将保持未初始化状态。static
本声明
int a[5] = {};
在 C 中无效。不能指定空的支撑列表。例如,你必须写
int a[5] = { 0 };
或
int a[5] = { [0] = 0 };
在这种情况下,第一个元素由零显式初始化,所有其他元素都隐式初始化为零。
编译器可以有自己的语言扩展,允许使用一些在 C 标准中无效的结构。
如果数组具有静态存储持续时间(在文件范围内声明或具有存储类说明符),则如果数组未显式初始化,则会隐式初始化(对于算术类型,它是零初始化的)。static
具有静态存储持续时间的数组在函数调用之间保留其值。
在函数中increment
void increment()
{
int a[5]={ 0 };
static int b[5]={1,2,3,4,5};
/...
每次函数获取控件时,都会初始化具有自动存储持续时间的数组。a
具有静态存储持续时间的数组在程序启动前仅初始化一次。b
评论
int a[5]
int a[5]={};