Aas*_*ahi 0 c arrays initialization
我试图对阵列初始化进行一些实验.在下面提到的程序中,我初始化了一个数组,同时提到了它的维度,同时,我提到了数组的值,但是我在初始化过程中提到的数组的总数值小于数组的维数.数组,因此我期待某种形式的大垃圾值(如第二个程序所示,这基本上是为了表明,除非为数组的元素赋值将基本上生成垃圾值),但这个数组的最后一个值是仅产生0作为输出.为什么这样 ??
程序1 -
(而不是数组最后一个元素的大垃圾值,而是生成的输出为0.)
#include <stdio.h>
int main(void)
{
int array[5]={1,2,3,4};
printf("\nValues of array are :");
for (int i = 0; i < 5; ++i)
{
printf("\t%d",array[i]);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
程序2-
(这主要是为了表明值被分配给一个数组,它只是生成一些大的垃圾值)
#include <stdio.h>
int main(void)
{
//For accepting the size of an array
int num;
printf("\nEnter the size of an array:\t");
scanf("%d",&num);
//Declaration of an array
int array[num];
//Printing output of an array
for (int i = 0; i < num; ++i)
{
printf("\nValue of array[%d]=%d",i,array[i]);
}
printf("\n-------------------------------------------------------\n");
printf("Apparently you will be finding out garbage values as elements of array\n");
}
Run Code Online (Sandbox Code Playgroud)
对于第一个片段.引用C11,第§6.7.9
如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.
关于在具有静态存储持续时间的对象的情况下用于初始化的值,第10段,
如果未显式初始化具有静态或线程存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零;
- 如果它是一个聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零比特;
- 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员,并将任何填充初始化为零位;
因此,如果括号括起的列表中的初始值设定项较少,则其余项目将设置为0(类型为int).
然而,对于第二种情况,阵列保持单元化,因此内容是不确定的.