码迷,mamicode.com
首页 > 其他好文 > 详细

结构体、共用体和用户定义类型(2)

时间:2016-04-24 15:44:56      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

  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)

标签:

原文地址:http://www.cnblogs.com/web1013/p/5419794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!