Intereting Posts
Что такое хороший инструмент для просмотра / просмотра кода C? Умножение вектора по константе с использованием SSE Стоит использовать mod для замены if для индекса окружности почему strchr в два раза быстрее, чем мой simd-код C ++ нерешенные внешние Почему я получаю ошибку сегментации с помощью этого кода? Вывод «Указатель из целых чисел / целых чисел из указателя без броска» Почему использование mod с операндом int64_t делает эту функцию на 150% медленнее? Как реализовать естественный логарифм с непрерывной дроби в C? Как можно найти с помощью c-программы, будет ли моя машина 16-разрядной или 32-разрядной или 64-разрядной Бесперебойный процесс в Windows (или Linux)? OpenMP неловко параллелен для цикла, без ускорения Общее заблуждение: у файлов есть символ EOF в конце Объединение массива символов в C: динамическая обработка памяти Переписывание fragmentа кода C без условных операторов или операторов?

Как работать с указателем на указатель на структуру в C?

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

Пример кода

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

Пытаться

 (*foo)->member = 1; 

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

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

 (*foo)->member = 1; 

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

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

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

 void changeMember(Ttype *&foo) { foo->member = 1; } 

возможно (* foo) -> member = 1 (если он динамически распределен)