之类的用途有什么用?
typedef struct
{
int field_1;
float field_2;
}*T;
在C
?
由于struct
是C
中的数据类型,其中存储了T
指向的数据类型的信息,以及如何正确初始化声明的变量var
如T var
?
答案 0 :(得分:4)
T
是指向结构的指针的别名。结构本身不是类型,但T
是。
T
不存储在任何地方,而是存储在类型的编译器内部表中。
您可以像
一样使用它T myVariable = malloc(sizeof(*myVariable));
答案 1 :(得分:1)
使用就好像结构被命名一样。即您可以通过此指针访问struct字段。例如:
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;
};
答案 2 :(得分:1)
我希望使用类似的东西(指向未命名结构的指针)来描述来自相关程序外部的数据(例如,作为库函数的返回值,当它由该库分配和解除分配)。那么这样的typedef只是一个如何访问这些数据的规范。