结构体的定义,用法;结构体大小,字节对齐方式
一、结构体的定义,用法
结构体是一种新的数据类型,它可以包含多种不同的基本数据类型,可以更好的整合数据,多用于大小型项目中。
1.定义方法:
中间的定义模式不常用(无法见名知意)
2.结构体变量初始化:
在定义变量时初始化:struct stu student = {2021,"yuanhua",17,"man"};
定义完变量后初始化: struct stu student; student.id=2021,
gets(student.name); student.age=17;
gets(student.sex);
结构体变量访问成员用 .
结构体指针变量访问成员用 ->
_____________________________________________________________________________
3.多个结构体嵌套:
struct address {
char city[15];
};
struct stu {
int id;
char name[15];
struct address local;
int age;
char sex[7];
};
二、结构体大小,字节对齐方式:
结构体的大小并不简单是其成员字节大小之和,而是存在一种字节对齐方式。
因为cpu是以1, 2,4,8的字节块来读写内存,所以为确保结构体内数据能正确访问,对其地址作出限制,地址必须是指定对齐数的倍数,各种类型数据必须按一定规则排序。
windows平台上默认字节对齐数为8;
linux平台上默认字节对齐数为4;
字节对齐数可以通过下列方式更改
#pragma pack (4) //括号里为要改的对齐数
需要更改对齐数的代码
#pragma pack () //括号里不填任何数
基本数据类型:int float char double bool long long
结论:
1) 结构体变量的首地址,必须是 MIN{"结构体最大基本数据类型成员所占字节数", 指定对齐方式} 大小的整数倍。
2) 结构体每个成员相对于结构体首地址的偏移量,都是 MIN{当前基本数据类型成员, 指定对齐方式}大小的整数倍。
3) 结构体的总大小,为 MIN{ 结构体 “最大基本数据类型成员所占字节数”(将嵌套结构体里的基本类型也算 上,得出最大基本数据类型成员所占字节数), 指定对齐方式} 大小的整数倍。
练习:windows平台
1.默认字节对齐数:8
struct A {
int a;
char c;
double b;
};
图解 :
得出:结构体A大小为:4+1+3+8=16
代码验证:
2.更改字节对齐数:
#pragma pack (2)
struct A {
int a;
char c;
double b;
};#pragma pack ()
图解:
得出结构体A大小为:4+1+1+8=14
代码验证:
3.结构体嵌套
struct address {
char city[15];
};
struct stu {
int id;//4
char name[15];//15
struct address local;//15
int age;//4
char sex[7];//7
};
图解:
得出:结构体stu大小为4+15+15+2+4+7+1=48
代码验证:
CSDN-Ada助手: 推荐 CS入门 技能树:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml
二十九亿少女的梦: 写的太好了吧
槐夏风清7: 好的好的
HandSome34: 打字下次细心点呀,错别字太多了
HandSome34: 可以加油