C 指向结构指针的指针

C 指向结构指针的指针,c,pointers,structure,C,Pointers,Structure,我有一个结构如图所示。当我有一个指向结构的指针时,我可以初始化或修改它的任何成员 struct node{ int key; int nno; char color; struct node* out; struct node* next; struct node* pre; }; 但是,当我将结构指针的地址传递给函数并使用双指针捕获该地址,并尝试使用该双指针访问成员时,我的编译器抛出了一个错误“member undefined” void DF

我有一个结构如图所示。当我有一个指向结构的指针时,我可以初始化或修改它的任何成员

struct node{
    int key;
    int nno;
    char color;
    struct node* out;
    struct node* next;
    struct node* pre;
};
但是,当我将结构指针的地址传递给函数并使用双指针捕获该地址,并尝试使用该双指针访问成员时,我的编译器抛出了一个错误“member undefined”

void DFSVisit(struct node** u){
    *u->color = 'g';
    struct node* v;
    while(*u->out != NULL){
            v = *u->out;
                    if(v->color == 'w'){
                            v->pre = *u;
                            DFSVisit(&v);
                    }
    } 
    *u->color = 'b';
}
这就是我访问函数的方式

DFSVisit(&root);

Root是正确初始化的指针。而且,Root是一个全局变量。

*u->color解析为*u->color而不是所需的*u->color,因此编译器会抱怨,因为节点*没有颜色成员,因为它是指针而不是结构!。因此,要么显式插入括号,如*u->color,要么引入一个局部变量:struct node*node=*u;使用node->color

*u->color解析为*u->color,而不是所需的*u->color,因此编译器会抱怨,因为node*没有color成员,因为它是指针而不是结构!。因此,要么显式插入括号,如*u->color,要么引入一个局部变量:struct node*node=*u;并使用node->color

您是否知道间接反引用操作符*,其优先级低于元素选择操作符->?也就是说,您应该写入*u->color,而不是*u->color。

您是否知道间接反引用运算符*,其优先级低于元素选择运算符->?也就是说,您应该编写*u->color,而不是*u->color