『踩坑记录』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注意事项_第1张图片
    『踩坑记录』sizeof注意事项_第2张图片
    但是注意sizeof 类型名;这种写法是不行的:
    『踩坑记录』sizeof注意事项_第3张图片
    在这里插入图片描述
    所以为了使用时少出错,推荐使用sizeof(类型名/对象);这种形式。
  • sizeof对一个表达式求值:sizeof(表达式);编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。如:
    『踩坑记录』sizeof注意事项_第4张图片
    在这里插入图片描述
  • sizeof也可以对一个函数调用求值sizeof(函数调用);,其结果为函数返回类型的大小函数不会被调用
    『踩坑记录』sizeof注意事项_第5张图片
    在这里插入图片描述
    但是注意,如果函数没有返回值,则这种写法就是错误的
    『踩坑记录』sizeof注意事项_第6张图片
    在这里插入图片描述
  • sizeof的计算是发生在编译期,所以它可以被当做常量表达式使用
    『踩坑记录』sizeof注意事项_第7张图片
    在这里插入图片描述

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

  • C语言中
    在这里插入图片描述
    在这里插入图片描述
  • C++中
    在这里插入图片描述
    在这里插入图片描述
  • 上述结果可以看出,sizeof('a');C/C++中的结果是不同的,有知道原因的大佬欢迎留言。
  • sizeof('我');C/C++中的结果都是4,环境Visual Studio 2013。

你可能感兴趣的:(『踩坑记录』)