2026-01-03 14:00:27
sizeof是C语言中的单目操作符,用于计算操作数所占内存空间的大小(单位为字节)。
用于数据类型sizeof(int)返回int类型的大小(通常为4字节),sizeof(double)返回double类型的大小(通常为8字节)。示例:
printf("%zun", sizeof(int)); // 输出4(32位/64位系统通常一致)printf("%zun", sizeof(double)); // 输出8用于变量计算变量或数组的内存占用。对数组,sizeof返回整个数组的字节大小;对指针,返回指针本身的字节大小(与系统位数相关)。示例:
int a[10];double b[10];printf("%zun", sizeof(a)); // 输出40(10个int × 4字节)printf("%zun", sizeof(b)); // 输出80(10个double × 8字节)用于指针指针的sizeof结果取决于系统位数(32位为4字节,64位为8字节),而解引用指针(如*p)返回指向类型的大小。示例:
int *p = a;printf("%zun", sizeof(p)); // 输出4(32位)或8(64位)printf("%zun", sizeof(*p)); // 输出4(int类型大小)应用举例
计算数组长度:
int arr[] = {1, 2, 3};int len = sizeof(arr) / sizeof(arr[0]); // 正确:3注意:若数组作为函数参数传递,会退化为指针,此时sizeof无法计算长度。
字符串处理:
char str[] = "Hello";printf("%zun", sizeof(str)); // 输出6(包含'0')printf("%zun", strlen(str)); // 输出5(不包含'0')结构体对齐:结构体的sizeof可能大于成员大小之和,因编译器会进行内存对齐优化。
struct Example { char c; int i; };printf("%zun", sizeof(struct Example)); // 可能输出8(而非5)注意事项
sizeof在编译时计算,不会实际执行表达式(如sizeof(a++)不会递增a)。
函数参数中的数组会退化为指针,此时sizeof返回指针大小而非数组大小。
总结:sizeof是静态计算内存大小的工具,适用于数据类型、变量、指针及复杂类型(如结构体),但需注意数组传参时的指针退化问题。