Какая польза для чего-то вроде
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; };