码迷,mamicode.com
首页 > 其他好文 > 详细

sizeof()用法总汇

时间:2014-06-27 17:10:14      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:blog   http   com   使用   数据   string   

 sizeof()功能:计算数据空间的字节数 
 

1.与strlen()比较 
      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为‘\0‘的数组元素。 
      而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
 
2.指针与静态数组的sizeof操作 
   指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 
注意:int *p; sizeof(p)=4;  但sizeof(*p)相当于sizeof(int);      
 
对于静态数组,sizeof可直接计算数组大小; 
例:int a[10];char b[]="hello"; 
        sizeof(a)等于4*10=40; 
        sizeof(b)等于6; 
注意:数组做型参时,数组名称当作指针使用!! 
               void  fun(char p[]) 
               {sizeof(p)等于4}    

经典问题: 
     double* (*a)[3][6]; 
     cout<<sizeof(a)<<endl; // 4 a为指针 
      cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组 
      cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针 
      cout<<sizeof(***a)<<endl; // 4 ***a为一维的第一个指针 
      cout<<sizeof(****a)<<endl; // 8 ****a为一个double变量问题解析:a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。既然是指针,所以sizeof(a)就是4。 
既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a)=3*6*sizeof(double*)=72。同样的,**a表示一个double*[6]类型的数组,所以sizeof(**a)=6*sizeof  (double*)=24。***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。 

3.格式的写法 
   sizeof操作符,对变量或对象可以不加括号,但若是类型,须加括号。
 
4.使用sizeof时string的注意事项 
   string s="hello"; 
   sizeof(s)等于string类的大小,sizeof(s.c_str())得到的是与字符串长度。 

5.union 与struct的空间计算 
   总体上遵循两个原则: 
   (1)整体空间是 占用空间最大的成员(的类型)所占字节数的整倍数 
   (2)数据对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整倍数,如果不够则补齐,以此向后类推。。。。。 
   注意:数组按照单个变量一个一个的摆放,而不是看成整体。如果成员中有自定义的类、结构体,也要注意数组问题。

 相关常数: 
sizeof int:4
sizeof short:2
sizeof long:4
sizeof float:4
sizeof double:8
sizeof char:1
sizeof p:4
sizeof WORD:2
sizeof DWORD:4

更多内容:http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html 

sizeof()用法总汇,布布扣,bubuko.com

sizeof()用法总汇

标签:blog   http   com   使用   数据   string   

原文地址:http://www.cnblogs.com/guidovanrossum/p/3810003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!