我有一个如图所示的结构。当我有一个指向结构的指针时,我能够正常初始化或修改它的任何成员。
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是一个全局变量。
答案 0 :(得分:6)
*u->color
解析为*(u->color)
而不是您想要的(*u)->color
,因此编译器会抱怨,因为node*
没有color
成员(因为它是指针而非结构!)。因此,要么明确插入(*u)->color
这样的括号,要么引入一个局部变量:struct node *node = *u;
并使用node->color
答案 1 :(得分:6)
您是否知道间接(解除引用)运算符*
的优先级低于元素选择运算符->
?也就是说,您应该写(*u)->color
,而不是*u->color
。