Как работать с указателем на указатель на структуру в C? - PullRequest
9 голосов
/ 06 декабря 2008

Я хочу изменить член структуры под двойным указателем. Ты знаешь как?

Пример кода

typedef struct {
    int member;
} Ttype;

void changeMember(Ttype **foo) {
   //I don`t know how to do it
   //maybe
   *foo->member = 1;
}

Ответы [ 4 ]

23 голосов
/ 06 декабря 2008

Попробуйте

(*foo)->member = 1;

Сначала вам нужно явно использовать *. В противном случае это попытка разыменования члена.

7 голосов
/ 06 декабря 2008

Из-за приоритета оператора вам нужно заключить в скобки это:

(*foo)->member = 1;
3 голосов
/ 06 декабря 2008

Вы можете использовать переменную temp для улучшения читабельности. Например:

Ttype *temp = *foo;
temp->member = 1;

Если у вас есть контроль над этим и вы можете использовать C ++, лучше использовать ссылку. Например:

void changeMember(Ttype *&foo) {
   foo->member = 1;
}
1 голос
/ 06 декабря 2008

может быть (* foo) -> member = 1 (если он выделен динамически)

...