(一)对基本类型 的操作
对于基本类型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.youkuaiyun.com/lizhengc/archive/2008/10/28/3157280.aspx