在C中初始化稀疏常量数组

时间:2016-11-19 02:41:09

标签: c arrays initialization

如何在C中方便地初始化大型稀疏数组?下面的代码可以工作,但对于大型数组来说变得难以操作,基本上是一种全新的方法,可以解决一个错误!例如,如果我想要一个长度为200的数组,除了索引7,62,100和189的1之外,该怎么办。这些值在编译时是已知的。我想知道宏是否可以生成数组。

const char myArray[] = {0,0,1,0,0,0,0,0,1,0};

This问题适用于C ++,但也许结构的技巧也适用于C语言。

3 个答案:

答案 0 :(得分:10)

我不知道如何构建宏来实现这一点,但是如果你使用C99或更高版本,你可以使用这样的指定初始化器:

const char myArray[200] = {
    [7] = 1,
    [62] = 1,
    [100] = 1,
    [189] = 1
};

答案 1 :(得分:0)

如果你有C99,你应该在这里使用另一个答案,但如果没有....

使用代码生成。我之前使用过Python Mako或者只是普通的Python来生成类似于你需要的代码。

如果你只需要使用C89,我会这样做:

#define TEN_ZEROS 0,0,0,0,0,0,0,0,0,0

const char myArray[] = {
    0,0,0,0,0,0,0,1,0,0,
    TEN_ZEROS,
    TEN_ZEROS,
    TEN_ZEROS,
    TEN_ZEROS,
    TEN_ZEROS,
    0,1 /*...*/
};

答案 2 :(得分:0)

标准garanties,如果您已定义大小并且您初始化arry,则剩余部分将设置为0 所以

int myarray[200]={0}; //this set all the array to 0;
myarray[7]=23;
   ....

否则

 static int myarray[200]; //also all the static variable get set to 0
  myarray[7]=23;

或者最后一个

  memeset(myarray, 0, sizeof(myarray))
  myarray[7]=23;

这些都是首选列表或其他解决方案,因为显然你做了什么,没有冒险错误项目的风险,(200个项目的列表很难检查),如果你必须改变事情很快就会改变正确的指数。