我希望在5个位置阵列的第4位存储10个。怎么办?
int main( )
{
int a[5] = {,,,,4} ;
return 0;
}
如果我这样做,我会收到错误。请帮忙。
提前致谢。
答案 0 :(得分:16)
您无法通过初始化执行此操作,但您可以保留未初始化的数据,然后分配给您关注的数据:
int a[5]; a[3] = 10;
我不确定为什么你想要这样做,但这是一个完全独立的问题......
编辑:我应该在C99中添加,可以使用初始化:
int a[4] = { [3]=10 };
这称为指定初始化。
答案 1 :(得分:2)
我假设当你说“第4个位置”时你的意思是数组索引= 4(实际上是第五个位置)。如果确实需要在一行中完成:
int main()
{
int a[5] = { a[0], a[1], a[2], a[3], 10 };
return 0;
}
使用gcc -Wall -O0
编译并运行时没有任何警告或错误。通过启用优化进行编译,例如gcc -Wall -O3
,生成警告,例如
foo.c:3: warning: ‘a[0]’ is used uninitialized in this function
但它仍然可以编译并运行而不会出错。
答案 2 :(得分:2)
只需将其他元素明确设置为0
。
int a[5] = {0,0,0,0,10} ;
答案 3 :(得分:1)
如果您使用的是C99,则可以使用名为指定的初始化程序的功能来初始化特定的数组元素。在这种情况下,您可以这样做:
int a[5] = { [4] = 4 };
将索引4处的元素初始化为4,将所有其他元素初始化为0。
GCC还为C语言提供了此功能as an extension,但请记住,这不是有效的ISO C90,也不是在C ++中有效。它仅在C99有效。
答案 4 :(得分:1)
我想你可以使用新的展示位置。
int arr[4]; //uninitialized
new (&arr[3]) int(10); //"initializes"
答案 5 :(得分:0)
我认为你不能在C中有一个“未初始化的”int
。这看起来应该会给编译器错误。
我认为你必须使用:
int main( )
{
int a[5] = {0,0,0,0,4} ;
return 0;
}