初始化一个指向具有NULL值的类的指针

Jae*_*ebi 2 c++ arrays pointers

我想初始化一个指向我所做的NODE结构的指针数组

struct Node{
    int data;
    Node* next;
};

the private member of my other class is declared as

Node** buckets;
Run Code Online (Sandbox Code Playgroud)

它目前初始化为buckets = new Node*[SIZE]

无论如何都要初始化数组,使其成员指向NULL或其他一些预定义的Node指针?

编辑:我正在寻找一种初始化它的方法,而不是试图生成一个for循环遍历数组的完整长度.数组的大小在运行时确定.

编辑2:我试过std :: fill_n(buckets,SIZE_OF_BUCKET,NULL); 但编译器给出错误"无法从'const int'转换为'Node*'"我正在使用visual studio 2008.我有什么问题吗?

Eva*_*ran 7

首先,最简单的解决方案是执行以下操作:

Node** buckets = new Node*[SIZE]();
Run Code Online (Sandbox Code Playgroud)

正如之前所述的litb,这将初始化SIZE指向空指针的指针.

但是,如果你想要做这样的事情Node **buckets,并初始化所有的指针为特定值,那么我建议std::fill_n<algorithm>

Node **buckets = new Node*[SIZE];
std::fill_n(buckets, SIZE, p);
Run Code Online (Sandbox Code Playgroud)

这会将每个Node*' 设置为p分配后.

此外,如果您希望Node在构造中具有合理的成员值,那么正确的方法是使用构造函数.像这样的东西:

struct Node {
    Node() : data(0), next(NULL){}
    Node(int d, Node *n = NULL) : data(d), next(n) {}

    int data;
    Node* next;
};
Run Code Online (Sandbox Code Playgroud)

这样你可以这样做:

Node *p = new Node();
Run Code Online (Sandbox Code Playgroud)

并且它将使用0和NULL正确初始化,或者

Node *p = new Node(10, other_node);
Run Code Online (Sandbox Code Playgroud)

最后,这样做:

Node *buckets = new Node[N]();
Run Code Online (Sandbox Code Playgroud)

将构造N Node对象并默认构造它们.