C语言之结构体类型

张开发
2026/4/7 1:41:54 15 分钟阅读

分享文章

C语言之结构体类型
结构体是自定义的复合数据类型可以把多个不同类型打包成一个整体 用来描述一个对象如一名学生身高int体重float学号int名字char年龄int.....……就可以用结构体把他们封装在一起。struct 结构体名{数据类型 成员1数据类型 成员2.....}struct student{int id//学号char name[20]int age……}创建结构体变量有三种情况1.先定义类型在单独定义变量struct student stu1;stu1就是一个结构体变量拥有id,name,age....成员。2.定义类型时顺便定义变量struct student{int id//学号char name[20]int age……}stu2,stu33.匿名结构体struct{int idchar name[20];......;}stu4;其中匿名结构体只能使用一次。再者结构体初始化1.stuct student stu{0101,张三18};顺序必须和结构体成员完全一致。2.struct student stu{.id0101;.name李四.age18;}这个可以乱序不管先后没赋值的默认为零或者为空这个是运用 . 结构体访问操作符3.struct student stu;stu.id 0101;stu.age18;....字符串不能直接用赋值strcpystu.name,张三结构体在存储中存在内存对齐首先给出为什么存在内存对齐这个概念其次要理解内存对齐这个概念可以计算出结构体内存大小struct student{char achar bint c}stu那么你们觉得它多大如果没学过此张内容会说是6其实并不是不然就不会有内存对齐这个概念了这个大小其实为8先看内存对齐规则画出一块内存从红线起往下数字为偏移量大小就是相对红线的距离所有第一个不管什么类型从起始位置0开始char就占一个格子下个类型的放置就要看他的大小是否为此处偏移量的整数倍下个偏移量是1char大小为1就可以放如果是int大小为4偏移量为1不是他的倍数就要舍弃多个格子到达偏移量是4的位置就可以往后放置了但其实其中有个比较比如vs中默认对齐数是8你把8跟int的4作比较谁小取谁取4作为对齐数去看偏移量放置格子最后放置完时比如上面charcharint先直接存2个char在浪费两个空间到偏移量为4的位置放置int总长为8最后在成员大小中选择最大的类型大小这里就是4他的整数倍就是最后的答案比如这里算出来时8为4整数倍结果大小就是8如果算出来为9那就在舍弃3个格子到达12处这里是4的倍数所以结果就是12#pragma可以修改默认对齐数感谢观看

更多文章