目录
结构体
结构体类型的定义
struct 结构体名
{
数据类型1 成员变量1;
数据类型2 成员变量2;
数据类型3 成员变量3;
......... .......
};
说明:结构体中数据类型可以是基本数据类型和构造数据类型都可以;
先定义才能再进行初始化;
结构体变量的定义
数据类型 变量名;
数据类型:struct 结构体名;这两个才叫结构体的数据类型
结构体指针:数据类型 结构体名 *变量名
结构体变量初始化
全部初始化
局部初始化:
struct student stu = {
.name = "lisi"
.score = 90,
}
结构体成员变量的访问
对结构体整体无法操作,只能对单个进行操作。
. (点) :结构体变量类型访问成员变量使用;
->(箭头) :结构体指针类型访问成员变量使用;
整型类型由成员变量类型决定
内存置零,用meset将从s地址开始的s结构体大小的空间置零,就可以完成初始化
赋值也只能逐个赋值;
结构体的存储
结构体的大小是结构体内部的数据大小的集合
内存对齐,概念图解
因为32位CPU一次性只能取32位,一个字节8位,就是四个字节,当需要取int的时候不在一次取完的四字节就会重新开一个四字节,保证数据的读取方便。所以图2的结构体按照一下对齐方式为44个字符.
char 按照一字节对齐
short 按照两字节对齐
int 按照四字节对齐
double 按照四字节对齐
因此结构体整体大小必须时最大基本类型长度的整数倍。
结构体传参
函数传输结构体参数
结构体作为参数和返回值的传参如下图
结构体指针地址传参程序如下图
在赋值传参和地址传参中,地址传参更为方便,因为如果结构体过大,复制传参就会开辟更大的存储空间,但是地址传参的话就只需要传输8字节地址就可以
结构体数组
struct student s[5]
存储地址有序性,而且每一个元素都是student结构类型;结构体名必须是常量
构造结构体数组和访问如下图:
结构体数组传参
结构数组传参和其他数组传参相似具体如下图: