将两个别名传递给 typedef struct 是什么意思?
What does passing two aliases to `typedef struct` mean?
下面代码中的*B
是什么意思?我理解 typedef
和 struct
之间的这种混合。不过,这个*B
就奇怪了
typedef struct Something
{
...
}
A, *B;
我看到多个问题询问有关将 typedef
与 struct
混合使用的问题,但没有人谈到这种双重定义。
这是 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
允许在代码中的同一位置定义类型和指向类型的指针。
下面代码中的*B
是什么意思?我理解 typedef
和 struct
之间的这种混合。不过,这个*B
就奇怪了
typedef struct Something
{
...
}
A, *B;
我看到多个问题询问有关将 typedef
与 struct
混合使用的问题,但没有人谈到这种双重定义。
这是 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
允许在代码中的同一位置定义类型和指向类型的指针。