簡體   English   中英

將兩個別名傳遞給typedef struct是什么意思?

[英]What does passing two aliases to `typedef struct` mean?

以下代碼中的*B是什么意思? 我理解typedefstruct之間的這種混合。 但是,這個*B很奇怪。

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

我看到多個問題詢問將typedefstruct混合使用,但是沒有一個人談論這個雙重定義。

這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM