结构体类型
C语言中还有一种类型叫做结构体类型,它是可以保存不同类型数据并且可以把这些不同类型的数据当做一个整体来管理的类型
1).结构体的定义
语法:
struct 结构体名{
成员列表;
}; 注意:这里是有 分号 的!!
成员列表里面写成员。成员的语法格式为:
类型 成员名; // 每个成员之间用分号隔开
例:
struct girlFriend{
char name[50]; //姓名
int age; //年龄
char gender[4];//性别
int height; //身高
int weight; //体重
char bodyCai; //身材
};
注意:此时写了多个不用类型的成员变量,但是并没有存储数据,只是定义了一个新的数据类型————结构体类型
2).结构体类型的变量的声明
结构体的声明语法:
struct 结构体名 变量名;
注意:struct和结构体名合起来才叫一个类型,就比如说int *一样由int和*合起来才算一个指针类型
例:
struct girlFriend gf; // gf就是变量名,struct girlFriend是类型
3).结构体的初始化和赋值
语法1:
结构体类型 结构体变量名 = { 成员数据1,成员数据2,....成员数据n };
例:struct girlFriend fj = { "小红",16,"女",155,45,'O' };
语法2:
结构体类型 结构体变量名 = { .成员名 = 数据1,.成员名2 = 数据2..... };
例:struct girlFriend fr = { .gender = "女",.height=155,.name="小红",.bodyCai='S',.weight = 80,.age=67 };
语法3:结构体变量,也允许先声明,后一次性赋值
例:struct girlFriend fj;
fj = (struct girlFriend){ "小红",16,"女",155,45,'O' };
4).结构体的取值
语法: 结构体变量名.成员名;
例: fj.age;
fj.name;
注意:没有任何的格式化控制符能帮你一下子输出结构体变量的值
5).结构体其他的一些细节
1.结构体类型可以定义在函数内,也可以定在函数外
如果定义在函数外,那么从它定义的位置开始,直接到文件结束,都可以使用到这个类型
如果定义在函数内,那么它的作用范围只能从它定义的位置开始,直到它所在的代码块结束
2.可以在定义结构体类型的时候,就声明这个结构体类型的变量
例:
struct student{
char *name;
int age;
int gender;
}s2; //这个s2就是这个结构体的变量
如果要同时声明多个变量,那么以,隔开
例:
struct student{
char *name;
int age;
int gender;
}s2,s3,s4;
3.可以定义一个匿名的结构体,一般都会在定义匿名结构体的时候就声明它的变量,否则没有任何意义
例:
struct{
int year;
int month;
int day;
}day1; //day1就是这个匿名结构体的变量
6).typedef与结构体搭配使用
声明结构体变量的语法:
struct 结构体名 变量名;
类型,有2个单词
int num;
char ch;
float f;
struct student s1;
用typedef就可以用一个关键字来声明结构体变量
语法:
typedef struct{
成员列表;
}类型名;
例:
typedef struct {
char *name;
int age;
int gender;
}Student; //因为前面加了typedef,所以此处的Student不是变量,而是类型