簡體   English   中英

為什么我們從花括號中留下一些結構變量?

[英]Why do we leave some structure variables out of the curly brackets?

我試圖理解C中的struct 。我無法理解下面這個定義。 為什么我們要離開aCarddeck[ ]*cardPtr 將他們包括在內並將其排除之間有什么區別?

 struct card {
    char *face;
    char *suit;
 } aCard, deck[52], *cardPtr;

你搞混了。 struct card具有facesuit的成員。 但是使用struct card類型有三個變量,即aCard, deck, cardPtr

或者可以寫一個:

typedef struct {
    char *face;
    char *suit;
} Card;

Card aCard, deck[52], *cardPtr;
// or even
Card aCard;
Card deck[52];
Card *cardPtr;

對於typedef請看一下: 為什么我們要經常在C中輸入一個結構? (它進入了typedef struct { ... } Foo; vs struct Foo {...}辯論。

您的代碼可以像這樣編寫,使其更清晰:

struct card {          // define the struct card
    char *face;
    char *suit;
 };

struct card aCard;     // declare a variable "aCard" of type "struct card "
struct card deck[52]   // declare an array of 52 variables of type "struct card"
struct card *cardPtr;  // declare a variable "cardPtr" of type "pointer to struct card"

雖然這個問題已經回答了,但我發布了答案,因為我認為OP對結構聲明和結構類型變量的定義存在疑問。

如果您不知道C中的結構是什么,請查看下面的1)

關鍵字struct引入了一個結構聲明,它是用大括號括起來的聲明列表。 名為結構標記的可選名稱可以跟在struct之后 因此,這是一個結構聲明:

struct card {
    char *face;
    char *suit;
 };

這里的facesuit成員變量 請注意,結構聲明不保留存儲空間; 它只描述了一個結構的模板。

結構聲明定義了一種類型。 終止成員列表的右大括號后面可能跟一個變量列表。 所以,在你的情況下:

....
} aCard, deck[52], *cardPtr;

aCarddeck[52]*cardPtrstruct card 類型變量

由於您的結構聲明用card標記,因此標簽card可以在以后用於結構實例的定義中。 例如,鑒於上述結構card的聲明,

struct card someCard;

定義一個變量someCard ,它是struct card類型的struct card

或者,你可以typedef一個結構聲明,並用它來定義其類型的變量。


1)

根據定義 - 結構是一個或多個變量的集合,可能是不同類型的變量,在一個名稱下組合在一起。

根據C標准#6.2.5 [類型]:

結構類型描述順序分配的非空成員對象集(並且在某些情況下,是不完整的數組),每個成員對象具有可選地指定的名稱並且可能具有不同的類型。

.....
.....
算術類型和指針類型統稱為標量類型。 數組和結構類型統稱為聚合類型.46)

一個

struct card {
    char *face;
    char *suit;
 }

就像int一樣,但它是用戶定義的,並且

aCard, deck[52], *cardPtr;

是變量名,例如,

int aCard, deck[41], *cardPtr;

您已聲明了三個變量。 aCardstruct card類型, deckstruct card[52]類型, cardPtrstruct card *類型

aCard和你提到的其余部分是struct card類型的變量,每個變量都包含char *facechar *suit 那么一些變量怎么能包含它自己,即aCard在struct節點內部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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