在c ++中默认初始化双指针数组?

时间:2012-07-18 16:55:16

标签: c++ arrays default-value

我很好奇这些是零初始化,当我声明一个固定大小的数组时,我的所有指针都是0。我可以说foo* arr[1000][1000]并且我看到所有条目都是0 ..但我不确定这是否是我可以依赖的东西。我可以说foo* arr[1000][1000] = {}但是这个double数组是一个类中的成员变量,如果没有必要,我不希望在构造函数中有一个double for循环...

2 个答案:

答案 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类型。