下载此文档

C 中的sizeof 关键字详解.doc


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
C 中的sizeof_关键字详解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()

C 中的sizeof 关键字详解 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人drp539606
  • 文件大小41 KB
  • 时间2019-03-15