如何在C中方便地初始化大型稀疏数组?下面的代码可以工作,但对于大型数组来说变得难以操作,基本上是一种全新的方法,可以解决一个错误!例如,如果我想要一个长度为200的数组,除了索引7,62,100和189的1之外,该怎么办。这些值在编译时是已知的。我想知道宏是否可以生成数组。
const char myArray[] = {0,0,1,0,0,0,0,0,1,0};
This问题适用于C ++,但也许结构的技巧也适用于C语言。
答案 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个项目的列表很难检查),如果你必须改变事情很快就会改变正确的指数。