指向结构指针的指针

Kri*_*hna 1 c pointers structure

我有一个如图所示的结构.当我有一个指向结构的指针时,我能够正常初始化或修改它的任何成员.

struct node{
    int key;
    int nno;
    char color;
    struct node* out;
    struct node* next;
    struct node* pre;
};
Run Code Online (Sandbox Code Playgroud)

但是,当我将结构指针的地址传递给函数并使用双指针捕获它时,并尝试使用该双指针访问成员时,我的编译器抛出错误'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';
}
Run Code Online (Sandbox Code Playgroud)

而且,这就是我访问该功能的方式.

DFSVisit(&root);
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*kin 6

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


And*_*ong 6

您是否知道间接(解除引用)运算符的*优先级低于元素选择运算符->?也就是说,你应该写作(*u)->color,而不是*u->color.