代码之家  ›  专栏  ›  技术社区  ›  Jaelebi

初始化指向具有空值的类的指针

  •  2
  • Jaelebi  · 技术社区  · 17 年前

    我正试图初始化指向我所创建的节点结构的指针数组

    struct Node{
        int data;
        Node* next;
    };
    
    the private member of my other class is declared as
    
    Node** buckets;
    

    它当前初始化为 buckets=新节点*[大小]

    是否仍要初始化数组,使其成员指向空或其他预定义的节点指针?

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

    编辑2:我尝试了std::fill_n(buckets,size_of_bucket,空);但编译器给出了一个错误:“无法从‘const int’转换为‘node*’”,我使用的是Visual Studio 2008。我做错什么了吗?

    2 回复  |  直到 12 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    首先,最简单的解决方案是:

    Node** buckets = new Node*[SIZE]();
    

    AS litb 前面说过,这将值初始化 SIZE 指向空指针的指针。

    但是,如果你想做一些像 Node **buckets 初始化指向特定值的所有指针,然后我建议 std::fill_n 从 <algorithm>

    Node **buckets = new Node*[SIZE];
    std::fill_n(buckets, SIZE, p);
    

    这将设置每个 Node* 对 p 分配后。

    此外,如果希望节点具有健全的成员值supon构造,则正确的方法是拥有一个构造函数。像这样:

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

    这样就可以做到:

    Node *p = new Node();
    

    它将正确初始化为0和空,或者

    Node *p = new Node(10, other_node);
    

    最后,这样做:

    Node *buckets = new Node[N]();
    

    意志构建 N Node 对象和默认构造它们。

        2
  •  1
  •   peterchen    17 年前

    如果您的意思是数组指针数组 buckets 然后是的。刚设定 buckets = NULL .

    编辑:根据你的问题编辑,只需使用memset。

    memset(buckets, 0, NUM_ELEMENTS_IN_BUCKETS*sizeof(Node*));