C++基础知识 sizeof运算符应用的总结

C++ sizeof运算符在使用中有许多值得注意的地方,其间涉及的知识也很多。这里我把它的用法总结如下:

(一)对基本类型 的操作
对于基本类型sizeof返回这种数据类型所占用的内存空间大小。在VC++6.0下运行结果:
sizeof(int)=4
sizeof(unsigned int)=4
sizeof(long)=4
sizeof(unsigned long)=4
sizeof(float)=4
sizeof(double)=8
sizeof(long double)=8
sizeof(bool)=1
sizeof(char)=1
sizeof(unsigned char)=1
sizeof(short)=2
sizeof(__int64)=8
(二)对指针及数组的操作    
char str1[] = "Hello" ;
char str2[5] = {'H','e','l','l','o'};
char str3[6] = {'H','e','l','l','o','\0'};
char *p1 = "Hello";
char *p2[]={"hello","world"}; 
int  n = 10;
int  *q = &n;
int  *p = (int *)malloc( 100 );

sizeof (str1 ) = 6    (自动加了'\0')  
strlen (str1 ) = 5    (字符串的长度)  
sizeof (str2 ) = 5    (字符数组的大小)
strlen (str2)  = 未知 (该字符串缺少结束符'\0')
sizeof (str3)  = 6    (字符数组的大小)
strlen (str3)  = 5    (该字符串的长度为5)
sizeof ( p1 ) =  4    (p1是一个指针,大小为4)
sizeof ( p2 ) =  8    (p2是长度为2的字符串数组)
sizeof ( n ) =   4    (整型大小为4)
sizeof ( q ) =   4    (q是一个指针,大小为4)
sizeof ( p ) =   4    (p是一个指针,大小为4)

 

 (三)数组及指针作为函数的形参
void Function1( char p[],int q[],int *a ){
sizeof ( p ) = 4  (数组在做为函数参数时均化为指针)
sizeof ( q ) = 4 
sizeof ( a ) = 4 
}

 (四)简单的类及结构体
class A{};
class B{};
class C:public A,public B{};
class D:virtual public A{};
class E:virtual public A,virtual public B{};
class F {
virtual void fun() { ; }
};
Class G {
int a;
};
Class H {
Virtual void fun() {;}
char a;
};

      union   I   {   
int   a_int1;   
double   a_double;   
int   a_int2;   
}; 

      sizeof ( A ) = 1      (空类大小为1,一个结构所占用的内存最小必须为1,否则系统无法给其分配内存,所以编译器安插一个char给空类,用来标记它的每一个对象)
sizeof ( C ) = 1      (继承或多重继承后空类大小还是1)
sizeof ( D ) = 4      (虚继承时编译器为该类安插一个指向父类的指针,指针大小为4)
sizeof ( E ) = 8      (指向父类A的指针与父类B的指针,加起来大小为8)
sizeof ( F ) = 4      (含有虚函数的类,编译器自动为其添加一个指向其vtable的指针)
sizeof ( G ) = 4      (相当于int类型所占用的空间)
sizeof ( H ) = 8      (这个结果关系到数据在内存中的对齐方式问题,我将再结构体及类中数据的对齐方式详解中讨论 )

      sizeof ( I  ) = 8      (union类型的大小是结构中占空间最大的成员的大小)

来自http://blog.csdn.net/lizhengc/archive/2008/10/28/3157280.aspx

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值