在C中是否有一个数组中变量的模式,它被赋值为0?

Jas*_*ngh 4 c arrays initialization

我想知道是否在C中声明了一个int元素数组.是否有一个模式,根据该模式,只有数组的某些值被赋值为0而其他值存储垃圾值?例如:

#include <stdio.h>

void main()
{
    int a[5];
    int i;
    for (i=0;i<=4;i++)
    {
        printf("%d\n",a[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译并运行程序后,我得到了这个输出,即

0
0
4195344
0
2107770384
Run Code Online (Sandbox Code Playgroud)

所以零存在a[0], a[1]并且a[3]while a[2]每次编译和运行时包含相同的值,而a[4]值保持变化(包括负数).为什么只发生一个数组的某些固定索引被初始化为零并且它是否与过去的内存空间分配有关?

Jac*_*ack 8

这种行为是不确定的,只是巧合.当您在堆栈上声明一个数组并且不对其进行初始化时,该数组将从另一个(可能是之前的)堆栈帧中获取值.

旁白:如果要对堆栈上声明的数组进行零填充(在常量时间内),则可以使用以下初始化语法对其进行初始化:

int arr[ 5 ] = { 0 };
Run Code Online (Sandbox Code Playgroud)

它会将第一个元素写为0,并对其余元素进行零填充.但是,如果您在全局声明了未初始化的数组,那么它将自动填充为零.

  • @LightnessRacesinOrbit,不是很有必要......再次读到我的旁边.我添加了一个额外的"但是"来分隔我试图沟通的两点. (3认同)