c++中如何获取变量的字节数_c++ sizeof运算符用法与注意事项【详解】

发布时间 - 2026-01-23 00:00:00    点击率:
sizeof是编译期运算符,返回类型或对象的静态字节数;不能用于动态内存;作用于类型需括号,变量可省略;数组名传参后退化为指针,sizeof失效。

sizeof 不是函数,是编译期运算符,它返回的是类型或对象在当前平台的**静态字节数**,不能用于获取运行时动态分配内存的大小(比如 new 出来的数组长度)。

sizeof 作用于类型和变量的区别

语法上可以写 sizeof(int)sizeof xx 是变量),但语义一致:都是取该类型定义下的大小。注意括号在类型名时不可省略,变量名可省略。

  • sizeof(int) 合法;sizeof int 非法(缺少括号)
  • sizeof arrsizeof(arr) 等价,但 arr 必须是数组名(非指针)
  • 对指针变量用 sizeof,得到

    的是指针本身的大小(通常是 4 或 8 字节),不是它指向内容的大小

数组名传参后 sizeof 失效的典型陷阱

函数参数中的数组会退化为指针,此时 sizeof 返回指针大小,而非原始数组字节数。

void func(int arr[10]) {
    // 这里 arr 已是 int* 类型
    std::cout << sizeof(arr) << "\n"; // 输出 8(64 位系统下指针大小),不是 40
}

int main() { int a[10] = {}; std::cout << sizeof(a) << "\n"; // 输出 40 func(a); }

  • 若需在函数内知道数组长度,必须额外传入 size_t len 参数
  • 或改用 std::array / std::vector,它们自带 .size()
  • C++20 起可用模板推导:template void func(int (&arr)[N]),此时 sizeof(arr) 有效

结构体/类的 sizeof 受内存对齐影响

sizeof 对结构体返回的是“满足对齐要求后的总占用空间”,通常大于各成员大小之和。

struct S {
    char a;   // offset 0
    int b;    // offset 4(跳过 3 字节对齐到 4)
    char c;   // offset 8
}; // sizeof(S) == 12,不是 1+4+1 == 6
  • 对齐规则由编译器和目标平台决定,可通过 #pragma pack(n)alignas 修改
  • sizeof 结果是编译期常量,可用于栈数组声明:char buf[sizeof(S)];
  • 虚函数表指针(vptr)会增加类对象大小,但空基类可能被优化(EBO)

真正容易出错的地方,往往不在怎么写 sizeof,而在于误以为它能反映运行时数据长度,或忽略对齐导致跨平台序列化失败——这两个点,比记住语法重要得多。


# 字节  # c++  # 区别  # Array  # 常量  # 运算符  # 结构体  # char  # int  # void  # 指针  # 虚函数  #   # len  # 对象  # 的是  # 数组名  # 作用于  # 都是  # 这两个  # 得多  # 已是  # 自带  # 而非 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  如何在阿里云域名上完成建站全流程?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  iOS发送验证码倒计时应用  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何快速使用云服务器搭建个人网站?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何挑选最适合建站的高性能VPS主机?  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  JavaScript如何操作视频_媒体API怎么控制播放  如何在IIS中新建站点并配置端口与物理路径?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  JS经典正则表达式笔试题汇总  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何正确选择百度移动适配建站域名?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何快速查询网址的建站时间与历史轨迹?  简单实现Android文件上传  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Bootstrap CSS布局之列表  Linux系统命令中tree命令详解  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何在新浪SAE免费搭建个人博客?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Bootstrap整体框架之CSS12栅格系统  Angular 表单中正确绑定输入值以确保提交与验证正常工作  如何在IIS中新建站点并解决端口绑定冲突?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何在Tomcat中配置并部署网站项目?