C语言学习笔记—结构体大小如何计算

结构体大小计算需要满足的两条原则:

一、结构体成员的偏移量必须是成员大小的整数倍
二、结构体大小必须是所有成员大小的整数倍

#include <stdio.h>
#include <stdlib.h>


struct s1{
//一、结构体成员的偏移量必须是成员大小的整数倍(0被认为是任何成员的整数倍)
	char ch1; //1
	char ch2;//1
	int i;//4    遵循结构体运算法则的第一条,偏移量必须是成员大小的整数倍,逻辑偏移2。实际按照规则要偏移4
};
//二、结构体大小必须是所有成员大小的整数倍
struct s2{

	char ch1;//1
	int i;//4 +3
	char ch2;//1   9不是所有成员的整数倍,+3.所以结构体大小为12
};


struct s3{

	char ch;//0   0 
	int i;//0+1   4 (0+1,整数倍空三)
	char str[12];//4+4   10  结构体大小为10+10
};

struct s4{

	char ch;//0
	int i;//4
	struct s{
	char ch1;//0
	int j;//4
			};//8
	float f;
};

struct s5{
	char ch;
	int i;
	union{
	char ch1;	
	int j;
		};
	};
    
    
//#pragma pack(4)  //指定向4对齐 最大是8

struct s6{
	char ch;//0
	int i;//4
	float f;//8
	double d;//12 
};

#pragma pack(10)//我们指定的对齐值是10,最大为8,是否就向10对齐?不是,当指定对齐值大于自身对齐值时,向自身对其值对齐,

struct s7{
	char ch;//0
	int i;//4
	float f;//8
	double d;//12
};//24

int main()
{
	printf("int %d\n",sizeof(int));
    printf("float %d\n",sizeof(float));
    printf("char %d\n",sizeof(char));
    printf("double %d\n",sizeof(double));
    
    printf("s1 %d\n",sizeof(struct s1));
    printf("s2 %d\n",sizeof(struct s2));
    printf("s3 %d\n",sizeof(struct s3));
    printf("s4 %d\n",sizeof(struct s4));
    printf("s5 %d\n",sizeof(struct s5));
    printf("s6 %d\n",sizeof(struct s6));
    printf("s7 %d\n",sizeof(struct s7));
	system("pause");
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值