C语言sizeof是函数吗?

C语言 sizeof 运算符速查

本质

  • 编译时运算符(非函数),编译阶段求值,零运行时开销
  • 返回 size_t 类型(无符号整数),表示字节数

语法

c 复制代码
sizeof(类型/变量/表达式)   // 带括号(通用)
sizeof 变量               // 仅变量可省略括号

典型大小(64位系统)

类型 字节数
char 1(标准保证)
short 2
int 4
long 8
long long 8
float 4
double 8
指针 8

四大应用场景

1. 动态内存分配

c 复制代码
int *arr = malloc(10 * sizeof(*arr));  // 推荐写法

2. 数组元素计数

c 复制代码
size_t n = sizeof(arr) / sizeof(arr[0]);
// ⚠️ 数组退化为指针后失效

3. 结构体对齐分析

c 复制代码
// sizeof 包含填充字节,≠ 成员大小之和
struct { char a; int b; char c; };  // 12 字节,非 6

4. 缓冲区声明

c 复制代码
char buf[sizeof(struct my_struct)];

关键特性

特性 说明
编译时求值 表达式不会被执行
VLA 例外 可变长度数组运行时求值
限制 不能用于 void、函数类型、不完整类型

常见陷阱

  • ❌ 函数内数组参数退化为指针
  • ❌ sizeof(指针) ≠ sizeof(指向类型)
  • ❌ 结构体含填充字节
  • ❌ size_t 与有符号数混用

核心要点

复制代码
sizeof 是理解 C 语言内存模型和类型系统的基础工具
相关推荐
Julien20042 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
Chen_harmony2 小时前
七、STL与string类
开发语言·c++
沐晓时光2 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
xxxiugou1233 小时前
C++命名空间与引用全解析
开发语言·c++
yangmu32034 小时前
编程语言发展简史:从机器指令到智能协作
开发语言
Pniubi7 小时前
Java为什么要分堆和栈
java·开发语言
小小晓.7 小时前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
炸薯条!8 小时前
博客系统测试报告
开发语言·lua
Evand J8 小时前
【MATLAB例程12】永磁同步电机基于增广无迹卡尔曼滤波的未知负载转矩在线观测
开发语言·matlab
时间的拾荒人9 小时前
CMake 实战指南:从基础语法到静态库/动态库制作与链接
开发语言·c++·面试