初始化带有自身元素的数组的问题

时间:2019-01-24 09:13:11

标签: c

用我的话说,我用本身初始化数组,就像这样,然后将其打印出来:

int a[10] =
{
   a[0], a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]   
};
int i = 0;
for(i = 0; i <10; i++)
{
     printf("a[%d] = 0x%x  \r\n",i,a[i]);
}

它显示:

a[0] = 0x4300eb50  
a[1] = 0x7f10  
a[2] = 0x0  
a[3] = 0x0  
a[4] = 0x9c76b200  
a[5] = 0x55c1  
a[6] = 0x9c76b060  
a[7] = 0x55c1  
a[8] = 0x93785430  
a[9] = 0x7ffc 

我不明白它是如何工作的。为什么我可以使用自身的元素初始化数组?

1 个答案:

答案 0 :(得分:2)

C中的变量分为两个步骤:

  1. 声明和定义(由编译器分配空间)
  2. 初始化(可选)

简单的int a[10]足以将变量a声明和定义为包含十个int元素的数组。如果在函数内部局部声明(作为 automatic 变量),则数组的内容将不确定,并且看起来是随机的。

在初始化中使用数组本身(之所以有效,因为已经定义了变量),然后使用数组本身的不确定数据对其进行初始化。等于根本不初始化数组。

对于整数类型,这通常可以正常工作,但是如果数据包含具有陷阱条件的值(其他类型可能会发生),则使用它们会导致未定义行为