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

What does passing two aliases to `typedef struct` mean?

下面代码中的*B是什么意思?我理解 typedefstruct 之间的这种混合。不过,这个*B就奇怪了

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

我看到多个问题询问有关将 typedefstruct 混合使用的问题,但没有人谈到这种双重定义。

这是 typedef 关键字的 less-common 用例,允许您在一行中定义两个或多个类型别名。在这里,这表示

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

从这个意义上说,它类似于

int A, *B;

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

另一种理解方式:这相当于将事物分解为两个单独的语句:

typedef struct {
   ...
} A;

typedef A* B;

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

我在微软代码中看到过很多这样的定义:

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允许在代码中的同一位置定义类型和指向类型的指针。