范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

这种求结构体成员大小的方法你可能没掌握

  在C语言编程中,有时候需要知道某结构体中某成员的大小,比如使用堆内存来存储结构体中的某成员时,需要知道该成员的大小,才好确定所需申请的空间大小。求某结构体中某成员的大小,你会怎么做?例子:typedef struct {     char a;       char c;      short b;              int d;     char e; }test_struct;
  求 d 成员所占内存空间的大小。方法一
  萌新尝试法…
  我们可以先定义一个结构体变量,然后再使用sizeof求出。#include   typedef struct {     char a;       char c;      short b;              int d;     char e; }test_struct; ​ int main(void) {     test_struct test_s;       printf("sizeof(test_s.d) = %d ", sizeof(test_s.d));     return 0; }运行结果:
  但是我们为了得到一个成员的大小,而专门定义一个结构体变量,而这个变量也没有其它的用途,有点浪费资源,或者说这种方法low了。方法二
  肉眼观察法…
  比如在32bit环境下,我们一眼看出d是int类型,就是4个字节,使用sizeof(int)求出。然后想咋用就咋用。这个简单就不讨论了。方法三
  装逼法…代码:#include  ​ typedef struct {     char a;       char c;      short b;              int d;     char e; }test_struct; ​ int main(void) {      printf("sizeof(((test_struct*)0)->d) = %d ", sizeof(((test_struct*)0)->d));     printf("sizeof(((test_struct*)0)->a) = %d ", sizeof(((test_struct*)0)->a));     printf("sizeof(((test_struct*)0)->b) = %d ", sizeof(((test_struct*)0)->b));     printf("sizeof(((test_struct*)0)->c) = %d ", sizeof(((test_struct*)0)->c));     return 0; }运行结果:
  类似((test_struct*)0)->d这样的用法是个固定用法,把0地址转换为test_struct结构的指针,对于结构体指针,使用->符号就是取其成员,再使用sizeof就可以求得其大小。这里不一定是0地址,其它地址也可以,但一般都会使用0地址。这种方法较方法一的好处就是不用定义一个多余的变量。
  这种方法很重要,需要掌握,可能你平时编程不会使用这种方法,但这种方法很重要。在很多优秀的代码中会出现类似形式的宏代码,例如:
  上例可封装一个宏定义:#define  MEM_SIZE(type, member)   sizeof(((type*)0)->member)
  求某成员在结构体中的偏移量:#define  OFFSETOF(type, member)  ( (size_t)( &( ( (type*)0 )->member ) ) )
  求结构体偏移量在C语言头文件中stddef.h也有提供,使用方法如:#include  #include  ​ #define  OFFSETOF(type, member)  ( (size_t)( &( ( (type*)0 )->member ) ) ) ​ typedef struct {     char a;       char c;      short b;              int d;     char e; }test_struct; ​ int main(void) {        /* stddef.h宏 */     printf("offset(a): %d ", offsetof(test_struct, a));     printf("offset(c): %d ", offsetof(test_struct, c));     printf("offset(b): %d ", offsetof(test_struct, b));     printf("offset(d): %d ", offsetof(test_struct, d));     printf("offset(e): %d ", offsetof(test_struct, e));          /* 自定义宏 */     printf("OFFSETOF(a): %d ", OFFSETOF(test_struct, a));     printf("OFFSETOF(c): %d ", OFFSETOF(test_struct, c));     printf("OFFSETOF(b): %d ", OFFSETOF(test_struct, b));     printf("OFFSETOF(d): %d ", OFFSETOF(test_struct, d));     printf("OFFSETOF(e): %d ", OFFSETOF(test_struct, e));          return 0;    }运行结果:
  使用这个求结构体偏移量的宏我们就可以很好地知道结构体成员的在内存中的存储情况。关于结构体内存对齐,可移步至往期笔记:经典、易错的结构体内存对齐问题
  以上就是本次分享的求结构体成员的三种方法。重点掌握方法三,因为在很多优秀的代码中都有使用到类似的方法。

