将两个别名传递给typedef struct是什么意思?

时间:2019-06-23 21:39:19

标签: c struct typedef

以下代码中的*B是什么意思?我了解typedefstruct之间的混合。但是,这个*B很奇怪。

typedef struct Something
{
...
}
A, *B;

我看到了多个问题,询问如何将typedefstruct混合使用,但是没有一个人讨论过这种双重定义。

2 个答案:

答案 0 :(得分:3)

这是typedef关键字的一种较不常用的用例,它允许您在一行中定义两个或多个类型别名。在这里,这说

  • 创建一个名为A的别名,该别名代表struct本身,并且
  • 创建一个名为B的别名,该别名表示指向struct的指针。

从这种意义上讲,它类似于写类似的东西

int A, *B;

这里,它声明了一个名为A的整数和一个指向名为B的整数的指针。此处涉及*的语法的工作方式与typedef语句中的工作非常相似,不同之处在于它不是在引入变量而是在引入类型。

另一种看待这种情况的方法:这相当于将事物分解为两个单独的语句:

typedef struct {
   ...
} A;

typedef A* B;

在这里,第一个说“ A现在是指这种struct类型,而B现在是指指向A的指针。”

答案 1 :(得分:2)

我已经在Microsoft代码中看到了很多此类定义:

typedef struct {
    int count;
    char buffer[128];
} BUFFER, *PBUFFER;

它允许编写如下代码:

void read_buffer(PBUFFER pBuffer) {
    // Do something with pBuffer
}

int main(void) {
    BUFFER buffer;

    read_buffer(&buffer);
    return 0;
}

直接回答您的问题:这种typedef允许在代码中的同一位置定义类型和指向类型的指针。