sizeof 运算符

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位)不同而不同,跨平台时需留意。

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注