指向结构指针的指针

时间:2013-01-12 10:00:41

标签: c pointers structure

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

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是一个全局变量。

2 个答案:

答案 0 :(得分:6)

*u->color解析为*(u->color)而不是您想要的(*u)->color,因此编译器会抱怨,因为node*没有color成员(因为它是指针而非结构!)。因此,要么明确插入(*u)->color这样的括号,要么引入一个局部变量:struct node *node = *u;并使用node->color

答案 1 :(得分:6)

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