C++ 初始化指针数组

标签 c++ pointers array-initialization

我知道通过指针你可以做到这一点:

T * myPtr = 0;

将指针设置为 NULL 值。但是,当我尝试这样做时:

T * myPtrArray[2] = {0, 0};

我收到“预期表达式”语法错误。为什么?

请注意,我使用的是 g++,上面的代码出现在类构造函数中:

template <class T>
    RBTree<T>::RBTree() {
        m_Data = T();
        m_Children = {0, 0};
        m_Parent = 0;
        m_Color = BLACK;
    }

有问题的类成员声明为:

T m_Data;
RBTree<T> * m_Children[2];
RBTree<T> * m_Parent;
bool m_Color;

最佳答案

T * myPtrArray[2] = {0, 0}; 形式称为 aggregate initialization .它在分配中没有对应物,所以写

T * myPtrArray[2];
myPtrArray = {0, 0};

无效。

在类构造的情况下,聚合初始化在c++98/03中是不可用的。

如果你的编译器支持c++11标准,你可以使用统一的初始化语法。在您的示例中有两种初始化 m_Children 的方法:

#1

在构造函数中:

template <class T>
RBTree<T>::RBTree(): m_Children {0, 0} /* other init here */ {

}

#2

在类成员声明期间:

T m_Data;
RBTree<T> * m_Children[2] {0, 0};
RBTree<T> * m_Parent;
bool m_Color;

关于C++ 初始化指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117165/

相关文章:

c++ - 始终返回的地址为0而不是实际值

c++ - 2D MemoryView 到 C 指针错误(1D 有效,但 2D 无效)

C++,指向整数比较错误的指针

c++ - int数组的类型是什么?

c++ - 在编译时使用枚举作为索引分配数组的值 (C++)

java - 为什么不能在 Java 构造函数中使用速记数组初始化字段?

c++ - wxWidgets 中简单的 openGL 显示循环期间不完整的场景重绘

c++ - 什么是 'extern inline' 函数以及何时使用?

c++ - 在 Windows 上编译错误 C2131 和 C3863,但在 Linux 上没有