总结一下将sizeof用于各种类型对象或类型时其结果的算法。
1、认识sizeof
sizeof是C/C++中的一个operator,其作用就是返回一个对象或者类型所占的内存字节数(byte)。返回值是size_t,在头文件stddef.h中定义。
2、用法
sizeof的用法有一下3种:
(1)sizeof(object);//即sizeof(对象)
(2)sizeof(type_name);//即sizeof(类型名,如int,char...etc)
(3)sizeof object;//即sizeof 对象
例如:
int i;
sizeof(i);
sizeof(int);
sizeof i;
sizeof int; //error!!!
【注】:
(1)实际上sizeof计算对象的大小也是转换成对象类型来计算的,that is to say:对同类型的不同对象使用sizeof操作,得到的值是一样的。
(2)关于上面第(1)个表达式中的object,其可以延伸至一个unary-expression(一元表达式),例如:
sizeof(2); //相当于sizeof(int)
sizeof(2+4.55); //相当于sizeof(2.0+4.55),从而相当于sizeof(double)
(3)sizeof可以对函数调用求值,就相当于对该函数的返回值类型求sizeof。
char foo()
{
cout<<"foo函数被调用!"<<endl;
return 'a';
}//函数
int foo_size;
foo_size=sizeof(foo());//相当于求sizeof(char)
(4)sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用。
例如:
char ary[ sizeof( int ) * 10 ]; //ok~~~
3、各种sizeof计算
(1)基本数据类型的sizeof(C++primer中叫内置类型),如:int,char,double,float,short,long
在32位计算机中,各种内置类型所占的字节数如下:
char-------------1bytes;
short------------2bytes;
int----------------4bytes;
long--------------4bytes;
float--------------4bytes;
double-----------8bytes;
long double----8bytes;
(2)指针数据类型的sizeof
指针记录了另一个对象的地址,即指针变量是用来存放地址数据的,那么其当然等于计算机地址总线的宽度了。所以在32位计算机中,无论指针p指向何种类型的数据对象,其sizeof结果肯定为4bytes。