structMyStruct
{
doubledda1;
chardda;
inttype;
};
以上這種情況MyStruct是型別名,以後引用的時候是需要這樣例項化:
MyStructstruct1;
l以此來給struct1分配空間的,struct1是具體的例項。
如果你寫成這樣:
struct
}struct1struct2;
那麼struct1和struct2依然是具體例項的名字,而不是型別名字,上面這個struct型別沒有名字。
如果你寫成如下這樣:
typedefstructMyStruct
以上的語法是錯誤的將會編譯不透過,因為typedef是把一箇舊的型別增加一個新的型別名,上面這句舊的型別的名字是MyStruct,新型別名則沒有,所以不透過編譯,你只能寫成這樣:
typedefstruct{
}Mystruct;
在這裡相當於是把一個原本沒有名字的struct型別起了一個型別名叫Mystruct,後面使用的時候需要去例項化,注意這裡的MyStruct雖然寫在大括號後面依然是型別名,不是具體的例項名,這就是區別。
而如果你這樣寫:
}YourStruct;
以上語法則是正確的,是把型別名為MyStruct的結構體增加了一個名字叫YourStruct,這裡的YourStruct依然是型別名而不是例項名字,具體使用的時候還是要例項化的:YourStructstruct1;或者像MyStructstruct1;這樣,這兩句是一回事就是為struct1分配一個那樣的空間,所以課以互相替代,只不過我們用typ
edef往往是想讓一個型別多幾個名字,這樣在不同的規範下用不同的名字便於理解。
structMyStruct
{
doubledda1;
chardda;
inttype;
};
以上這種情況MyStruct是型別名,以後引用的時候是需要這樣例項化:
MyStructstruct1;
l以此來給struct1分配空間的,struct1是具體的例項。
如果你寫成這樣:
struct
{
doubledda1;
chardda;
inttype;
}struct1struct2;
那麼struct1和struct2依然是具體例項的名字,而不是型別名字,上面這個struct型別沒有名字。
如果你寫成如下這樣:
typedefstructMyStruct
{
doubledda1;
chardda;
inttype;
};
以上的語法是錯誤的將會編譯不透過,因為typedef是把一箇舊的型別增加一個新的型別名,上面這句舊的型別的名字是MyStruct,新型別名則沒有,所以不透過編譯,你只能寫成這樣:
typedefstruct{
doubledda1;
chardda;
inttype;
}Mystruct;
在這裡相當於是把一個原本沒有名字的struct型別起了一個型別名叫Mystruct,後面使用的時候需要去例項化,注意這裡的MyStruct雖然寫在大括號後面依然是型別名,不是具體的例項名,這就是區別。
而如果你這樣寫:
typedefstructMyStruct
{
doubledda1;
chardda;
inttype;
}YourStruct;
以上語法則是正確的,是把型別名為MyStruct的結構體增加了一個名字叫YourStruct,這裡的YourStruct依然是型別名而不是例項名字,具體使用的時候還是要例項化的:YourStructstruct1;或者像MyStructstruct1;這樣,這兩句是一回事就是為struct1分配一個那樣的空間,所以課以互相替代,只不過我們用typ
edef往往是想讓一個型別多幾個名字,這樣在不同的規範下用不同的名字便於理解。