sizeof 运算符:获取数据类型占用的字节数
在C语言中,sizeof 是一个关键字(也是运算符),用于确定给定类型或表达式在内存中占据的字节数。
1. 基本用法与返回值类型
- 作用于类型:
sizeof(类型名),如sizeof(int)得到int类型占用的字节数。 - 返回值:运算结果是一个无符号整数,类型通常为
size_t(在stddef.h中定义,具体对应哪种整数类型取决于编译器和C库)。 - 推荐写法:建议用
size_t类型变量接收结果,输出时使用%zu说明符(或用%u强制按无符号整数输出)。
size_t size = sizeof(long long);
2. 综合代码示例(查看各类型字节数)
#include <stdio.h>
int main(void)
{
printf("\n变量类型char占用 %d 字节", sizeof(char));
printf("\n变量类型short 占用 %d 字节", sizeof(short));
printf("\n变量类型int 占用 %d 字节", sizeof(int));
printf("\n变量类型long 占用 %d 字节", sizeof(long));
printf("\n变量类型float 占用 %d 字节", sizeof(float));
printf("\n变量类型double 占用 %d 字节", sizeof(double));
printf("\n变量类型long double 占用 %d 字节", sizeof(long double));
return 0;
}Code language: PHP (php)
典型输出结果(依赖编译环境,常见32/64位系统表现):
变量类型char占用 1 字节
变量类型short 占用 2 字节
变量类型int 占用 4 字节
变量类型long 占用 4 字节
变量类型float 占用 4 字节
变量类型double 占用 8 字节
变量类型long double 占用 16 字节
-------------------------
3. 作用于变量与表达式
- 作用于变量:
sizeof(变量名),结果是该变量类型占用的字节数。 - 简写形式:
sizeof 变量名(省略括号,仅限变量名,不能用在类型名上)。 - 作用于表达式:结果是表达式计算结果所占的字节数,且不实际执行表达式内部的运算(仅在编译期推导类型大小)。
#include <stdio.h>
int main(void)
{
char c = 1;
printf("\n变量类型char占用 %d 字节", sizeof c); // 简写形式,等价于 sizeof(c)
return 0;
}Code language: PHP (php)
注意:sizeof char 会报错(类型名必须加括号);sizeof(c) 正确。
4. 核心要点解析
| 用法 | 示例 | 说明 |
|---|---|---|
| 类型名 | sizeof(int) | 必须加括号 |
| 变量名 | sizeof c 或 sizeof(c) | 可省略括号 |
| 表达式 | sizeof(2+3.14) | 得 double 的字节数(不执行加法) |
| 数组 | sizeof(arr) | 得整个数组总字节数(常用于求元素个数) |
- 输出格式:结果为无符号整数,用
%u或推荐的%zu输出;图中示例用%d(有符号)在多数环境下兼容但不严谨。 - 编译期计算:
sizeof在编译时确定结果,不产生运行时开销。 - 与极限值区别:
sizeof看内存占用大小(字节),极限值(如INT_MAX)看数值范围;两者共同决定数据表达能力。 - 环境差异:
long和long double的字节数可能因编译器/系统(如Windows/Linux、32位/64位)不同而不同,跨平台时需留意。