您好,欢迎来到爱学范文!

当前位置:爱学范文网>>实用资料>>C语言中sizeof的用法

C语言中sizeof的用法

标签:时间:

  C语言的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。以下是小编为大家搜索整理的C语言中sizeof的用法,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!

  sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义

  这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed

  char和unsigned char的sizeof值为1,毕竟char是编程能用的最小数据类型。

  MSDN上的解释为:

  The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a

  type (including aggregate types). This keyword returns a value of type

  size_t.

  2. 语法:

  sizeof有三种语法形式,如下:

  1) sizeof( object ); // sizeof( 对象 );

  2) sizeof( type_name ); // sizeof( 类型 );

  3) sizeof object; // sizeof 对象;

  所以一下三种sizeof的使用都是对的

  复制代码 代码如下:

  #include

  main()

  {

  int b;

  printf("%dn",sizeof b);

  printf("%dn",sizeof(b));

  printf("%dn",sizeof(int));

  }

  4. 基本数据类型的sizeof

  这里的基本数据类型指short、int、long、float、double这样的简单内置数据类型,由于它们都是和系

  统相关的,所以在不同的系统下取值可能不同,这务必引起我们的注意,尽量不要在

  这方面给自己程序的移植造成麻烦。一般的,在32位编译环境中,sizeof(int)的取值为4。

  5. 指针变量的sizeof

  等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以

  字节为单位),可以预计,在将来的64位系统中指针变量的sizeof结果为8。

  指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以

  MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用

  指向结构体的指针)。

  6. 数组的sizeof

  数组的sizeof值等于数组所占用的内存字节数,如:

  char a1[] = "abc";

  int a2[3];

  sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符

  sizeof( a2 ); // 结果为3*4=12(依赖于int)

  sizeof当作了求数组元素的个数是不对的,求数组元素的个数有下面两种写法:int c1 = sizeof( a1 )

  / sizeof( char ); // 总长度/单个元素的长度

  int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 总长度/第一个元素的长度.注意数组名做函数参数传递

  时退化为指针。

  7. 结构体的sizeof

  struct S1

  {

  char c;

  int i;

  };

  sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:S1 s1

  = { 'a', 0xFFFFFFFF };s1的地址为0x0012FF78,其数据内容如下:

  0012FF78: 61 CC CC CC FF FF FF FF中间夹杂了3个字节的CC看看MSDN上的说明:When applied to a

  structure type or variable, sizeof returns the actual size, which may

  include padding bytes inserted for alignment.

  这就是字节对齐!为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否则

  就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数

  据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本

  数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能

  需要加入填充字节,所以整个结构体的sizeof值就增长了。

  1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。

  那么如果编程中验证这一点呢?

  复制代码 代码如下:

  #include

  using namespace std;

  int main()

  {

  int i=1;

  cout<

  sizeof(++i);

  cout<

  return 1;

  }

  输入结果为 1

  1

  sizeof 中的++i 的副作用并没有显示出来,原因只可能有一个,在编译的时候sizeof执行以后将++i 处理了,++i 的副作用因此被消除了。如果sizeof 是在运行时进行的话,则肯定要注意++i 。实际上sizeof的实现应该是用宏来做的,宏在编译时进行执行。具体实现可以参考下面。

  2.sizeof('a')在C语言中的结果是4,在C++中结果是1,看过某篇文章说C中sizeof侧重于“数”,而C++中sizeof更侧重于“字符”。

  3.文章中讲了两个用宏实现sizeof的经典应用

  复制代码 代码如下:

  //适用于非数组

  #define _sizeof(T) ((size_t)((T*)0 + 1))

  //适用于数组

  #define array_sizeof(T) ((size_t)(&T+1)-(size_t)(&T))

  先举两个小例子说明两个宏的应用,对于第一个如 _sizeof(int); 的结果就是4;对于第二个先声明一个大小为4的数组int a[4];那么array_sizeof(a)结果为16.

  对于非数组的宏定义,先是将0转换为T*类型的指针所指向的地址(此时地址为0)。然后对T类型的地址加1,相当于加上了T类型的大小(即得到了非数组T的大小)。前面的size_t只是将地址转化为int型的整数返回。

  一个简单的例子:int* p; p=p+1; --------p是一个int*类型的指针, p+1在地址空间上相当于加上了4个字节。

  对 于数组的宏定义,类似于非数组的宏定义,为了方便理解,这里可以把数组T看成一个用户自定义的类型,&T表示数组类型的指针,对于数组类型指针加 1相当于在地址上加上了该数组大小。由于是用户自定义的类型所以不能强制将0转化为数组类型的地址,只能用加1后的地址减去之前的地址,得到的差值就是数 组本身所占的字节大小。

推荐阅读:

    想了解更多实用资料的资讯,请访问:实用资料
    下载文档

    看过《C语言中sizeof的用法》的人还看了以下文章

    延伸阅读

    【第1篇】  11月,初冬季节,在老师的推荐下,我和孩子一起阅读了世界经典童话《小鹿斑比》。这是一部充满爱与温馨的童话,讲述了小鹿斑比从蹒跚学步到经历许多磨难,一天天强大起来,最终成为“鹿王”的过

    【爱学范文网 - 促销活动结束后的总结】药店促销活动总结(一)一、活动执行情况1、药店纯销数据(就是销售情况),最好提供数据对比,就是活动前后销售数据对比,这样才能体系活动带来的效果;2、赠品消耗数量

    尊敬的各位领导、评委:你们好!首先非常感谢油田公司(党工委)办公室给予的这次难得的竞聘机会,这次竞聘既展示了自我,又使我得到了很好的锻炼,它将是我永生难

    方案,汉语词语,一般是指进行工作的具体计划或对某一问题制定的规划。本站今天为大家精心准备了开学复课方案,希望对大家有所帮助!  开学复课方案1  一、总体思路  坚持安全第一、生命至上的原则。各学校要

    本页是爱学范文网最新发布的《员工工作心得想法怎么写 员工工作心得想法和建议》的详细范文参考文章,好的范文应该跟大家分享,希望对网友有用。在日常学习、工作或生活中,大家总少不了接触作文或者范文吧,通过文

    一、理论依据《纲要》中指出:幼儿的科学教育是科学启蒙教育,重在激发幼儿的认识兴趣和探究x望。要尽量创造条件让幼儿参加探究活动,使他们感受科学探究的过程和方法,体验发现的乐趣。  二、实施策略为教案

    全国交通安全日活动总结(集合15篇)总结是指对某一阶段的工作、学习或思想中的经验或情况进行分析研究,做出带有规律性结论的书面材料,它可以帮助我们有寻找学习和工作中的规律,让我们好好写一份总结吧。但是总结有

    推荐一本书我们大家可以选些比较能吸引人的情节想摘要一样给别人看。以下是为大家整理的一本书的作文600字范文(精选四篇),欢迎品鉴!一本书的作文600字1年纪尚未成熟的人读国学会很吃力,尽管可以记忆下来

    艾青诗选是由近代诗人艾青所写的诗歌选集,每一首都让人意犹未尽,回味无穷,关于《艾青诗选》读后感怎么写?下面是小编给大家整理的《艾青诗选》读后感范文,欢迎大家来参阅。艾青诗选读后感(一)这几天闲来无事,

    军训500字感想(29篇)军训500字感想篇1在一个阳光明媚的星期一的上午,我们学校组织五年级全体学生去&ldquo;山青世界&rdquo;参加综合实践活动。在前往青山世界的路上,我们在车上活蹦乱