回覆列表
  • 1 # 使用者928021938244

    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往往是想讓一個型別多幾個名字,這樣在不同的規範下用不同的名字便於理解。

  • 中秋節和大豐收的關聯?
  • 低齡兒童的親子閱讀怎樣做更有效?