struct结构体相关用法

关键字struct

结构体(struct)是由不同类型数据组成的数据结构。它的本质是一种数据结构。

struct haha
{
    char a;
    int b;
    int *c;
    ·····
}mystruct;
  • 结构体定义的时候如以上格式,“haha”是我们定义的结构体的“体名”,而“mystruct”是结构体类型的变量名。希望同学们注意:在引用结构体变量时,勿把结构体的名字当成变量名使用。
mystruct.a;   //访问成员变量a
haha.a;    //错误写法
  • 当我们定义结构体不写结构体的“体名”的时候,我们称其为无名结构体。定义一个无名结构的时候,应将变量一同写出,否则在后面的代码编写中你会发现,无法通过这个结构体再次定义变量。因为它没有名字啊,系统不知道去哪找对应的结构体。
struct               //无名结构体 
{
    char a;
    int b;
    int *c;
    ·····
}mystruct1, mystruct2;
  • 调皮的同学会如下定义,这个时候要注意:当结构体成员变量中包含结构体类型的指针时,这个指针只能指向这个结构体的本身,不能指向其他的结构体!
struct haha
{
    struct *a;
    ·····
}mystruct;
接下来涉及关于结构体比较重要的一个概念——字对齐

字对齐是一种为了方便CPU读取数据而存在的特殊规则。以空间换取时间。为了在可接受的空间浪费的前提下,尽可能提高对相同过程的最快处理。

系统默认的对齐规则至少有两点:
1.变量的最高效加工。
2.在达到条件 1 的前提下使用最少的空间。

字对齐的原则

1.数据类型自身的对齐值:即“sizeof(基本数据类型)”。
2.指定对齐值:系统默认的对齐值(32系统为4字节)
3.结构体本身的对齐值:成员中自身对齐值最大的那个值
4.有效对齐值:有效对齐值N是表示对齐在N地址上,若 “ 当前内存地址N % 数据类型自身的对齐值==0 ”则在内存上排放该成员,否则补空格,直到当前内存地址能够整除此时需要排放的数据成员。注意:计算占用内存大小时别忘记把空格算上。
5.在最后一个成员排放好后,还要根据结构体本身的对齐值来补齐空格对齐!!
6.如果在一个结构体中还嵌套有结构体,则嵌套的结构体按照自己本身的对齐规则计算好大小,再当做一个成员来进行排放
实例:

struct A
{
	char c;   // 占 1字节
	int d;    //空 3字节,占 4字节
	short e;  //占 2字节,补 2字节
};sizeof(A)== 12

struct B
{
	char c;   //占 1字节
	_int64  d;  //  空 7字节,占 8字节
	int e;    //占 4字节
	short f;   //占 2字节
	A g;  // 空 2字节,占 12字节
	char h; //占 1字节
	int i; //空 3字节,占 4字节。末尾空 4字节
};sizeof(B)== 48

如果你能弄明白上面这个实例,字对齐原则相信你已经掌握了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值