如何使用某些值初始化数组中的少数元素?

kae*_*atl 41 c arrays initialization

这可能是一个愚蠢的问题,但是可以为数组而不是全部分配一些值吗?澄清我想要的东西:

如果我需要一个像{1,0,0,0,2,0,0,0,3,0,0,0}我可以创建它的数组:

int array[] = {1,0,0,0,2,0,0,0,3,0,0,0};
Run Code Online (Sandbox Code Playgroud)

该数组的大多数值都是'0'.是否可以跳过此值并仅分配值1,2和3?我想到的是:

int array[12] = {0: 1, 4: 2, 8: 3};
Run Code Online (Sandbox Code Playgroud)

hac*_*cks 73

是否可以跳过此值并仅分配值1,2和3?

在C中,是的.使用指定的初始值设定项(在C99中添加,在C++中不受支持).

int array[12] = {[0] = 1, [4] = 2, [8] = 3};  
Run Code Online (Sandbox Code Playgroud)

上述初始值设定将初始化元件0,4并且8阵列的array与值1,23分别.Rest元素将初始化为0.这相当于

 int array[12] = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0};   
Run Code Online (Sandbox Code Playgroud)

最好的部分是列出元素的顺序无关紧要.人们也可以这样写

 int array[12] = {[8] = 3, [0] = 1, [4] = 2}; 
Run Code Online (Sandbox Code Playgroud)

但请注意,里面的表达式[ ]应该是一个整数常量表达式.

  • @ray C++与C不兼容.它们有共同的子集,但即使在那里,也存在许多差异.C语言中也有很多很多东西在C++中不受支持.看看C11. (3认同)
  • @WhiZTiM指定的初始值设定项是C而不是C++ (2认同)
  • @FirstStep您在初始化程序中处理非固定数组索引.所以答案是否定的. (2认同)

nal*_*zok 13

这是我的琐碎方法:

int array[12] = {0};
array[0] = 1; array[4] = 2; array[8] = 3;
Run Code Online (Sandbox Code Playgroud)

但是,从技术上讲,这不是"初始化"数组:)


Ian*_*Ian 6

另一种方法是为memset数组中的所有元素赋予默认值,然后分配特定元素:

int array[12];
memset(array, 0, sizeof(int) * 12); //if the default value is 0, this may not be needed
array[0] = 1; array[4] = 2; array[8] = 3;
Run Code Online (Sandbox Code Playgroud)

  • `memset(array,0,sizeof array)有什么问题;`? (4认同)
  • 实际上没关系.使用`sizeof(data_type)*data_type_size` - 只是我的习惯...... :) (2认同)