1.什么是结构体
结构体是一种专门设计用来存储不同数据类型元素集合
结构体与数组的对比:
1)都由多个元素组成
2)各个元素在内存中的存储空间是连续的
3) 数组只能由多个相同类型的数据构成, 结构体可以由多个不同类型的数据构成。
2.结构体的格式
结构体内部的元素,也就是组成成分,我们一般称为"成员"。
结构体的一般定义形式为:
struct 结构体名{
类型名1 成员名1;
类型名2 成员名2;
……
类型名n 成员名n;
};
struct是关键字,是结构体类型的标志。
例如,定义一个Car
struct Car {
int wheels; // 轮子数
int speed; // 速度
};
定义结构体变量:
struct Car {
int wheels; // 轮子数
int speed; // 速度
}car;//直接定义变量
//单独定义结构体变量
struct Car car;
3.结构体初始化与使用
初始化:
struct Car {
int wheels; // 轮子数
int speed; // 速度
}car;
car = {4,250};
//使用:
printf("%d",car.wheels);
4.结构体注意点
结构体类型的作用域
1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
不允许对结构体进行自身递归定义。
结构体内可以包含别的结构体。
只有在定义结构体变量时才会进行内存空间分配。
5.结构体数组
跟结构体变量一样,结构体数组也有3种定义方式
struct Student {
char *name;
int age;
};
struct Student stu[5]; //定义1
struct Student {
char *name;
int age;
} stu[5]; //定义2
struct {
char *name;
int age;
} stu[5]; //定义3
上面3种方式,都是定义了一个变量名为stu的结构体数组,数组元素个数是5。
初始化:
struct {
char *name;
int age;
} stu[2] = { {"MJ", 27}, {"JJ", 30} };
也可以用数组下标访问每一个结构体元素,跟普通数组的用法是一样的。
6.结构体与函数
如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员
修改函数内部结构体的成员不会影响外面的实参结构体。
7.结构体和联合体的区别
1)在任何同一时刻,union中只存放了一个被选中的成员,而struct的所有成员都在。
2)一个struct变量的总长度等于所有成员长度之和,而union变量的唱歌等于最长的成员的长度。