C - как вы получаете доступ к значению от указателя на указатель на это значение? - PullRequest
7 голосов
/ 18 декабря 2010

Для этой функции необходимо передать указатель на указатель.

void get_name(person** p) {
    puts(p->name); // this is probably wrong
}

Вот как я вызываю функцию (в этом я тоже не уверен):

int main() {
    ...

    get_name(&person); // is this wrong?

    ...
    return 0;
}

Person - это, очевидно, структура со свойством name, которое является строкой.

Как вы относитесь к значению * p указывает на от ** p?

1 Ответ

14 голосов
/ 18 декабря 2010

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* будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...