在C中使用指向未命名结构的指针?

时间:2014-03-01 17:28:02

标签: c pointers struct

之类的用途有什么用?
typedef struct
{
    int field_1;
    float field_2;
}*T;

C

由于structC中的数据类型,其中存储了T指向的数据类型的信息,以及如何正确初始化声明的变量varT var

3 个答案:

答案 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只是一个如何访问这些数据的规范。