结构体的定义
看了很多资料,都说结构的定义有多种方式,分的多了反而觉得乱,所以我个人觉得只要分两种就可以了:
- 一种是 不带typedef 的定义方式
- 一种是 带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;
这里有几个区别以及注意点:
- 加上typedef后,struct后的结构体变量名可以省略不写
- 结构体大括号后的字符串是结构体的别名(比如上面的 student ),而不是结构体的变量
- 在单独定义的变量的时候,struct 可以省略
结构体成员的引用
结构体成员的引用也有两种方式,主要是以结构体变量的类型来决定的。
- 如果是一般的结构变量,那么可以通过“.”进行引用
- 如果结构变量是一个指针,那么必须通过“->”方式引用
如下所示:
一般结构变量引用结构体成员方式
student stu1;
//引用方式
stu1.no;
stu1.name;
stu1.sex;
stu1.age;
指针型结构体变量引用结构体成员方式
student* stu1;
//引用方式
stu1->no;
stu1->name;
stu1->sex;
stu1->age;
总结:
- 结构体是自定义的一种数据类型
- 结构体不能进行加减乘除,但是可以相互赋值