sizeof 关键字的用法
sizeof给我们的印象就是像一个函数一样,可以传进去参数,也有一个返回值,但是他的本质呢,不是一个函数,而是:
- sizeof是编译器的内置指示符
- sizeof用于计算类型或变量所占的内存大小
- sizeof的值在编译期就已经确定
使用的格式如下图所示:
为sizeof 关键字正名
sizeof是C语言的内置关键字而不是函数
- 在编译过程中所有的sizeof将被具体的数值所替换
- 程序的执行过程与sizeof 没有任何关系
得知上面这些,我们来看看下面的程序会输出什么吧。
#include <stdio.h>
int fun1()
{
printf("print the string.\r\n");
return 0;
}
int main()
{
int var = 0;
int ret = 0;//存储返回值
int size = sizeof(var++);
printf("var = %d ,size = %d\r\n",var,size);
ret = sizeof(fun1());
printf("sizeof id %d\r\n",ret)
return 0;
}
输出的结果是:
你可能会疑惑,var++怎么没执行呢?printf的内容怎么没有被打印呢?
我们来解读一下啊,因为sizeof不是函数,所以不会到程序运行的时候才给我们计算变量var(或者类型)的值,而是在编译期间sizeof都会被具体的数值所替换,所以在编译的时候,sizeof(var++)已经被一个具体的值给替换了,这里具体的数值是4,因此var++得到不到执行,在调用了fun1()函数的时候也一样,sizeof已经被具象化一个数字代替了,所以不会执行printf。
所所以说呢,sizeof只是C语言的一个指示符,告诉编译器看到sizeof的时候就直接算出他的值。