c - 初始化多维数组中的一个值是否会初始化数组的其余部分?

标签 c arrays multidimensional-array

不久前,有人向我指出,初始化(一维)数组中的值也会用 0 初始化数组的其余部分。也就是说,

int array[5] = { 1 };

...实际上等同于:

int array[5] = { 1, 0, 0, 0, 0 };

多维数组也是如此吗?考虑这段代码:

double matrix[5][5] = { { 1.0 } };

如果matrix[0][0]是唯一分配的值,则其余部分是垃圾(内存中的剩余部分),或者其余部分用0.0填充?

有人可能会说我可以简单地迭代这些值来亲自查看,但我担心我可能会很幸运并且总是让 matrix 占据“空”内存(其中的位都是0) 这可能会导致我得出错误的结论。

最佳答案

是的,多维数组也是如此。来自 C11 草案 N1570,6.7.9.10 美元:

  • if it has pointer type, it is initialized to a null pointer;
  • if it has arithmetic type, it is initialized to (positive or unsigned) zero;
  • if it is an aggregate, every member is initialized (recursively) according to these rules [above], and any padding is initialized to zero bits;

因此保证数组的所有成员都初始化为零。

关于c - 初始化多维数组中的一个值是否会初始化数组的其余部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33443616/

相关文章:

java - 写入 SourceDataLine 时出现空指针异常

javascript - 为什么这个 React 组件返回字符串 '0'

php - 从嵌套数组中获取总和

json - 在 Swift 5.1 中循环多维/嵌套 JSON 数据

java - 添加到Arraylist会覆盖其余部分,这是为什么

c - GCD 中的定时锁?

c - 找出输入字符的两个出现之间的最大空间的程序

c - 在 windows 中使用在 cygwin 上编译的 linux 代码进行生产是否可以?

c - 去 1.5+ : Error - imports runtime: C source files not allowed when not using cgo or SWIG

c - 在另一个字符串中的每个字符之前附加相同的字符串