1 / 12
文档名称:

C 中的sizeof 关键字详解.doc

格式:doc   大小:41KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C 中的sizeof 关键字详解.doc

上传人:drp539606 2019/3/15 文件大小:41 KB

下载得到文件列表

C 中的sizeof 关键字详解.doc

相关文档

文档介绍

文档介绍:1、什么是sizeof首先看一下sizeof在msdn上的定义:Thesizeofkeywordgivestheamountofstorage,inbytes,associatedwithavariableoratype(includingaggregatetypes).,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。举个例子:cout<<sizeof(int)<<endl;//32位机上int长度为4cout<<sizeof(1==2)<<endl;//==操作符返回bool类型,相当于cout<<sizeof(bool)<<endl;在编译阶段已经被翻译为:cout<<4<<endl;cout<<1<<endl;这里有个陷阱,看下面的程序:inta=0;cout<<sizeof(a=3)<<endl;cout<<a<<endl;输出为什么是4,0而不是期望中的4,3???就在于sizeof在编译阶段处理的特性。由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为:inta=0;cout<<4<<endl;cout<<a<<endl;所以,sizeof是不可能支持链式表达式的,这也是和一元操作符不一样的地方。结论:不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。2、sizeof的用法sizeof有两种用法:(1)sizeof(object)也就是对对象使用sizeof,也可以写成sizeofobject的形式。例如:(2)sizeof(typename)也就是对类型使用sizeof,注意这种情况下写成sizeoftypename是非法的。下面举几个例子说明一下:inti=2;cout<<sizeof(i)<<endl;//sizeof(object)的用法,合理cout<<sizeofi<<endl;//sizeofobject的用法,合理cout<<sizeof2<<endl;//2被解析成int类型的object,sizeofobject的用法,合理cout<<sizeof(2)<<endl;//2被解析成int类型的object,sizeof(object)的用法,合理cout<<sizeof(int)<<endl;//sizeof(typename)的用法,合理cout<<sizeofint<<endl;//错误!对于操作符,一定要加()可以看出,加()是永远正确的选择。结论:不论sizeof要对谁取值,最好都加上()。3、数据类型的sizeof(1)C++固有数据类型32位C++中的基本数据类型,也就char,shortint(short),int,longint(long),float,double,longdouble大小分别是:1,2,4,4,4,8,10。考虑下面的代码:cout<<sizeof(unsignedint)==sizeof(int)<<endl;//相等,输出1unsigned影响的只是最高位bit的意义,数据长度不会被改变的。结论:unsigned不能影响sizeof的取值。(2)自定义数据类型typedef可以用来定义C++自定义类型。考虑下面的问题:typedefshortWORD;typedeflongDWORD;cout<<(sizeof(short)==sizeof(WORD))<<endl;//相等,输出1cout<<(sizeof(long)==sizeof(DWORD))<<endl;//相等,输出1结论:自定义类型的sizeof取值等同于它的类型原形。(3)函数类型考虑下面的问题:intf1(){return0;};doublef2(){;}voidf3(){}cout<<sizeof(f1())<<endl;//f1()返回值为int,因此被认为是intcout<<sizeof(f2())<<endl;//f2()返回值为double,因此被认为是doublecout<<sizeof(f3())<<endl;//错误!无法对void类型使用sizeofcout<<sizeof(f1)<<endl;//错误!无法对函数指针使用sizeofcout<<sizeof*f2<<endl;//*f2,和f2()

最近更新

结缔组织病相关间质性肺病的社区护理与远程医.. 26页

结缔组织病引起的间质性肺病合并肺细胞肺炎的.. 29页

电商平台运营方案成功秘籍利用活动营销提升用.. 21页

创卫工作总结(5篇) 10页

班会活动设计提高学生对校园内部交通安全的认.. 24页

灯谜与对联春节期间的趣味游戏 23页

消防安全与公共场所 27页

流感季节的防病斗争与传媒宣传培训课件 23页

氧化铝项目的市场规模与市场份额分析 23页

氧化铝项目可行性研究报告及市场渠道拓展计划.. 30页

未来临床医学培训的发展展望及策略 28页

春节的传统推拿与中医保健 27页

春节习俗之磨豆花 27页

时间管理表格绘制 25页

新教师培训中的沟通与表达技巧 28页

教育机构培训少儿编程教育创新思维培养 29页

教师培训提高学生解决问题能力的策略与实施 31页

提高组织适应性应对市场变化 30页

2024年蜂蜜的正确食用方法 5页

探讨中小学人工智能教育方案中的课程评价与反.. 26页

2024年落花生课堂教学设计 24页

护理骨干竞聘演讲PPT课件有效的团队协作 27页

2024年营业员个人工作述职报告(精选7篇) 14页

2024年广西专业技术人员继续教育公需科目试题.. 14页

开展防灾减灾工作简报 3页

TSGD00012023年压力管道安全技术监察规程——.. 44页

检验科仪器设备维护保养记录表 6页

小学生生理卫生班会 ppt课件 41页

粽子订购合同 3页

放射诊疗许可证校验申请表 6页