如何仅在5个阵列的阵列中初始化第4个位置

时间:2010-04-08 13:46:25

标签: c++ c

我希望在5个位置阵列的第4位存储10个。怎么办?

int main( ) 
{  
    int a[5] = {,,,,4} ;
    return 0; 
}

如果我这样做,我会收到错误。请帮忙。

提前致谢。

6 个答案:

答案 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; 
}