用我的话说,我用本身初始化数组,就像这样,然后将其打印出来:
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
我不明白它是如何工作的。为什么我可以使用自身的元素初始化数组?
答案 0 :(得分:2)
C中的变量分为两个步骤:
简单的int a[10]
足以将变量a
声明和定义为包含十个int
元素的数组。如果在函数内部局部声明(作为 automatic 变量),则数组的内容将不确定,并且看起来是随机的。
在初始化中使用数组本身(之所以有效,因为已经定义了变量),然后使用数组本身的不确定数据对其进行初始化。等于根本不初始化数组。
对于整数类型,这通常可以正常工作,但是如果数据包含具有陷阱条件的值(其他类型可能会发生),则使用它们会导致未定义行为。