需要将此函数传递给指针的指针.
void get_name(person** p) {
puts(p->name); // this is probably wrong
}
Run Code Online (Sandbox Code Playgroud)
这就是我调用函数的方式(我也不确定):
int main() {
...
get_name(&person); // is this wrong?
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Person显然是一个带有name属性的结构,它是一个字符串.
你如何从**p中引用*p指向的值?
Jam*_*lis 14
x->y只是一个捷径(*x).y. *执行间接(即,它为您提供指针所指向的东西),因此您需要执行间接两次以使事物指向指针所指向的指针:
(**p).name
(*p)->name
Run Code Online (Sandbox Code Playgroud)
如果person是typedefed结构的名称,get_name(&person)则不正确; 你需要一个该结构的实例,你需要一个指向你可以传递给该函数的实例的指针:
int main() {
person p;
person* pp = &p;
get_name(&pp);
}
Run Code Online (Sandbox Code Playgroud)
但是,为什么get_name需要采取一个并不完全清楚person**; 大概是一个person*就足够了.