首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++初始化指针数组

C++初始化指针数组
EN

Stack Overflow用户
提问于 2015-10-14 05:21:58
回答 2查看 613关注 0票数 0

我知道你可以用指南针做到这一点:

代码语言:javascript
运行
复制
T * myPtr = 0;

它将指针设置为空值。然而,当我尝试这样做时:

代码语言:javascript
运行
复制
T * myPtrArray[2] = {0, 0};

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

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

代码语言:javascript
运行
复制
template <class T>
    RBTree<T>::RBTree() {
        m_Data = T();
        m_Children = {0, 0};
        m_Parent = 0;
        m_Color = BLACK;
    }

如有关班级成员被宣布为:

代码语言:javascript
运行
复制
T m_Data;
RBTree<T> * m_Children[2];
RBTree<T> * m_Parent;
bool m_Color;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 06:06:13

表单T * myPtrArray[2] = {0, 0};称为聚合初始化。它没有对应的任务,所以写

代码语言:javascript
运行
复制
T * myPtrArray[2];
myPtrArray = {0, 0};

是无效的。

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

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

#1

在构造函数中:

代码语言:javascript
运行
复制
template <class T>
RBTree<T>::RBTree(): m_Children {0, 0} /* other init here */ {

}

#2

在班级成员声明期间:

代码语言:javascript
运行
复制
T m_Data;
RBTree<T> * m_Children[2] {0, 0};
RBTree<T> * m_Parent;
bool m_Color;
票数 1
EN

Stack Overflow用户

发布于 2015-10-14 05:35:40

从C++11开始,您可以使用nullptr而不是0。首选使用nullptr,因为它是指针而不是整数。然后,你可以:

代码语言:javascript
运行
复制
T * myPtrArray[2] = {nullptr, nullptr};

无论如何,您的代码在我的编译器上工作得很好,您可以看到使用0nullptr编译而没有错误论意为的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33117165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档