分类
Level3

结构体、联合体

类或者结构体将变量、数组和函数完美地打包在一起。
如果要存储一位同学的学号、姓名、身高、年龄、家庭地址信息,由于这些信息是不同的变量类型,不适合用一个数组来存储,那么可以使用类或结构体来存储。

一、结构体 是由多个类型不同(或相同)的数据组合而成的数据类型。

struct Person{
    private:
    	int age,height;
    	double money;
    	string books[100];
    
    public:
    	string name;
	void say(){
	    cout<<"I'm "<<name<<endl;
	}
	void setAge(int a){
	    age=a;
	}
	int getAge(){
	    return age;
	} 
	void addMoney(double x){
	    money+=x;
	}
}persion_a,persion_b,persons[100];

(1)结构体变量所占内存 是所有成员变量所需内存空间的总和。对齐补齐原则 结构体变量的存储空间为最宽成员变量存储单元的整数倍,若所有成员变量相加计算出来的的总空间不是其整数倍,则补齐为它的整数倍。
结构体变量的存储空间为最宽成员变量存储单元的整数倍
若所有成员变量相加计算出来的的总空间不是其整数倍,
则补齐为它的整数倍。

(2)结构体嵌套结构体 结构体内的成员变量是另一个结构体。

(3)结构体作为函数参数

结构体中const的使用 防止对结构体进行误操作!

(4)结构体数组
◆ 定义结构体数组 像使用int类型一样,使用结构体类型定义数组。◆ 结构体数组的初始化 定义数组的同时,直接初始化定义数组的同时,使用{}进行初始化◆ 访问成员变量语法:数组名[下标].成员变量◆ 数组元素的输入结构体数组排序 对结构体数组按分数升序排序,必须自定义排序规则

二、联合体 关键字union,又称为联合体、共用体,联合体的声明和结构体类似,但是它的行为方式又和结构体不同,这里的行为方式主要指的是其在内存中的体现,结构体中的成员每一个占据不同的内存空间,而联合体中的所有成员共用的是内存中相同的位置。要注意的是,联合体的长度大小为最大的成员的大小。联合体的成员变量、函数的访问方式和结构体一样。