Intereting Posts
Проблема определения функции стиля K & R Использование памяти программы C – больше памяти, чем выделено Является ли преобразование из указателя в тип в указатель на массив типа safe? Использование как условных переменных, так и Mutex для синхронизации streamов в C декларация ничего не объявляет: предупреждение? Инициализировать полиморфную переменную на стеке Использование стрелки -> и точки. операторов вместе в C Как проверить совместимость двух строк формата? Как получить каталог AppPath в исполняемый файл с использованием языка C в Windows (с использованием MinGW gcc) Получить IP-адрес моего компьютера в локальной сети с помощью сокетов BSD? Использует ли эффективный тип данных как побочный эффект? Как отправить массив целых чисел по TCP в C? Теория За функции getchar () и putchar () Программирование сокетов Разрешение отклонено Как преобразовать st_mtime (которые получают из функции stat) в строку или char

Использование указателя на неназванную структуру в C?

Какая польза для чего-то вроде

typedef struct { int field_1; float field_2; }*T; 

в C ?

Поскольку struct является типом данных в C , где хранится информация о типе данных, указанном T и как правильно инициализировать переменную var которая объявляется как T var ?

T является псевдонимом для указателя на структуру. Сама структура не является типом, а T

T не хранится нигде, кроме внутренних таблиц компиляторов для типов.

Вы можете использовать его как

 T myVariable = malloc(sizeof(*myVariable)); 

Я ожидал бы что-то вроде этого (pointer-to-unnamed-struct), которое будет использоваться для описания данных, поступающих извне рассматриваемой программы (например, заданного как возвращаемое значение из библиотечной функции, когда оно выделено и освобождается от этой библиотеки). Тогда такой typedef является просто спецификацией доступа к этим данным.

Использование похоже на имя структуры. Т.е. вы можете получить доступ к строкам с помощью этого указателя. Например:

 void fun(T p) { if (p->field_1 == 0) p->field_2 = 1.2345; } 

Если вам никогда не нужно ссылаться на саму структуру по имени, нет необходимости указывать ее. Информация о структуре (и ее членах) хранится в таблицах компилятора так же, как и для именованных структур.

Эта конструкция полезна для определения сложных структур данных (возможно, с объединениями), а не для того, чтобы загрязнять глобальное пространство имен бесполезными именами. Например:

  struct myUsefulStructure { int stype; union { struct { // a structure which is never referenced itself ... } x; struct { // another structure which is never referenced itself ... } y; } u; };