(1)sizeof操作符的返回值类型size_t
sizeof操作符的作用是返回一个对象或类型名的长度,返回值的类型是size_t。size_t是标准库中的类型,定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本,它是一个与机器相关的unsigned类型,其大小足以保证存储内存中的对象的大小。
(2)sizeof操作符的用法
sizeof的结果是编译时常量,它的使用有三种形式:
a. sizeof (type name)
b. sizeof (expr)
c. sizeof expr
以上返回的结果都不是expr的值,而是expr的结果的类型的长度,因此,对于sizeof *p,即使p指向一个无效地址,结果也是合法的,因为他计算的是p指向的对象对应的类型长度。
sizeof的结果与类型的关系:
i. 对char类型或者值为char类型的表达式做sizeof的结果都为1;
ii. 对引用类型做sizeof操作的结果将返回存放此引用类型对象所需的内存空间的大小;
iii. 对指针做sizeof操作将返回存放指针所需的内存大小;如果要获取指针所指向对象的类型大小,则必须对指针解引用;
iv. 对数组做sizeof操作等效于对其元素类型做sizeof的结果乘上数组元素的个数。
(3)sizeof代码示例
1 #include<iostream> 2 using namespace std; 3 #include<cstdlib> 4 5 void GetLengthInnerType() 6 { 7 size_t cRes = sizeof (char); 8 size_t bRes = sizeof (bool); 9 size_t wcRes = sizeof (wchar_t); 10 size_t iRes = sizeof (int); 11 size_t lRes = sizeof (long int); 12 size_t fRes = sizeof (float); 13 size_t dRes = sizeof (double); 14 size_t ldRes = sizeof (long double); 15 16 17 cout<<"char:"<<cRes<<endl<<"bool:"<<bRes<<endl<<"wchar_t:"<<wcRes<<endl<<"int:"<<iRes<<endl 18 <<"long:"<<lRes<<endl<<"float:"<<fRes<<endl<<"double:"<<dRes<<endl<<"long double:"<<ldRes<<endl; 19 } 20 21 void main() 22 { 23 GetLengthInnerType(); 24 25 int a = 2; 26 double b = 4.1; 27 28 int& aa = a; 29 double& bb = b; 30 31 cout<<"sizeof aa:"<<sizeof aa<<endl; 32 cout<<"sizeof bb:"<<sizeof bb<<endl; 33 34 int* pa = &a; 35 double* pb = &b; 36 37 cout<<"sizeof pa:"<<sizeof pa<<endl; 38 cout<<"sizeof pb:"<<sizeof pb<<endl; 39 40 cout<<"sizeof *pa:"<<sizeof *pa<<endl; 41 cout<<"sizeof *pb:"<<sizeof *pb<<endl; 42 43 system("pause"); 44 }
运行结果: