請問這兩者的語法是否相同?我一直感到困惑,因為 typedef 構造在花括號閉合后具有結構名稱,但在這里,變數名稱似乎是在花括號閉合后定義的變數名稱。
struct{
int age;
float height;
}person1,*personPtr;
VS
struct person{
int age;
float height;
};
struct person person1;
struct person *personPtr;
uj5u.com熱心網友回復:
在這份宣告中
struct{
int age;
float height;
}person1,*personPtr;
宣告了一個未命名的結構,一個結構型別的物件和一個指向該結構型別的物件的指標。
您將無法在程式中參考結構型別,因為它是未命名的。
這些宣告
struct person{
int age;
float height;
};
struct person person1;
struct person *personPtr;
與前面的宣告的不同之處在于宣告了一個可以在程式中參考的命名結構。
如果第一個宣告將被重寫,則代碼片段將是等效的
struct person{
int age;
float height;
}person1,*personPtr;
uj5u.com熱心網友回復:
其他答案解決了這個問題:“這兩者的語法是否相同?” . 在這里,我將重點介紹以下宣告:
“我一直感到困惑,因為 typedef 構造在花括號關閉后具有結構名稱,但在這里似乎變數名稱是定義的名稱......”
因此,盡管您的帖子實際上并未包含顯示 a 的片段,但我將在此處包含一個片段以幫助識別未命名和 atypedef struct {兩種情況之間的差異。 structtypedef struct
typedef之間的區別,例如...
typedef struct{
int age;
float height;
} person_s; //creates a new type "person_s"
person_s person1; //illustrates using new type to create an instance of the struct
...和一個類似于您的未命名結構的:(為了簡化,省略了指標實體)
struct{
int age;
float height;
}person1;// create single instance of struct, but this instance
// cannot be used to create new instances
...是typedef版本創建了新的資料型別 person_s。person_s可用于在代碼中的任何位置創建結構的新實體,在它創建的范圍內。
而未命名 struct的僅創建未命名結構的一個實體。雖然可以在代碼的多個位置使用和參考該實體person1(僅受創建它的范圍的限制。)但在該初始實體之外不能創建未命名結構的新實體person1。
所以總而言之,
person1是未命名結構的單個實體,person_s是一種全新的型別。新型別可用于創建該變數的新實體,就像任何其他型別一樣。(例如int, float, ...),但不能創建未命名結構的新實體。
uj5u.com熱心網友回復:
請問這兩者的語法是否相同?
不,他們不是。
第一個版本宣告了一個匿名結構(因為它沒有名稱)和兩個使用該型別的變數,
第二個版本命名型別,然后使用型別名稱來宣告變數。
我一直感到困惑,因為 typedef 構造在花括號閉合后具有結構名稱,但在這里,變數名稱似乎是在花括號閉合后定義的變數名稱。
是的,變數宣告和 typedef 宣告被設計為非常相似,這是故意的。
例如,int age;宣告一個名為age. 通過在宣告之前添加 typedef,就像typedef int age;我們創建了age一個型別而不是一個變數一樣。然后我們可以使用它來宣告一個變數
age my_age;
與...一樣
int my_age;
結構也一樣
struct
{
int age;
float height;
} person;
宣告一個變數person,而
typedef struct
{
int age;
float height;
} person;
說那person是一種型別。
使 typedef 宣告看起來與變數宣告非常相似的設計在當時似乎是個好主意,但也許不是。比輝煌更令人困惑?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419623.html
標籤:
上一篇:使用preg_match查找括號中的所有值并將它們傳遞給變數
下一篇:分配兩個Scala類實體
