如何使用结构构造函数初始化结构内的指针数组?

Posted

技术标签:

【中文标题】如何使用结构构造函数初始化结构内的指针数组?【英文标题】:How to initialize an array of pointer inside a struct by using struct constructor? 【发布时间】:2017-09-14 17:47:40 【问题描述】:

我试过memset喜欢

struct TreeNode 
    bool exist;
    bool word_ending;
    TreeNode* branches[3];
    TreeNode(): exist(true), word_ending(false) 
        memset(branches, NULL, sizeof(branches));
    
;

但出现警告

warning: implicit conversion of NULL constant to 'int' [-Wnull-conversion]
        memset(branches, NULL, sizeof(branches));
        ~~~~~~           ^~~~
                         0
1 warning generated.

还有其他方法可以初始化指向NULL的指针数组吗?

【问题讨论】:

TreeNode* branches[3] = ; 在声明中。 NULL不等于0吗? 如果您在源代码中将 NULL 更改为 0,它将正常编译。但只要按照 NathanOliver 的建议去做。 【参考方案1】:

我们可以在成员初始化列表中初始化数组,而不是使用memset。如果我们使用

TreeNode(): existtrue, word_endingfalse, braches 

然后braches 将被零初始化。这是可行的,因为初始化列表中每个缺失的初始化器都会导致相应的元素初始化为零。

【讨论】:

谢谢!但是如何用 nullptr 初始化分支呢?它与 0 不同。 @danche 0 是空指针。 nullptr 只是 0 转换为指针类型。 所以我们不需要branchesnullptr, nullptr, nullptr? @danche 你可以,但你不需要它。 braches 会做你想做的事。 braches 本质上是braches0, 0, 0 本质上是branchesnullptr, nullptr, nullptr

以上是关于如何使用结构构造函数初始化结构内的指针数组?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 如何将一个静态结构体数组初始化?

C++结构体指针数组如何分配空间,用new

C#如何调用C++的DLL的结构体数组指针

如何使数组的大小取决于构造函数参数?

C++ 结构体如何初始化

关于C语言结构体构造函数初始化的问题?