`
peng2251
  • 浏览: 12634 次
  • 性别: Icon_minigender_1
  • 来自: 国内
最近访客 更多访客>>
社区版块
存档分类
最新评论

碰见C语言的几个小问题

阅读更多

最近碰见C语言的几个小问题。

1.关于结构体的大小(sizeof)。

  1. /*struct assign
  2.   {
  3.     char a;
  4.     int  b;
  5.     char c;
  6.   };
  7.   */
  8.   struct assign
  9.   {
  10.     char a;
  11.     char b;
  12.     int c;
  13.   };
  14.   int i = offsetof(struct assign,b);
  15.   printf("%d\n",sizeof(struct assign));
  16.   printf("%d\n",i);

分别声明以上两种结构体,分析结构体的长度。

第一种应该为12,第二种应该为8.这个主要是内存对齐问题。32位机,为了提高速度,是不会把一个int型的放在2个32位的空间里面的。 因为当读取的时候会读取两次,系统不允许这样做的。也可以用offsetof求其中的一个结构体中的变量相对与结构体首部的位置。

(offsetof是一个宏,上次写可变长的函数时候就说过,对内存的地址进行操作。定义如下:#define offsetof(s,m) (size_t)&(((s *)0)->m))。

 

2.关于结构体和字符串。

     在内存中结构体和字符串都一样,一段内存,而结构体不同的是对其进行划分为不同的类型,而字符串全都是字符类型的。所以可以把字符串强制转化为一个结构体。

  1.  struct test
  2.   {
  3.     char a;
  4.     char b;
  5.   };
  6.   char * tmp ="abcdef";
  7.   struct test *pig = malloc(sizeof(struct test));
  8.   *pig = ((struct test *)tmp)[1];
  9.   printf("%c\n",pig->a);
  10.   printf("%c\n",pig->b);

最近看文件系统源代码的时候,没大看懂这个问题。现在明白了。一个字符串里面有很多相似与结构的字符,对其进行强制类型转化后,可以像数组一样操作了。

PS:没事看看源代码,会很有收获的,无论是在语法还是在一定的设计上,都会有很大收获。不断体会UNIX的哲学思想(KISS)。

分享到:
评论

相关推荐

    深入浅出-C语言8种经典排序算法

    如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序。 快速排序 快速排序是一个不稳定的排序算法。在...

    贪吃蛇C语言课设源代码

    10、程序运行设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏,也就是实现贪吃蛇的...

    ie下的css层叠z-index各种问题详细整理

    可是真有些日子没有写DIV+CSS了,而且对IE6兼容性的坑碰到的还是不够多(以前做国外项目),所以这次开发中不可避免的碰见了几个问题,尤其是在IE下的 z-index 问题很有意思,所以整理了一些资料和总结分享给大家…注...

    asp.Net面试经常碰见的题

    1. **公共语言运行时 (CLR)**:CLR是.NET框架的核心组成部分,它是一个执行环境,负责代码的管理和执行。它不仅管理内存分配、线程和进程,还实施安全策略,并确保组件之间的依赖关系得以满足。在开发阶段,CLR简化...

    智能小车的程序(单片机应用)含有步电机,传感的有关

    程序编写通常采用C语言或汇编语言,通过IDE(集成开发环境)进行调试和烧录。 步进电机是智能小车的重要执行机构,它能够精确地控制小车的移动。步进电机的工作原理是将电脉冲转化为角位移,每个脉冲使电机转过一个...

    rgbcolor.js

    利用html2canvas.js文件把html转成base64位的图片是没什么问题的,但也不是绝对的,比如这时候不能碰见svg这个鬼,html2canvas碰见svg就不好用了,svg的元素会不能出现在生成的图片中。这时候我看到了...

    mac PyCharm环境下安装opencv-python碰见的困难(csdn)————程序.pdf

    为了解决这个问题,你需要确保PyCharm使用的是你想要的Python版本(在这种情况下是Python 3.8)。以下是解决步骤: 1. **创建一个新的虚拟环境**:在PyCharm中,你可以为每个项目创建一个独立的虚拟环境,这样可以...

    二维码批量识别解码python脚本

    二维码批量识别解码py脚本, 将需要扫描的二维码放到一个文件夹下,修改python路径即可。 使用到 import os import zxing 这个是因做ctf题碰见很多二维码需要识别而做的。

    一个struts2的例子:彻底解决STRUTS2 错误There is no Action mapped for namespace / and action name login

    前几天在网上下载一个struts2的helloword的例子,那个作者也真够缺德的,搞个错误的程序,害得我查了一天的程序错误。 最后发现竟然是struts.xml被写成啦sturts.xml。 碰见这样的问题先鄙视下提供例子的作者, 再...

    SQL Server不可见字符处理

    几年前第一次碰见这种问题是在读取考勤机人员信息时碰见的,折腾了一点时间,现在又碰到了还有点新发现顺便一起记录下。  如下图所示 golds字段 看上去5个字符,长度则为44 ,可判断有特殊字符存在此列中。 ...

    小游戏,一个场景游戏,Cocos Creator+TypeScript制作_Typescript_代码_下载

    2048丨程序员版:手势操作,上下左右,相同数字碰见合并,不封顶,不能滑动游戏结束 跳一跳丨言情版:长按屏幕蓄力跳。故事结尾让人流泪 拼图丨新垣结衣版:向程序员们的老婆致敬 Get47:原创消除,横向消除数字...

    Hulu如何扩展InfluxDB使其支持每秒百万TPS

    然而其开源版本缺乏一些高可用相关的特性,本文介绍Hulu在使用InfluxDB的过程中碰见的问题和解决方案,十分值得一读。 随着Hulu的持续增长,时间序列数据库已成为公司监控系统的关键部分。 这可以像机器性能指标或...

    MYSQL基础面试题整理

    十几道经常碰见的基础题

    STLINK V2固件更新

    ST-LINK/V2是一款可以在线仿真以及下载STM8和STM32的开发工具。这是ST公司出厂的最新一代STLINK仿真器,比现在市面上出售的上一代仿真器STLINK III兼容性更强、更稳定、更加可靠。 ST-LINK/V2拥有固件升级的功能,...

    爱普生r230清零软件

    R230开机运行一段后就双灯齐闪,电脑提示 常规错误删除所有的打印任务并关闭...经常碰见这样的问题,一般都喷头底下的传感器,擦擦就可以了 回复: 比较同意4楼的说法,除了传感器有问题,传感器的连线有时也会有问题.

    详解mpvue开发小程序小总结

    最近用mpvue开发了一个小程序,现总结一下碰见的问题及解决方案 1.项目中数据请求用到了fly.io,封装成request.js如下: import wx from 'wx' import Fly from 'flyio' import store from '../store/index' const ...

    flutter中build.gradle仓库的配置(解决外网下载速度过慢失败的问题)

    在Flutter项目开发中,我们常常会碰见资源下载过慢的问题,最终导致下载失败,出现无法build项目,抛出异常运行终止的现象。这篇文章将主要介绍Flutter中Build.gradle仓库的配置,解决外网下载速度过慢失败的问题。 ...

    oracle-GAP.txt

    oracle-GAP问题解决思路,自己在客户现场碰见的问题,记录下来的

    Linux环境下编译图像查看工具View-image的Ubuntu实践教程

    其他说明:尽管文中提到了不少错误信息,但这些都是新手经常会碰见的情况之一。通过研究错误提示信息,学会排查错误原因以及寻求适当的解决方案是非常重要的技能点。此外,在安装软件之前务必确认所使用的包管理器...

Global site tag (gtag.js) - Google Analytics