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

C语言sizeof求结构体大小问题汇总 可以说一直被各类结构体大小问题说困扰,花了大半天时间查了一下资料,现在整理汇总一下。 sizeof: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;
}

c语言学习笔记 以上是一份 C 语言学习笔记的简要内容,C 语言还有很多其他的特性和高级用法,需要通过不断的学习和实践来掌握。 阅读详情

相关推荐

C语言学习笔记:探究数组的大小

数组是一种存储同一类型数据的集合,它们在内存中占用连续的空间。我们可以通过下标来访问数组中的每一个元素。C 语言中的数组可以存储基本数据类型,如 int 、float 和 double,以及其他复杂的数据类型,如结构体和指针等。本篇文章介绍了如何使用 C 语言中的数组来存储同一类型数据的集合。我们学习了数组的基本知识,如数组的类型、数组的大小等,还提供了示例程序,演示了如何计算数组的大小和元素个数。掌握了本篇文章中介绍的内容之后,相信大家对 C 语言中的数组已经有了更深入的理解。

weixin_47712251的博客 2544

C语言如何计算结构体的大小

首先我们定义了一个结构体,通过运行代码计算出了结构体的大小为16,那么这个16是怎么得来的呢,很多朋友在没接触过结构体的大小计算时,认为上图结构体里面各个元素的大小1+4+8=13为整个结构体的大小,然而并不是这样的,接下来将实现结构体大小的计算。④:如果嵌套了结构体的情况,被嵌套的结构体对齐到其自身对齐数的整数倍处(结构体的对齐数就是其内部成员中最大的对齐数),好了,结构体大小的计算就讲到这里啦。②:其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。下面我们通过计算结构体的大小来解释以上规则。

yjh0223的博客 2771

C语言学习笔记(C程序设计-谭浩强)

入门: 计算机程序: 一组计算机能够识别和执行的指令。计算机的每一个操作都是根据指令进行的,计算机的一切操作都是由程序控制的 计算机指令:指挥机器工作的指示和命令。 指令包含操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。 2、计算机语言的发展:...

wang647861136的博客 7907

C语言结构体大小计算

这篇文章来探讨一下C语言中,结构体占的内存大小如何计算。 printf("str = %d", sizeof(struct str));//用这个方法来查看一个结构体的大小 我尝试了好几次发现一个奇怪的现象,当定义一个结构体变量的时候,结构体成员的顺序不同就会造成这个结构体所占的空间大小的不同。 这是什么原因呢?原来是因为在编译器中,为了CPU访问数据的高效率。如果变量的地址不对齐,那么CPU...

qq_38821783的博客 4981

ubuntu 18.04 + Kimera slam 安装与demo测试

环境:opencv 3.4.12,其他的都是按照文档下载的。 首先进行组件的安装 一、Kimera-VIO 安装参考文档:https://github.com/MIT-SPARK/Kimera-VIO/blob/master/docs/kimera_vio_install.md 按照文档装就好,在安装过程中碰到如下问题: 0、make 过程很卡,不要用所有的核 1、cmake过程中卡下载 ORBvoc.zip ,手动下载这个文件,解压,将里面的3个文件,放到/Kimera-VIO/vocabu.

dna葡萄糖的博客 3629

统信UOS上Qt5.12.8离线安装保姆级教程(避坑网络登录与GCC选择)

本文提供统信UOS系统下Qt5.12.8离线安装的完整教程,涵盖环境准备、安装步骤、常见问题解决及开发优化建议。特别针对无网络环境下的登录验证跳过、GCC版本匹配等关键问题提供解决方案,帮助开发者快速搭建稳定的Qt开发环境。

weixin_30666401的博客 462

计算结构体的大小

结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体:   struct stu1   {   int i;   char c;   int j;   };   先介绍一个相关的概念——偏移量。偏移量指的是结构体变

csw_100的专栏 4万+

ROS2 Humble + TurtleBot4仿真环境搭建与避坑实战

本文详细介绍了ROS2 Humble与TurtleBot4仿真环境的搭建与避坑实战,包括环境配置、依赖安装、仿真调试和性能优化等关键步骤。通过保姆级教程和实用技巧,帮助开发者快速搭建稳定的机器人仿真环境,提升开发效率。特别推荐使用Ubuntu 22.04原生系统以避免常见问题。

weixin_30897233的博客 399

C语言学习笔记-结构体占用内存大小的计算

C语言学习笔记-结构体占用内存大小的计算引言例子计算方法结构体的内存计算方式遵循以下规则:有了这些规则,再来看上面的两个例子。如果手动设置`#pragma pack(4)`呢补充:C语言数据类型占内存大小 引言 结构体在C语言中虽然经常使用,但是怎么计算一个结构体占用多大的内存,很多C语言的新手都没注意过,其实C语言的语法简单,难就难在它更偏向于与底层,与内存打交道。对于嵌入式方面来说,对C语言的要求更高,因为有些硬件的内存并不像我们使用的电脑的内存那么充裕,所以需要节约内存。 结构体中同样的变量个数,却可

