结构体的定义,用法;结构体大小,字节对齐方式

一、结构体的定义,用法

结构体是一种新的数据类型,它可以包含多种不同的基本数据类型,可以更好的整合数据,多用于大小型项目中。

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

代码验证:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值