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 语言内存模型和类型系统的基础工具
相关推荐
-今昭-2 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
黑马程序员毕设4 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e4 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
问天_观心4 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长4 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Navigator_Z5 小时前
LeetCode //C - 1224. Maximum Equal Frequency
c语言·算法·leetcode
Navigator_Z5 小时前
LeetCode //C++ - 1226. The Dining Philosophers
c语言·算法·leetcode
源代码•宸5 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang
2601_967338715 小时前
C#上位机开发零基础入门到精通全套视频
开发语言·c#