2013-01-12 393 views
1

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

struct node{ 
    int key; 
    int nno; 
    char color; 
    struct node* out; 
    struct node* next; 
    struct node* pre; 
}; 

但是,当我通过结构指针的地址的功能,同样采用双指针,并试图访问使用双指针成员捕捉,我的编译器抛出一个错误“成员未定义”。

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

回答

6

你知道,间接(间接引用)运营商,*,具有比元件选择运营商,->较低的优先级?那就是,你应该写(*u)->color,而不是*u->color

+0

谢谢。这有帮助! – Krishna

6

*u->color解析为*(u->color)而不是你想要的(*u)->color所以编译器会抱怨,因为node*没有color成员(因为它是一个指针,而不是一个结构!)。因此,明确地插入支架像(*u)->color或引入一个局部变量:struct node *node = *u;和使用node->color