此问题在此处已有答案:
initial value of int array in C(共10个答案)
How does an uninitialized array affect the outcome? (no debugging)(5个答案)
17天前关闭。
我写了一段代码来学习数组,我注意到如果数组声明为
a[5];
它将垃圾值存储为它的'元素While
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条答案
按热度按时间zzwlnbp81#
具有自动存储持续时间的变量(在没有存储类说明符
static
的块作用域中声明)如果没有显式初始化,则保持未初始化状态。本声明
在C语言中无效。不能指定空的花括号列表。必须编写例如
或
在这种情况下,第一个元素显式初始化为零,所有其他元素隐式初始化为零。
编译器可以有自己的语言扩展,允许使用某些在C标准中无效的构造。
如果数组具有静态存储持续时间(在文件范围中声明或具有存储类说明符
static
),则如果未显式初始化,则会隐式初始化该数组(对于算术类型,它是以零初始化的)。具有静态存储持续时间的数组在函数调用之间保留其值。
函数
increment
内每次当函数获得控制时,初始化具有自动存储持续时间的数组
a
。具有静态存储持续时间的数组
b
在程序启动之前仅初始化一次。