即将到来的未来科技一无人驾驶汽车很快到来的未来科技,无人驾驶汽车。原本猜想到2023年无人驾驶汽车就会被大量商用,但由于技术进展不及预期,因而在现在看来,大量商用的时间很可能会晚于2023年。(大量市场是科技应用的催化剂市场才是科技应用最好的催化剂,从法拉第发现电磁感应到电动机和现在电动汽车的普及,从柯达公司首先发明数码相机却先束之高阁到现在手机数码拍照的广泛应用,无一不是验证了这句话,甚至可以说程序员需要达到什么水平才能顺利拿到20k无压力说实话,后端程序员,比如说JavaGoC这些编程语言的使用者,只要能做到下面这些,拿到一二线城市超过20K的薪资还是不难的。1)算法各大公司的笔试基本都考这个,剑指Offer上的所一加手机到底是不是被国人严重低估的国产品牌呢?什么?一加手机?你是说成天全网营销学习华为不要脸风格,成年累月海外排队抢购卖爆了,又从来没上过销量榜单的那个?你是说堆配置买氢os出口返销国内卖高价装逼的那个?这种渣渣小牌子,要特三星启动环保计划!2025年前所有Galaxy产品用回收材料制造随着苹果开始启动绿能计划,宣布将在2030年包含供应链在内皆要达成碳中和,同时计划逐步至100采用再生能源及回收材料打造产品,全球各大3C大厂已有加速往推动永续发展的迹象。而另一消七夕女神礼物选择攻略迪奥LV高端手机,总有一款她会喜欢金风玉露一相逢,一年一度的中国情人节七夕又来了。就像一个段子说的那样母亲节不送母亲礼物,妈妈还是妈妈。但如果情人节不送女友礼物,女友可就不一定是女友了。现在还没有给女友买礼物的朋友SoftearsTurii入耳式耳机产品图集SOOMALSoftearsTurii是一款比较高端定位的动圈式入耳式耳机,它的目前售价为8999元,感谢网友送测。SoftearsTurii把小耳塞所使用的动圈扬声器结构作为技术突破口,磁钢鸿蒙系统真正全面屏,这款中端手机市场产品难道不香吗?手机市场现在的手机市场上啊,又开始流行起来了真正的全面屏产品,为什么要说又呢?因为此前的手机市场上就有流行过,不过不少屏下摄像头设计而已。那时候的手机市场上啊,突然出现了一批真正的苹果手机不支持电信的VoLTE,到底是苹果的原因,还是电信的问题?感谢您的阅读!11月29日,电信在全面范围内试商用VoLTE,这个消息给我们的好处是打游戏不需要断网了!但是,开通了电信的volte,可惜只能小米手机可以使用,而iPhone手机根嘴上说不要?身体却很诚实?华为P50Pro每天都售罄众所周知,在华为P50Pro刚发布的时候,很多人看到全系4G手机,就表示散了吧!对4G手机索然无味。不过,事实证明嘴上说不要?身体却很诚实?自从华为P50Pro开售以来,几乎每天都你们的k30s更新MIUI12。5增强版了吗,效果怎么样?这么说吧,之前该有的bug,现在还有,但确实流畅了很多,发热和耗电也不是那么严重,知道是不是我开省电模式的原因(144hz,5G关闭)。我的k30s升级过一次到12。5。1,但由于
华为与大众汽车集团供应商达成专利许可协议等7条快讯1华为与大众汽车集团供应商达成专利许可协议华为今天宣布已与大众汽车集团(大众)的一个供应商达成专利许可协议。该协议包括华为4G标准必要专利(SEP)许可,涵盖装有无线连接功能的大众知情人士透露ModelY大幅降价或因上海政府对赌压力所致电车汇消息7月8日,售价27。6万元的ModelY车型开始正式接受预订,与此前的Model3一样,在推出单电机磷酸铁锂电池版后,售价大幅下降,相对长续航版本,新款ModelY的售价极氪汽车从吉利汽车拆分,未来或将独立上市电车汇消息近日,极氪汽车(宁波杭州湾新区)有限公司(以下简称极氪汽车)发生股东变动,原大股东吉利汽车集团有限公司(以下简称吉利汽车)从股东中退出,新增股东上海华普国润汽车有限公司(国轩高科5名董事集体辞职,大众集团高管即将进驻电车汇消息7月6日,国轩高科发布两则公告,因引进战略投资者的需要,5位董事及董事会秘书辞职。在此次变动之后,国轩高科的9位董事仅剩4位,除董事长李缜外,还有2位是目前国轩高科的技术Sigma全新Standard系列型号登场2018年,以不断推陈出新,挑战自我为目标的品牌,SigmaGuitar既推出SE系列的两款新产品之后,畅销的Standard系列也推出了部分新品。新SE系列介绍SigmaSE系列万众期待的PRS木吉他巡演来了!什么是民谣时代?为什么会更爱弹木吉他?男(女)朋友VS木吉他选谁?如何演绎一场原声吉他指弹趴?PRS木吉他巡演给你答案3款爱不释手的木吉他能听还能弹,给你双重体验1位东洋大咖前来助2018马丁吉他大赛指弹组开始投票2018马丁吉他指弹弹唱比赛于7月正式开赛以来,吸引了各地马丁吉他粉丝们的视频投稿,在此感谢全国选手的鼎力支持。四位男神评委说,选手们的水平整体很高,每一位的表现都可圈可点!来吧!原声吉他史上著名的一支吉他MartinD28Martin的D28可能是原声吉他史上甚至是流行音乐史上最著名的一支吉他了!这是被之后众多原声吉他争相效仿的一个型号,也是任何一位吉他手与音乐人以及音乐爱好者最想拥有的吉他!拿起一2018PRS木吉他巡演圆满收官2018年6月22日,由雅登音响乐器(上海)有限公司主办的美国PRSSE系列木吉他巡演在北京蜗牛的家拉开帷幕,途径西安杭州共3站,每站上百人次观众到场观看演出。越洋知名指弹艺术家OVX50AGnutube电子管技术加持的木吉他弹唱音响VOXVX50AG是专用于木吉他和人声扩声的全新音箱产品。体积小巧轻量便携,却拥有惊人的50瓦大功率。采用精心设计的箱体结构和高品质8寸两分频同轴喇叭,不仅音色纯正中性清晰准确,更首德正一之夜丨徐牧青岛大师班精彩回顾2018年8月16日下午200由德国SAUTER钢琴及青岛正一琴行联合举办的青岛旅德钢琴家徐牧大师班在青岛正一琴行取得圆满成功。数十位学生,家长及钢琴老师聆听了本次由徐牧老师主讲的