結構體、共用體和使用者定義型別(2)

來源:互聯網
上載者:User

標籤:

  2.2結構體類型的變數、數組和指標變數的定義

  可以用以下四種方式定義結構體類型的變數、數組和指標變數:

  (1)緊跟在結構體類型說明之後進行定義。例如:

    struct student

    {

      char name[12];

      char sex;

      struct date birthday;

      float sc[4];

    } std, pers[3], *pstd;

  此處,在說明結構體類型 struct student 的同時,定義了一個結構體變數 std、有3個變數的結構體數組 pers 和基底類型為結構體類型的指標變數 pstd。

  (2)在說明一個無名結構體類型的同時,直接進行定義。如:上述定義的結構體中可以把 student 省略,寫成:

    struct

    {...

    } std, pers[3], *pstd;

  這種方式與前一種的區別僅僅是省略了結構體標識名,通常用在不需要再次定義此類型結構體變數的情況。

  (3)先說明結構體類型,再單獨進行變數定義。如:

    struct student

    {...

    };

    struct student std, pers[3], pstd;

  此處,先說明了結構體類型 struct student,再由一條單獨的語句定義變數 std、數組 pers 和指標變數 pstd。使用這種定義方式應注意:關鍵字 struct 必須和結構體標識名 student 共同說明結構體類型。

  (4)使用 typedef 說明一個結構體類型名,再用新類型名來定義變數。如:

    typedef struct

    {

      char name[12];

      char sex;

      struct date birthday;

      float sc[4];

    } STREC;

    STREC std, pers[3], *pstd;

  STREC 是一個具體的結構體類型名,它能夠唯一地標識這種結構體類型。因此,它可以用來定義變數,如同使用 int 、char  一樣,不可再寫關鍵字 struct。

  2.3 給結構體變數、數組賦初值

  和一般變數、數組一樣,結構體變數和數組也可以在定義的同時賦初值。

  2.3.1 給結構體變數賦初值

  所賦初值放在一對花括弧中,如:

    struct student

    {

      char name[12];

      char sex;

      struct date birthday;

      float sc[4];

    } std = {"Li Ming", ‘M’, 1997, 5, 10, 88.0, 76.0, 85.5, 90.0};

  賦初值後,變數 std 內容:

  name  sex    birthday  sc[0]  sc[1]  sc[2]  sc[3]

         year   month  day

Li Ming M 1997 5 10 88.0 76.0 85.5 90.0

  對結構體變數賦值時,C 編譯器按每個成員在結構中的順序一一對應賦初值,不允許跳過前面的成員給後面的成員賦初值。但可以只給前面的若干成員賦初值,對後面未賦初值的成員,系統將自動為數值型和字元型資料賦初值0。

  2.3.2 給結構體數組賦初值

  由於數組中每個元素都是一個結構體,因此通常將其成員的值依次放在一對花括弧中,以便區分各個元素。

    struct bookcard

    {

      char num[5];

      float money;

    } bk[3] = { {"NO.1", 35.5}, {"NO.2", 25.0}, {"NO.3", 66.7} };

         /* bk[0]      bk[1]      bk[2]  */

  也可以通過這種賦初值的方式,隱含確定結構體數組的大小。即:由編譯器根據所賦初值的成員個數決定數組元素的個數。以下是一個給二維數組賦初值的例子:

    struct

    {

      char ch;

      int i;

      float x;

    } arr[2][3] = {

             { {"a", 1, 3.0e10}, {"a", 2, 4.0e10}, {"a", 3, 5.0e10} },  /*第一行*/

             { {"b", 1, 6.0e10}, {"b", 2, 7.0e10}, {"b", 3, 8.0e10} }  /*第二行*/

           };

  根據花括弧的嵌套關係,可以清楚的分辨出所賦初值與數組元素一一對應的關係。

  2.3.3 相同類型結構體變數之間的整體賦值

  ANSI C 標準允許相同類型的結構體變數之間進行整體賦值。如:

    struct

    {

      char name[10];

      int num;

    } per1, per2 = {"Jhon", 46};

  執行指派陳述式:per1 = per2; 則 per2 中每個成員的值都賦給了 per1 中對應的同名成員。這種賦值方法必須要保證賦值號兩邊結構體變數的類型相同。

結構體、共用體和使用者定義型別(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.