『踩坑记录』sizeof注意事项

sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。本片博客来介绍一下sizeof使用的注意事项。

首先,我们来看一段代码

int main() {
	int i = 1;
	printf("%lu %d\n", sizeof(++i), i);

	return 0;
}

这个代码的运行结果是什么呢?按照我们的理解应该是sizeof(++i),其中++i的返回值是一个int,所以结果是4,而i的值经历了++i后就会变成2。所以结果应该是4 2,我们来看一下对不对
在这里插入图片描述
我们可以看到结果是4 1,这是为什么呢?难道++i没有执行吗?

下面,我们来介绍一下sizeof的简单注意事项

  • sizeof有两种语法形式sizeof(类型名);sizeof 对象;sizeof计算对象的大小也是转换成对对象类型的计算,所以也可以写成sizeof(对象);
    在这里插入图片描述
    在这里插入图片描述
    但是注意sizeof 类型名;这种写法是不行的:
    在这里插入图片描述
    在这里插入图片描述
    所以为了使用时少出错,推荐使用sizeof(类型名/对象);这种形式。
  • sizeof对一个表达式求值:sizeof(表达式);编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。如:
    在这里插入图片描述
    在这里插入图片描述
  • sizeof也可以对一个函数调用求值sizeof(函数调用);,其结果为函数返回类型的大小函数不会被调用
    在这里插入图片描述
    在这里插入图片描述
    但是注意,如果函数没有返回值,则这种写法就是错误的
    在这里插入图片描述
    在这里插入图片描述
  • sizeof的计算是发生在编译期,所以它可以被当做常量表达式使用
    在这里插入图片描述
    在这里插入图片描述

我们再来看一个代码
我们来看一下sizeof('a');C和C++中的结果

  • C语言中
    在这里插入图片描述
    在这里插入图片描述
  • C++中
    在这里插入图片描述
    在这里插入图片描述
  • 上述结果可以看出,sizeof('a');C/C++中的结果是不同的,有知道原因的大佬欢迎留言。
  • sizeof('我');C/C++中的结果都是4,环境Visual Studio 2013。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值