在C语言中初始化稀疏常量数组
如何在C语言中方便地初始化大型稀疏数组?下面的代码可以正常工作,但对于大型阵列来说会变得很难处理,这基本上是一种全新的方式来处理off-by-one错误!例如,如果我想要一个长度为200的数组,除了索引7、62、100和189处的1之外,所有0都是。这些值在编译时是已知的。我想知道宏是否可以生成数组在C语言中初始化稀疏常量数组,c,arrays,initialization,C,Arrays,Initialization,如何在C语言中方便地初始化大型稀疏数组?下面的代码可以正常工作,但对于大型阵列来说会变得很难处理,这基本上是一种全新的方式来处理off-by-one错误!例如,如果我想要一个长度为200的数组,除了索引7、62、100和189处的1之外,所有0都是。这些值在编译时是已知的。我想知道宏是否可以生成数组 const char myArray[] = {0,0,1,0,0,0,0,0,1,0}; 问题是C++,但也许一个结构的技巧也会在C中工作。 < p>我不知道如何构建宏来实现这一点,但是如果使用
const char myArray[] = {0,0,1,0,0,0,0,0,1,0};
问题是C++,但也许一个结构的技巧也会在C中工作。
< p>我不知道如何构建宏来实现这一点,但是如果使用C99或更高版本,你可以使用指定的初始化器:const char myArray[200] = {
[7] = 1,
[62] = 1,
[100] = 1,
[189] = 1
};
我不知道如何构建宏来实现这一点,但如果使用C99或更高版本,可以使用如下指定的初始值设定项:
const char myArray[200] = {
[7] = 1,
[62] = 1,
[100] = 1,
[189] = 1
};
如果你有C99,你应该在这里使用另一个答案,但如果没有 使用代码生成。我以前使用过pythonmako或纯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 /*...*/
};
如果你有C99,你应该在这里使用另一个答案,但如果没有 使用代码生成。我以前使用过pythonmako或纯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 /*...*/
};
如果定义了大小,并且初始化了部分arry,则标准的ARRANING将设置为0 所以 否则
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个项目的列表很难检查,如果您必须更改某些项目,则很快更改正确的索引。标准的索引是,如果您定义了大小,并且部分初始化了arry,则剩余的索引将设置为0 所以 否则
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个项目的列表很难检查,如果你必须更改某些内容,则非常快地更改正确的索引。C中的初始化要么全是,要么什么都不是。符号中有捷径,但结果仍然是要么全有要么全无。您的目标是一个简短的表示法还是一个部分初始化?在C中,初始化是全部还是无。在表示法中有一些捷径,但结果仍然是全部或无。你的目标是一个简短的符号还是一个部分初始化?很好!未显式初始化的聚合成员默认初始化为零。好的!默认情况下,未显式初始化的聚合成员初始化为零。