2026/4/5 20:20:40
网站建设
项目流程
用AIDE怎么建设网站,营销型网站 策划运营网站,本地视频做成链接网址,建筑安全员证查询网上查询sizeof 是 C 语言的编译期运算符#xff08;非函数#xff09;#xff0c;核心作用是计算「数据类型或变量」的固有内存大小#xff0c;结果在编译时就已确定#xff0c;与运行期逻辑无关。一、核心原理拆解计算时机#xff1a;编译期完成#xff0c;不执行表达式sizeof…sizeof 是 C 语言的编译期运算符非函数核心作用是计算「数据类型或变量」的固有内存大小结果在编译时就已确定与运行期逻辑无关。一、核心原理拆解计算时机编译期完成不执行表达式sizeof 不会运行括号内的表达式仅通过表达式的 “类型” 推导大小。示例int a5; sizeof(a); 中a 不会执行a 仍为 5仅计算 int 类型大小4 字节。计算对象只关注 “固有类型”不关心 “实际存储内容”对变量等价于 sizeof(变量的类型)如 sizeof(c) 等价于 sizeof(int*)c 是 int* 指针。对类型直接返回该类型的标准内存大小如 sizeof(int)4、sizeof(double)8。大小规则由类型和系统位数决定与运行期状态无关基础类型int、char 等大小是语言标准或编译器规定的固定值如 char 恒为 1 字节。指针类型任意 T*大小由系统位数决定64 位 8 字节32 位 4 字节与指向的类型无关。复合类型数组、结构体数组 sizeof(arr) 元素个数 × 元素类型大小结构体需考虑内存对齐默认按最大成员类型对齐。二、关键误区为什么 sizeof(int* c) 是 8 字节→ 因为 int* 是指针类型64 位系统中所有指针类型的固有大小都是 8 字节。为什么 sizeof(c[3]) 是 4 字节→ 因为 c[3] 的类型是 intint 的固有大小是 4 字节下标不改变类型。为什么 sizeof 拿不到堆内存大小→ 堆内存是运行期 malloc 动态分配的sizeof 编译时无法获取运行期的动态信息只能计算指针本身的固有大小。