在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。
A.参数为数据类型或者为一般变量:
例如sizeof(int),sizeof(long)等等。
这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。
例如int类型在16位系统中占2个字节,在32位系统中占4个字节。
B.参数为数组或指针:
int a[50]; //sizeof(a)=4*50=200;求数组所占的空间大小
int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针的大小,在32位系统中,当然是占4个字节。
C.参数为结构或类:
Sizeof应用在类和结构的处理情况是相同的,需要考虑字节对齐(参加另一篇文章:)。另外有几点需要注意:
第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。
第二、没有成员变量的结构或类(非虚)的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。
第三、包含虚函数的类或者虚继承的类,需要算上虚表指针的占的4个字节。
下面举例说明:
Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,s为一个指针。
Class test1{ };//sizeof(test1)=1;
Class test2{ virtual void print(){}};//sizeof(test2)=4;
参考 http://blog.csdn.net/garfield2005/article/details/7648430