一、sizeof操作符
sizeof是一个关键字,也是操作符。专门用来计算sizeof的操作符数的类型长度,单位是字节。
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。
sizeof的操作符的操作数可以是 类型、变量、“ 表达式 ”。
int main()
{
int a;
printf("类型:%zd\n", sizeof(int));
printf("变量:%zd\n", sizeof(a));
printf("表达式:%zd\n", sizeof(10 + 20));
return 0;
}
二、答疑解惑
仔细的同学会看到,在上面的代码里面会有很多奇怪的地方:
1.为什么printf输出的时候,是%zd而不是%d?
2.为什么表达式里面的是 10 + 20,输出不应该是30吗,为啥会是4呢?
下面就给大家解答:
1.为啥要用%zd输出
首先就是C语言中并没有规定sizeof运算符的返回值的类型,不同的系统返回值的类型可能各不相同,这样是不便于我们后面进行各种移植的。
为了解决这个问题,C语言创建了一个类型别名size_t,用来统一表示sizeof的返回值类型。
但是问题又出来了,每个编译器的size_t的类型又各不相同,有的是unsigned int等等。
在VS的编译环境中,就用%zd来表示size_t的类型。
2.为什么表达式不进行计算
sizeof在代码进行编译的时候,已经根据表达式的类型确定了,表达式的执行是在程序运行期间执行的。
换句话说,就是sizeof就是先下手为强,在表达式运行的时候,就把类型确定了。(主要是看表达式左边的数据类型。)
int main()
{
char s = 2;
short a = 10;
printf("%zd", sizeof (s = a + 5));
return 0;
}
三、拓展
int main()
{
printf("char:%zd\n", sizeof(char));
printf("bool:%zd\n", sizeof(bool));
printf("short:%zd\n", sizeof(short));
printf("int:%zd\n", sizeof(int));
printf("long:%zd\n", sizeof(long));
printf("long long:%zd\n", sizeof(long long));
printf("float:%zd\n", sizeof(float));
printf("double:%zd\n", sizeof(double));
printf("long double:%zd\n", sizeof(long double));
}