Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中初始化稀疏常量数组_C_Arrays_Initialization - Fatal编程技术网

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

在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>我不知道如何构建宏来实现这一点,但是如果使用

如何在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>我不知道如何构建宏来实现这一点,但是如果使用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中,初始化是全部还是无。在表示法中有一些捷径,但结果仍然是全部或无。你的目标是一个简短的符号还是一个部分初始化?很好!未显式初始化的聚合成员默认初始化为零。好的!默认情况下,未显式初始化的聚合成员初始化为零。