附:C代码在线调试工具

简述

sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等,并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小,即单位为Byte

用于数据类型

sizeof(int)  		// 结果为4,单位为byte
sizeof(double)		// 结果为8

用于变量

int a[10];
double b[10];
int tmp1 = sizeof(a);
int tmp2 = sizeof(a) / sizeof(int);
int tmp3 = sizeof(b);
int tmp4 = sizeof(b) / sizeof(double);

以上代码运行结果为

tmp1 = 40, 表示a数组占40个byte存储空间
tmp2 = 10, 表示a数组有10int元素
tmp3 = 80, 表示b数组占40个byte存储空间
tmp4 = 10, 表示b数组有10double元素

用于指针

int a[10];
int *p = a;
int tmp5 = sizeof(p);
int tmp6 = sizeof(*p);

以上代码运行结果为

tmp5 = 4 or 832位系统时指针存储大小单位为464位时则位8
tmp6 = 4,        *p为int类型,大小占4字节

sizeof应用举例


实例1:

int arr[] = {
   0, 2, 3, 4, 5, 6, 7, 8, 1, 7};
char str[] = "Hello";
int lenArr = sizeof(arr) / sizeof(int);
int lenStr1 = sizeof(str);
int lenStr2 = strlen(str);

结果:

> lenArr=10 
> lenStr1=6 
> lenStr2=5

分析:

  • 因为sizeof返回的单位是Byte,故arr数组有多少个int数据,要先除以单个int的大小,不能直接用sizeof(arr)。
  • sizeof(str) 长度为6,包涵结尾符’\0’,所以缓存字符数组空间申请时一定要预留 ‘\0’;
  • strlen(str) 长度为5,到’\0’结束,结果不含’\0’。

实例2:

int nums[3] = {
   0, 1, 2};
int size1 = sizeof(nums);
int RepeatNum1(int *nums, int len)
{
   
    int size2 = sizeof(nums);
    qsort(nums, len, sizeof(int), cmp);
}
  • size1结果为3 * 4 = 12
  • size2结果为4(32位系统),第二个数组在传参后退化为指针,取的是指针地址大小。64位系统指针地址大小为8。

注意:
sizeof用于结构体/联合体等,要考虑地址对齐的问题。

参考链接:
https://www.cnblogs.com/ttltry-air/archive/2012/08/30/2663366.html