我很好奇这些是零初始化,当我声明一个固定大小的数组时,我的所有指针都是0。我可以说foo* arr[1000][1000]
并且我看到所有条目都是0 ..但我不确定这是否是我可以依赖的东西。我可以说foo* arr[1000][1000] = {}
但是这个double数组是一个类中的成员变量,如果没有必要,我不希望在构造函数中有一个double for循环...
答案 0 :(得分:4)
取决于你如何分配数组。
如果它是static
或全局,那么内容将全部初始化为0.如果它是局部变量,那么内容将不会被初始化为任何内容。
因此,由于您的数组是成员变量,因此它不会自动初始化为0。但是,您可以通过使用构造函数中的初始化列表将所有变量初始化为零:
struct A {
// VVV value-initialises the contents of arr
A() : arr() { }
double arr[x][y];
};
答案 1 :(得分:3)
这取决于具体情况。如果数组是在命名空间级别定义的,那么静态初始化会将所有指针设置为null。如果它在函数作用域中定义或作为类的成员定义,则没有这样的保证。
由于它是类的成员,因此无法正确初始化,因此您需要手动初始化它。您可以通过将arr()
添加到初始化列表来完成此操作。作为指针,您可以使用memset
在一次调用中将整个数组设置为0(这也将同样有效),但要注意,这仅适用于POD
类型。