0

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

4

2 回答 2

4

取决于你如何分配数组。

如果是static全局变量,则内容将全部初始化为 0。如果是局部变量,则内容不会初始化为任何内容。

因此,由于您的数组是成员变量,因此不会自动将其初始化为 0。但是,您可以使用构造函数中的初始化列表将所有变量初始化为零:

struct A {
    //    VVV   value-initialises the contents of arr
    A() : arr() { }

    double arr[x][y];
};
于 2012-07-18T16:57:23.957 回答
3

这取决于上下文。如果数组是在命名空间级别定义的,那么静态初始化将为您设置所有指针为空。如果它被定义在函数范围内或作为类的成员,则没有这样的保证。

由于它是一个类的成员,它不会被正确初始化,所以你需要手动初始化它。您可以通过添加arr()到初始化列表来做到这一点。作为指针,您可以memset在一次调用中将整个数组设置为 0(这也将尽可能高效),但请注意,这仅适用于POD类型。

于 2012-07-18T16:57:16.017 回答