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。