1.sizeof是运算符,不是函数;
2.sizeof不能求void类型的长度,void本来申明的就是一个空类型,自己都不知道自己的类型有多大;但是sizeof可以求得void指针的大小;
int a = 10;
void* p = &a;
printf(“%d\n”,sizeof(p));
输出的结果为4
3.sizeof求一个指针的大小,不管指针指向的是什么类型,在32位平台下都是4;
4.sizeof可以求一个静态数组的整体大小;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
sizeof(arr);
此时求得就是整个数组的大小,大小为40;
5.但是数组名作为参数,在传参的时候 ,sizeof求得的是当成常指针来计算的,在32平台下为4
int Binary_search(int* arr, int left, int right, int k)
{}
sizeof(arr);
这个时候数组名代表的就不在是整个数组了
6.sizeof不能求一个动态数组的大小;
int *p = new int [10];
sizeof(p) ;
这个时候p的大小时4,因为此时p是一个指针;
7.sizeof不能求不完整的数组的大小;
例如,file1.cpp 和file2.cpp ,其中fiel1中有如下定义;
int arr1[10]={1,2,3,4,5,6,7,8,9,0};
int arr2[10]={1,3,5,7,9,2,4,6,8,10};
file2中如下:
extern arr1[];
extern arr2[10];
cout<<sizeof(arr1);
cout<<sizeof(arr2);
第一条语句可以求出arr1的大小是40;第二条语句会报错;
7.当表达式做为sizeof操作数的时候,他的结果是表带是计算结果类型的大小,但是他不对表达式求值;
例如:
int a = 10;
char b='q';
sizeof(a+b);
sizeof(b=a+b);
表达式1得出的结果是4,表达式2得出的结果是1;
因为表达式一的操作数结果为int 而操作数2的结果为char;
8.sizeof求得的结构体大小,不是各个成员变量大小之和,结构体存在内存对齐;
9.sizeof不能求出结构体位段的大小,但是可以求出位段每个成员的大小;