sizeof(a=0)

// sizeof(a=0)
#include  <stdio.h >

int main ()
{
     int a  =  - 1;
     int b  =  sizeof (a = 0) ;
    
     // 程序实际输出-1
     // 原因:
     // sizeof在编译连接阶段进行处理,没有对a=0进行处理
    printf ( "%d/n" , a );
     return  0;
}
### **关于 `sizeof` 运算符的解析** 在 C/C++ 中,`sizeof` 是一个**编译时运算符**,用于计算数据类型或变量占用的内存大小(以字节为单位)。以下是针对问题的详细解释: --- #### **1. 语法形式** - `sizeof(类型)`:计算类型的字节大小(如 `sizeof(int)`)。 - `sizeof(变量)`:计算变量所属类型的字节大小(如 `sizeof(a)`)。 - `sizeof 变量`:**可省略括号**,直接作用于变量(如 `sizeof a`)。 - 但 `sizeof int` 是**错误的**,因为 `int` 是类型名,必须加括号。 --- #### **2. 问题中的表达式** ```c int a = 0; ``` - **正确用法**: - `sizeof(a)`:计算变量 `a` 的大小(等价于 `sizeof(int)`)。 - `sizeof(int)`:直接计算 `int` 类型的大小。 - `sizeof a`:省略括号的变量形式(合法,但不推荐用于复杂表达式)。 - **错误用法**: - `sizeof int`:语法错误,类型名必须用括号包裹。 --- #### **3. 实际输出** - 在大多数现代系统中,`int` 通常占 **4 字节**(32 位系统或 64 位系统),因此: ```c printf("%zu\n", sizeof(a)); // 输出 4 printf("%zu\n", sizeof(int)); // 输出 4 printf("%zu\n", sizeof a); // 输出 4 ``` --- #### **4. 关键注意事项** 1. **括号的灵活性**: - `sizeof` 是运算符而非函数,括号仅在类型名时必需。 - 示例: ```c sizeof a + 1 // 等价于 (sizeof a) + 1 sizeof(a + 1) // 等价于 sizeof(int) ``` 2. **编译时求值**: - `sizeof` 在编译阶段确定结果,不影响运行时性能。 3. **返回值类型**: - 返回 `size_t` 类型(无符号整数),打印时建议用 `%zu`。 --- #### **5. 对比其他语言** - **C++**:`sizeof` 行为与 C 一致。 - **Java/C#**:无 `sizeof` 运算符,基本类型大小固定由语言规范定义。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值