使用指向指针的指针访问结构成员

log*_*eks -1 c++ struct linked-list singly-linked-list function-definition

我有一个如下所示的程序,当我尝试使用指向指针的指针访问结构成员时,它表示表达式必须具有指向类类型的指针。请告诉我如何使用指向指针的指针访问结构对象的数据元素

#include "stdafx.h"
#include<iostream>
struct Node{
    int data;
    Node* next;
};

void addnode(Node** node, int val)
{
    if (node == NULL){
        *node = new Node();
        *node->data = val;

    }
}



int _tmain(int argc, _TCHAR* argv[])
{
    Node* node;
    addnode(&node, 10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ted*_*gmo 5

其中*node->data = val;涉及 3 个操作员。

  • operator*取消引用
  • operator->访问会员
  • operator=做作业

这些会按什么顺序发生?根据运算符优先级,其中规定:

优先级 操作员
2 operator->
3 operator*
16 operator=

node->data会首先发生,然后结果将被取消引用 - 所以你在*(node->data)左边。

您需要node首先取消引用,并可以使用(...)来覆盖优先级规则:

(*node)->data = val;
Run Code Online (Sandbox Code Playgroud)

另请注意,您的原始文件Node*尚未初始化,读取它(就像您在 中所做的那样if(node == NULL))将导致程序出现未定义的行为。将其初始化为nullptr

Node* node = nullptr; // here
addnode(&node, 10);
Run Code Online (Sandbox Code Playgroud)