C语言-结构体

结构体的定义

看了很多资料,都说结构的定义有多种方式,分的多了反而觉得乱,所以我个人觉得只要分两种就可以了:

  1. 一种是 不带typedef 的定义方式
  2. 一种是 带typedef 的定义方式

不带typedef 的定义方式

定义一个学生结构体

struct student{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
};
//定义结构体变量
struct student stu1,stu2;

注意:

  • 在定义结构体后面的分号不能少
  • 单独定义结构体变量时,关键字struct也要一起写,不过在C++中可以省略。

当然,也可以在定义结构体的时候直接定义结构体变量,以上的定义方式也可以写成以下方式

struct student{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
}stu1,stu2;

这种定义方式很简便,但是容易跟带typedef的定义方式搞混,注意这个结构体变量的位置,下面就来详细说明

带typedef的定义方式

因为第一种定义方式在单独定义结构体变量时需要带上关键字struct,人们觉得比较麻烦,所以就有了这样的一种定义方式。

用带typedef的定义方式重新定义上面的结构体

typedef struct{    //这时student结构体名可以不写
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
}student;
//单独定义结构体变量
student stu1,stu2;

这里有几个区别以及注意点:

  1. 加上typedef后,struct后的结构体变量名可以省略不写
  2. 结构体大括号后的字符串是结构体的别名(比如上面的 student ),而不是结构体的变量
  3. 在单独定义的变量的时候,struct 可以省略

结构体成员的引用

结构体成员的引用也有两种方式,主要是以结构体变量的类型来决定的。

  1. 如果是一般的结构变量,那么可以通过“.”进行引用
  2. 如果结构变量是一个指针,那么必须通过“->”方式引用

如下所示:

一般结构变量引用结构体成员方式

student stu1;
//引用方式
stu1.no;
stu1.name;
stu1.sex;
stu1.age;

指针型结构体变量引用结构体成员方式

student* stu1;
//引用方式
stu1->no;
stu1->name;
stu1->sex;
stu1->age;

总结:

  1. 结构体是自定义的一种数据类型
  2. 结构体不能进行加减乘除,但是可以相互赋值
    原文作者:桓宇Harry
    原文地址: https://www.jianshu.com/p/ec078bdffa69
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