Albert52856的博客 1649

【25届数字IC秋招总结】面试经验13——豪威科技面试

25届数字ic面试记录———豪威科技

lalala0635的博客 363

提升JVM性能:CMS垃圾回收器的优化分析与案例研究

本文介绍了CMS(Concurrent Mark-Sweep)垃圾回收器的工作原理、优缺点及常见问题,并通过具体案例分析了其优化策略。重点探讨了CMS的各个阶段,包括标记、并发清理和重标记,分析了可能导致性能瓶颈的因素如停顿时间过长和内存碎片化。文章还分享了调整垃圾回收参数、结合其他垃圾回收器以及内存优化等方法,帮助提高CMS的回收效率和性能。最后,文章展望了随着JVM发展,结合新一代垃圾回收器优化的趋势,助力Java应用在高并发环境下的性能提升。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 175万+

C语言学习笔记(四):结构体大小计算

结构体: 对齐,填充,不填充 计算大小的规律 1.每一个成员的偏移量都必须是该成员字节数大小的倍数。 第一个成员的偏移量都是0,一般可以不看 2.结构体的大小必须是该结构体成员中字节数最大的倍数。 填充的字节用[]表示 最宽字节8 1 [3] 4 8 struct X { char a; //1 int b; //4 double c; //8 } S1; 最宽字节8 1 [7] 8 4 ...

lzw的博客 235

【Unity】【VR】如何让Distance Grab抓取物品时限制物品的Rotation

VR中Canvas抓取旋转问题的解决方案 在VR应用中,Canvas作为UI面板常需被抓取拖动,但默认会随手柄产生Z轴旋转,导致UI歪斜。Unity的Rigidbody冻结旋转功能对此无效,因为XR抓取直接修改Transform而非物理模拟。

每日出拳老爷子的博客 611

C语言学习笔记——联合体类型和枚举类型

介绍了联合体和枚举

a2606437441的博客 854

8、干式变压器

干式变压器的发展,是人类不断挑战材料科学和热物理极限的过程,每一次技术突破,都是在。温度升高,ε_r反而下降(因为分子活动性增强,极化响应变慢)。:固体导热的热阻比液体对流大一个数量级,这是无法逾越的物理规律。Nomex在高温下不是逐渐分解,而是保持性能直到一个临界点。如果 T_a = 40°C,则 T_c = 146.7°C。干式变压器(固体介质分隔):热场、电场、流场(空气)形成三维氢键网络,即使在高温下也能保持机械强度。:不是在现有技术上修修补补,而是寻找新的。仍在H级绝缘允许范围内(≤180°C)

renpeng2692873032的博客 228

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C语言学习笔记之结构体

结构体是C语言中一种用户自定义的数据类型,用于将多个不同类型的数据组合成一个有机整体,便于处理复杂数据结构。

2402_84707567的博客 2605

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言学习笔记——结构体

介绍了结构体相关的知识

a2606437441的博客 800

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机二级C语言学习笔记(一)

老实看知识点,认真刷题

LinGavinQ 7207

C语言结构体的知识笔记

这里面最大的对齐数是4,我们必须满足时4的整数倍大小,所以8是不够的,因此最后结构体的大小就为12。首先第一个位置肯定放结构体第一个成员变量char a,占一个字节,然后是char c,也占一个字节,但是要对齐到其对齐数的整数倍处,2确实时1的整数倍,然后是最后一个int,他的对齐数为4,因此我们要找到4的倍数的地址,往下找到了4地址,从这个位置开始,一直到地址7,刚好四个字节放下了int,因此一共使用了0~7共8个字节,刚好为最大对齐数4的整数倍,因此这个结构体大小就为8,讲到这里你们明白了吗?

2301_77162468的博客 1516

C语言学习笔记整理

C语言 文章目录C语言一 什么是C语言二 第一个C语言程序三 数据类型四 变量、常量五 字符串六 分支语句(选择结构)选择语句语法结构双分支语句多分支语句switch语句悬空else例子七 循环语句(循环结构)1.while循环continue与break2.for循环3. do......while循环例题八 函数一.库函数二.自定义函数a.函数的形参和实参b.函数的调用c.函数的声明和定义d.函数递归5.递归与迭代九 数组1.一维数组2.二维数组十 操作符一.算术操作符二.移位操作符三.位操作符四.赋值

2301_77327369的博客 1164

【c语言学习】结构体

结构体是通过关键字struct来定义的。struct 结构体名 {数据类型 成员变量1;数据类型 成员变量2;...数据类型 成员变量n;int age;

2202_76097976的博客 1071

C语言学习笔记

C语言学习笔记

dmq9921的博客 1822

C语言学习-结构体

C语言 结构体

weixin_54794458的博客 737

c语言学习笔记5

d专门用来打印地址。

ttt183229的博客 767
上一篇: C语言学习笔记—结构体指针的定义和使用
下一篇: C语言学习笔记—type关键字
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值