结构体

1.在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

                       struct 结构体名{
                                                         结构体所包含的变量或数组
                                                   };

2.结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:
 struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};
 
stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。注意大括号后面的分号;不能少,这是一条完整的语句。

3.结构体变量

    既然结构体是一种数据类型,那么就可以用它来定义变量。例如:
    struct stu stu1, stu2;
    定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

4.结构体成员的获取和赋值

   结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号 . 获取单个成员。获取结构体成员的一般格式为:
                    结构体变量名.成员名;

   如:给上述结构体成员赋值
          stu1.name = "Tom";
          stu1.num = 12;
          stu1.age = 18;
          stu1.group = 'A';
          stu1.score = 136.5;

5. 结构体数组

     所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体。

     定义结构体数组和定义结构体变量的方式类似,请看下面的例子:
    struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组 
    float score;  //成绩
     }class[5];
    表示一个班级有5个学生。

    结构体数组在定义的同时也可以初始化。

6.结构体和指针

     指针也可以指向一个结构体,定义的形式一般为:
     struct 结构体名 *变量名;
     下面是一个定义结构体指针的实例:
    struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
     } stu1 = { "Tom", 12, 18, 'A', 136.5 };
     //结构体指针
     struct stu *pstu = &stu1;

      注意:结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量                     的地址,必须在前面加&,所以给 pstu 赋值只能写作:
                  struct stu *pstu = &stu1;
                  而不能写作:
                  struct stu *pstu = stu1;

7.通过指针获取结构体成员

    通过结构体指针可以获取结构体成员,一般形式为:
    (*pointer).memberName
    或者:
    pointer->memberName
    第一种写法中,. 的优先级高于*,(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.numberName),这样意义就完全不了。
    第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值