不久前,有人向我指出,初始化(一维)数组中的值也会用 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/