以下代码中的*B
是什么意思?我了解typedef
和struct
之间的混合。但是,这个*B
很奇怪。
typedef struct Something
{
...
}
A, *B;
我看到了多个问题,询问如何将typedef
与struct
混合使用,但是没有一个人讨论过这种双重定义。
答案 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
允许在代码中的同一位置定义类型和指向类型的指针。