[英]What does passing two aliases to `typedef struct` mean?
以下代碼中的*B
是什么意思? 我理解typedef
和struct
之間的這種混合。 但是,這個*B
很奇怪。
typedef struct Something
{
...
}
A, *B;
我看到多個問題詢問將typedef
與struct
混合使用,但是沒有一個人談論這個雙重定義。
這是typedef
關鍵字的一種較不常用的用例,它允許您在一行中定義兩個或多個類型別名。 在這里,這說
A
來代表struct
本身,並 B
的別名,該別名表示指向struct
的指針。 從這個意義上講,這類似於寫類似
int A, *B;
在這里,它聲明了一個名為A
的整數和一個指向名為B
的整數的指針。 這里涉及*
的語法的工作方式與typedef
語句中的工作方式非常相似,不同之處在於,它不是在引入變量而是在引入類型。
另一種看待這種情況的方式:這相當於將事物分解為兩個單獨的語句:
typedef struct {
...
} A;
typedef A* B;
在這里,第一個表示“ A
現在引用此struct
類型,而B
現在引用指向A
的指針”。
我在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
允許在代碼中的同一位置定義一個類型和一個指向該類型的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.