sizeof是函数吗,具体使用方法

来源:互联网 发布:虚与委蛇 知乎 编辑:程序博客网 时间:2024/05/18 00:06

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不能求出结构体位段的大小,但是可以求出位段每个成员的大小;