x->y
- это просто сокращение для (*x).y
. *
выполняет косвенное обращение (то есть, оно дает вам указатель, на который указывает указатель), поэтому вам нужно выполнить косвенное обращение дважды, чтобы получить указатель на указатель, на который указывает указатель:
(**p).name
(*p)->name
Если person
является именем структуры с определением типа, то get_name(&person)
неверно; вам нужен экземпляр этой структуры и вам нужен указатель на этот экземпляр, который вы можете передать функции:
int main() {
person p;
person* pp = &p;
get_name(&pp);
}
Однако не совсем понятно, почему get_name
нужно взять person**
; предположительно, person*
будет достаточно.