您的位置 首页 百科知识

offse意师阿丝吧tof函数什么意思啊

offse意师阿丝吧tof函数什么意思啊

offsetof宏的简介

定义

  在stddef.h头文件中,该宏的完整说明如下:

  360问答#ifdef__cplu谁善评splus

  #ifdef_WIN64

  #defineof改行商民养和挥fsetof(s,m)(size_t)((ptrdiff_t)&reinterpret_cast居nstvolatilechar&>((((s*)0)->m)))

 概缺体政武分略集 #else

  #d翻训棉争养助兵余雷距efineoffsetof(s,m)(size_t)&reinterpret_cast阳过设科稳效四文夫顶latilechar&>((((s*)0)->m))

  #endif

  #else

  #ifdef_WIN64

唱章斗怀苏手清  #defineoffse态汽粒满临社阳胞tof(s,m)(size_t)((ptrd营染力益鲁识半iff_t)&(((s*)0)->m))

  #else

  #defineoffsetof(s,m)(s意制苗滑ize_t)&(((s*)0)->m)

  #endif

  #endif/*__cplusplus*/

功能

  该宏用于求结构体中一个成员在该结构体中的偏移量。

  在msdn上,该宏被写作:

  size_toffse坐补走力跳福换降洲措tof(structName,memberName);

  第一个参数是结构体的名字,第二个参数是结构体成员的名字。该宏返回结构体st急弱于婷停ructName中成员memberName的偏移量。偏移量是size_t类型的。

编辑本段

程序示例

  #include

  #inclu厚史构素某带更星变de

  typedefstruct

  {

  intiVal;

  intiVal2;

  }Test;

  typedefstruct

  {

  charch;

  intiNum;

  }Test2;

  i安消四婷厚老怎ntmain(void)

  书编含再景找征氧八操{

  Testt={1,2};

  Test2t2={'t',100};

  printf("\naddressoft:%p\naddressof***.ival:%p\naddressof***.ival2:%p\n\n",&t,&(***.ival),&(***.ival2));

  printf("offsetofiValint:%p\n",offsetof(Test,iVal));

  printf("offsetofiVal2int:%p\n",offsetof(Test,iVal2));

  printf("\naddressoft2:%p\naddressoft2.ch:%p\naddressof***.inum:%p\n\n",&t,&(t2.ch),&(***.inum));

  printf("offsetofchint2:%p\n",offsetof(Test2,ch));

  printf("offsetofiNumint2:%p\n",offsetof(Test2,iNum));

  return0;

  }

  在VS2005中输出:

  addressoft:0012FF10

  addressof***.ival:0012FF10

  addressof***.ival2:0012FF14

  offsetofiValint:00000000

  offsetofiVal2int:00000004

  addressoft2:0012FF10

  addressoft2.ch:0012FF00

  addressof***.inum:0012FF04

  offsetofchint2:00000000

  offsetofiNumint2:00000004

  需要注意的是,Test2中iNum成员的偏移量

上一篇 耐候胶十大排名品牌
下一篇 设NA为阿伏伽德罗常数的数值,下列说法正确的是A.常温下,23gNO2含来自有NA个氧原子B.1L0.1mol L-1的烧碱溶液中含有0.1NA个OH-C.常温常压下,22.4军LCCl4含有个NACCl4分子D.1molFe与足量的子杂培盐酸反应,转移3NA个电子
扫一扫,手机访问

扫一扫,手机浏览