当我初始化下面的数组时,所有输出看起来都没问题,除了values[3].出于某种原因,values[3]初始化为values[0]+values[5]输出非常大的数字.我的猜测是,我在尝试分配values[0]+values[5]之前将它们妥善存储在内存中,但是如果有人能够解释那将是很好的.
int main (void)
{
int values[10] = {
[0]=197,[2]=-100,[5]=350,
[3]=values[0] + values[5],
[9]= values[5]/10
};
int index;
for (index=0; index<10; index++)
printf("values[%i] = %i\n", index, values[index]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
values[0] = 197
values[1] = 0
values[2] = -100
values[3] = -1217411959
values[4] = 0
values[5] = 350
values[6] = 0
values[7] = 0
values[8] = 0
values[9] = 35
Run Code Online (Sandbox Code Playgroud) c arrays runtime-error designated-initializer unspecified-behavior
考虑以下简单程序:
#include <stdio.h>
int main(void)
{
int a[5] = { a[2] = 1 };
printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
}
Run Code Online (Sandbox Code Playgroud)
使用GCC 7.3.0输出
1 0 1 0 0
考虑到这a[1]是零,似乎初始化类似于
int a[5] = { 1 };
a[2] = 1;
Run Code Online (Sandbox Code Playgroud)
问题是:虽然初始化器可以是任何通用表达式,但是初始化和分配的顺序是什么?
这甚至是有效且定义明确的吗?可能是实现定义,未定义或未指定?
这个问题与C中关于数组初始化的混淆问题有关.