sizeof是操作符,是操作符!!!
在C语言学习中,我们常常会将sizeof当作一个函数。因为通常在使用时,sizeof后面要加括号,然而虽然很难接受但铁打的事实就是它是一个 关 键 字。
简单的做个实验来证明下:
int main()
{
int a = 0;
printf("test 1 :%d\n", sizeof(int));
printf("test 2 :%d\n", sizeof(a));
printf("test 3 :%d\n",sizeof a);
return 0;
}
在VS 32位系统下,可以完美地运行,其运行结果:
而我们也知道,sizeof 的功能就是 计算对象所占内存空间的大小。32位系统下, int 占4字节, a又是整型变量,所以也占4字节。
可能有人会有疑问" sizeof(int) "可以运行,为什么" sizeof int "又不可以呢? 这里我们要明白,万事都有其存在意义。 像是 unsigned + 类型 // 表示无符号数 static + 类型 // 表示静态变量 。。。。而再看 sizeof + 类型 想要表示什么意义呢?想要声明什么样的类型变量? 类型扩展吗? 所以这么思考就明白它是 错误的表示。
所以在计算变量空间大小时可以省略括号,而在计算类型时大小不能省略。不过在一般情况建议写着,防止出错。
除此之外,使用sizeof还要注意,由于它是在编译时求值,所以sizeof操作符内可以当作常量表达式。
也可以自行验证:
int main()
{
int a = 0;
printf("test 1 :%d\n", sizeof(a = 5));
printf("test 2 :%d\n", a);
return 0;
}
qq_42345446: 真不戳
原味吐司: 加油,写的很好