结构体与函数

文章详细阐述了结构体在内存中的分配规则,包括以最大成员类型为单位开辟内存和字节对齐的原则。例如,结构体的大小会因成员类型如int、float、double以及数组的影响而不同,同时讨论了在VC和GCC环境下double类型的对齐差异。此外,还举例说明了不同结构体定义如何影响内存占用。
摘要由CSDN通过智能技术生成

结构体与函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结构中的结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数组用于保存多个相同类型的数据
结构体用于保存多个不同类型的数据

结构体:结构体是一种构造类型的数据结构,是一种或多种基本类型或构造类型的数据的集合。

结构体内存分配问题

规则1:以多少字节为单位开辟内存
给结构体变量分配内存的时候,会去结构体变量中找基本类型的成员。哪个基本类型的成员占字节数多,就以它的大小为单位开辟内存,在gcc中出现了double类型的例外。
(1):成员中只有char型数据 ,以1字节为单位开辟内存。
(2):成员中出现了short 类型数据,没有更大字节数的基本类型数据。以2字节为单位开辟内存
(3):出现了int 、float 没有更大字节的基本类型数据的时候以4字节为单位开辟内存。
(4):出现了double类型的数据
情况1:
在vc里,以8字节为单位开辟内存。
情况2:
在gcc里,以4字节为单位开辟内存。
无论是那种环境,double型变量,占8字节。
(5):如果在结构体中出现了数组,数组可以看成多个变量的集合。如果出现指针的话,没有占字节数更大的类型的,以4字节为单位开辟内存。
(6):在内存中存储结构体成员的时候,按定义的结构体成员的顺序存储

规则2:字节对齐
(1):char 1字节对齐 ,即存放char型的变量,内存单元的编号是1的倍数即可。
(2):short 2字节对齐 ,即存放short int 型的变量,起始内存单元的编号是2的倍数即可。
(3):int 4字节对齐 ,即存放int 型的变量,起始内存单元的编号是4的倍数即可
(4):long 在32位平台下,4字节对齐 ,即存放long int 型的变量,起始内存单元的编号是4的倍数即可
(5):float 4字节对齐 ,即存放float 型的变量,起始内存单元的编号是4的倍数即可
(6):double
a.vc环境下
8字节对齐,即存放double型变量的起始地址,必须是8的倍数,double变量占8字节
b.gcc环境下
4字节对齐,即存放double型变量的起始地址,必须是4的倍数,double变量占8字节。
注意:
当结构体成员中出现数组的时候,可以看成多个变量。
开辟内存的时候,从上向下依次按成员在结构体中的位置顺序开辟空间

struct stu{
 int num;
 int age;
 }lucy;
//8字节

struct stu{
 char sex;
 int age;
}lucy;
// 8字节

struct stu{
 char a;
 short int b;
 int c;
}temp;
//8字节

struct stu{
 char a;
 int c;23 short int b;
}temp;
//12字节

struct stu{
 char buf[10];
 int a;
}temp;
//16字节

struct stu{
 char a;
 double b;
};
//12字节

详细讲解二个例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻童:CPU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值