欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言中sizeof的用法.docx

    • 资源ID:90692504       资源大小:38.83KB        全文页数:4页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言中sizeof的用法.docx

    C语言中sizeof的用法sizeof是C/C+中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义这是一个依赖于编译系统的值,一般定义为typedefunsignedintsize_t;编译器林林总总,但作为一个规范,都会保证char、signedchar和unsignedchar的sizeof值为1,毕竟char是编程能用的最小数据类型。MSDN上的解释为:Thesizeofkeywordgivestheamountofstorage,inbytes,associatedwithavariableoratype(includingaggregatetypes).Thiskeywordreturnsavalueoftypesize_t.2.语法:sizeof有三种语法形式,如下:1)sizeof(object);/sizeof(对象);2)sizeof(type_name);/sizeof(类型);3)sizeofobject;/sizeof对象;所以一下三种sizeof的使用都是对的复制代码代码如下:#includemain()intb;printf("%dn",sizeofb);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值等于数组所占用的内存字节数,如:chara1="abc"inta23;sizeof(a1);/结果为4,字符末尾还存在一个NULL终止符sizeof(a2);/结果为3*4=12(依赖于int)sizeof当作了求数组元素的个数是不对的,求数组元素的个数有下面两种写法:intc1=sizeof(a1)/sizeof(char);/总长度/单个元素的长度intc2=sizeof(a1)/sizeof(a10);/总长度/第一个元素的长度.注意数组名做函数参数传递时退化为指针。7.结构体的sizeofstructS1charc;inti;sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:S1s1='a',0xFFFFFFFF;s1的地址为0x0012FF78,其数据内容如下:0012FF78:61CCCCCCFFFFFFFF中间夹杂了3个字节的CC看看MSDN上的说明:Whenappliedtoastructuretypeorvariable,sizeofreturnstheactualsize,whichmayincludepaddingbytesinsertedforalignment.这就是字节对齐!为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。那么如果编程中验证这一点呢?复制代码代码如下:#includeusingnamespacestd;intmain()inti=1;cout<sizeof(+i);cout<return1;输入结果为11sizeof中的+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)/适用于数组#definearray_sizeof(T)(size_t)(&T+1)-(size_t)(&T)先举两个小例子说明两个宏的应用,对于第一个如_sizeof(int);的结果就是4;对于第二个先声明一个大小为4的数组inta4;那么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的用法.docx)为本站会员(柒****a)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开