有关sizeof函数内部运算的问题

本文探讨了C++中sizeof运算符的行为,解释了为何其后的表达式不进行求值,仅根据类型判断结果大小。通过具体代码示例,展示了int变量在不同情况下sizeof的输出始终为4,不受前缀或后缀递增运算符的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看大佬的一道题(有修改)

  #include <stdio.h>
  int main()
  {
  int i;
  i = 10;
  printf("%d\n", i);
  printf("%d\n", sizeof(++i));
  printf("%d\n", sizeof(i++));
  printf("%d\n", i);
  return 0;
  }

这三行应该输出什么?
答案为:
10
4
4
10

首先,这题有关int变量的字节长度(不同于字符串或字符数组)
int 变量无论在32位还是64位都是占4字节,也就是说不管是 i++ 还是 ++i 都无所谓(它还是个int变量,字节长度还是4)
但是为什么经过 i++ 和 ++i 之后,i 的值还是为10呢?


摘抄大佬的话:

我们来好好看看C++标准中的描述:

5.3.3 sizeof
The sizeof operator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is an unevaluated operand (Clause 5), or a parenthesized type-id.

也就是说,如果sizeof的操作数是一个表达式的话,这个表达式时不会被计算的。
  sizeof当预处理看就行了,它后面括号里的东西,根本不求值,只根据C的一堆规则判断结果类型,然后返回结果类型的大小。另外一个操作符typeid(暂时还不会。。)也是如此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值