sizeof操作符
sizeof是c语言中的一个操作符,类似于++、–等等。sizeof能够告诉我们编译器为某一特定数据或者某一个类型的数据在内存中分配空间时分配的大小,大小以字节为单位。
基本语法:
sizeof(变量); sizeof 变量; sizeof(类型);
sizeof 注意点:
- sizeof返回的占用空间大小是为这个变量开辟的大小,而不只是它用到的空间。和现今住房的建筑面积和实用面积的概念差不多。所以对结构体用的时候,大多情况下就得考虑字节对齐的问题了;
- ※ sizeof返回的数据结果类型是unsigned int;
- 要注意数组名和指针变量的区别。通常情况下,我们总觉得数组名和指针变量差不多,但是在用sizeof的时候差别很大,对数组名用sizeof返回的是整个数组的大小,而对指针变量进行操作的时候返回的则是指针变量本身所占得空间,在32位机的条件下一般都是4。而且当数组名作为函数参数时,在函数内部,形参也就是个指针,所以不再返回数组的大小;
示例代码:
1. sizeof基本用法
//1. sizeof基本用法 void test01(){ int a = 10; printf("len:%d\n", sizeof(a)); printf("len:%d\n", sizeof(int)); printf("len:%d\n", sizeof a); }
2. sizeof 结果类型
//2. sizeof 结果类型 void test02(){ unsigned int a = 10; if (a - 11 < 0){ printf("结果小于0\n"); } else{ printf("结果大于0\n"); } int b = 5; if (sizeof(b) - 10 < 0){ printf("结果小于0\n"); } else{ printf("结果大于0\n"); } }
3. sizeof 碰到数组
//3. sizeof 碰到数组 void TestArray(int arr[]){ printf("数组TestArray arr size:%d\n",sizeof(arr)); } void test03(){ int arr[] = { 10, 20, 30, 40, 50 }; printf("数组array的 size: %d\n",sizeof(arr)); //数组名在某些情况下等价于指针 int* pArr = arr; printf("arr[2]:%d\n",pArr[2]); printf("array size: %d\n", sizeof(pArr)); //数组做函数函数参数,将退化为指针,在函数内部不再返回数组大小 TestArray(arr); }