最近碰见C语言的几个小问题。
1.关于结构体的大小(sizeof)。
- struct assign
- {
- char a;
- char b;
- int c;
- };
- int i = offsetof(struct assign,b);
- printf("%d\n",sizeof(struct assign));
- printf("%d\n",i);
分别声明以上两种结构体,分析结构体的长度。
第一种应该为12,第二种应该为8.这个主要是内存对齐问题。32位机,为了提高速度,是不会把一个int型的放在2个32位的空间里面的。 因为当读取的时候会读取两次,系统不允许这样做的。也可以用offsetof求其中的一个结构体中的变量相对与结构体首部的位置。
(offsetof是一个宏,上次写可变长的函数时候就说过,对内存的地址进行操作。定义如下:#define offsetof(s,m) (size_t)&(((s *)0)->m))。
2.关于结构体和字符串。
在内存中结构体和字符串都一样,一段内存,而结构体不同的是对其进行划分为不同的类型,而字符串全都是字符类型的。所以可以把字符串强制转化为一个结构体。
- struct test
- {
- char a;
- char b;
- };
- char * tmp ="abcdef";
- struct test *pig = malloc(sizeof(struct test));
- *pig = ((struct test *)tmp)[1];
- printf("%c\n",pig->a);
- printf("%c\n",pig->b);
最近看文件系统源代码的时候,没大看懂这个问题。现在明白了。一个字符串里面有很多相似与结构的字符,对其进行强制类型转化后,可以像数组一样操作了。
PS:没事看看源代码,会很有收获的,无论是在语法还是在一定的设计上,都会有很大收获。不断体会UNIX的哲学思想(KISS)。
分享到:
相关推荐
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序。 快速排序 快速排序是一个不稳定的排序算法。在...
10、程序运行设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏,也就是实现贪吃蛇的...
可是真有些日子没有写DIV+CSS了,而且对IE6兼容性的坑碰到的还是不够多(以前做国外项目),所以这次开发中不可避免的碰见了几个问题,尤其是在IE下的 z-index 问题很有意思,所以整理了一些资料和总结分享给大家…注...
1. **公共语言运行时 (CLR)**:CLR是.NET框架的核心组成部分,它是一个执行环境,负责代码的管理和执行。它不仅管理内存分配、线程和进程,还实施安全策略,并确保组件之间的依赖关系得以满足。在开发阶段,CLR简化...
程序编写通常采用C语言或汇编语言,通过IDE(集成开发环境)进行调试和烧录。 步进电机是智能小车的重要执行机构,它能够精确地控制小车的移动。步进电机的工作原理是将电脉冲转化为角位移,每个脉冲使电机转过一个...
利用html2canvas.js文件把html转成base64位的图片是没什么问题的,但也不是绝对的,比如这时候不能碰见svg这个鬼,html2canvas碰见svg就不好用了,svg的元素会不能出现在生成的图片中。这时候我看到了...
为了解决这个问题,你需要确保PyCharm使用的是你想要的Python版本(在这种情况下是Python 3.8)。以下是解决步骤: 1. **创建一个新的虚拟环境**:在PyCharm中,你可以为每个项目创建一个独立的虚拟环境,这样可以...
二维码批量识别解码py脚本, 将需要扫描的二维码放到一个文件夹下,修改python路径即可。 使用到 import os import zxing 这个是因做ctf题碰见很多二维码需要识别而做的。
前几天在网上下载一个struts2的helloword的例子,那个作者也真够缺德的,搞个错误的程序,害得我查了一天的程序错误。 最后发现竟然是struts.xml被写成啦sturts.xml。 碰见这样的问题先鄙视下提供例子的作者, 再...
几年前第一次碰见这种问题是在读取考勤机人员信息时碰见的,折腾了一点时间,现在又碰到了还有点新发现顺便一起记录下。 如下图所示 golds字段 看上去5个字符,长度则为44 ,可判断有特殊字符存在此列中。 ...
2048丨程序员版:手势操作,上下左右,相同数字碰见合并,不封顶,不能滑动游戏结束 跳一跳丨言情版:长按屏幕蓄力跳。故事结尾让人流泪 拼图丨新垣结衣版:向程序员们的老婆致敬 Get47:原创消除,横向消除数字...
然而其开源版本缺乏一些高可用相关的特性,本文介绍Hulu在使用InfluxDB的过程中碰见的问题和解决方案,十分值得一读。 随着Hulu的持续增长,时间序列数据库已成为公司监控系统的关键部分。 这可以像机器性能指标或...
十几道经常碰见的基础题
ST-LINK/V2是一款可以在线仿真以及下载STM8和STM32的开发工具。这是ST公司出厂的最新一代STLINK仿真器,比现在市面上出售的上一代仿真器STLINK III兼容性更强、更稳定、更加可靠。 ST-LINK/V2拥有固件升级的功能,...
R230开机运行一段后就双灯齐闪,电脑提示 常规错误删除所有的打印任务并关闭...经常碰见这样的问题,一般都喷头底下的传感器,擦擦就可以了 回复: 比较同意4楼的说法,除了传感器有问题,传感器的连线有时也会有问题.
最近用mpvue开发了一个小程序,现总结一下碰见的问题及解决方案 1.项目中数据请求用到了fly.io,封装成request.js如下: import wx from 'wx' import Fly from 'flyio' import store from '../store/index' const ...
在Flutter项目开发中,我们常常会碰见资源下载过慢的问题,最终导致下载失败,出现无法build项目,抛出异常运行终止的现象。这篇文章将主要介绍Flutter中Build.gradle仓库的配置,解决外网下载速度过慢失败的问题。 ...
oracle-GAP问题解决思路,自己在客户现场碰见的问题,记录下来的
其他说明:尽管文中提到了不少错误信息,但这些都是新手经常会碰见的情况之一。通过研究错误提示信息,学会排查错误原因以及寻求适当的解决方案是非常重要的技能点。此外,在安装软件之前务必确认所使用的包管理器...