C语言——【sizeof 操作符】
🚀个人主页:fasdfdaslsfadasdadf
📖收入专栏:C语言
🌍文章目入
- 🚀 1. sizeof 操作符的使用
- 🚀 2. sizeof 中表达式不计算
🚀 1. sizeof 操作符的使用
sizeof 是一个关键字,也是操作符,是专门用来计算数据类型或者变量,或者表达式,单位是字节。
当我们需要计算数据类型的字节大小如下:
只需要使用sizeof(),必须加括号
#include<stdio.h>
#include<stdbool.h>
int main()
{
printf("%zd\n", sizeof(bool));
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(long double));
return 0;
}
运行结果:
如果是计算一个变量的字节大小,计算的结果是取决于变量的数据类型
使用sizeof 可以加上括号,或者不加
int main()
{
int a = 10;
short b = 20;
printf("%zd\n", sizeof a);
printf("%zd\n", sizeof(b));
return 0;
}
结果:
计算表达式也是可以的,和计算变量一样,结果取决于数据类型,sizeof 可以加上括号也可以不加
int main()
{
int a = 3 + 2;
printf("%zd\n", sizeof a);
printf("%zd\n", sizeof (a));
return 0;
}
结果:
🚀 2. sizeof 中表达式不计算
int main()
{
int a = 10;
short b = 5;
printf("%zd\n", sizeof(b = a + 1));
return 0;
}
结果:
这是因为在代码进行编译时,就根据表达式确定了数据的类型了,而表达式的执行要在程序运行期间才能执行,编译期间已经将sizeof 处理了,所以在运行期间不会执行表达式。
大家可以看到当我使用sizeof时,占位符使用的是 %zd,这是因为 sizeof 计算结果返回的是 size_t 类型的,为什么是 size_t ? 因为在C语言中 sizeof 返回的类型并没有进行明确的规定,只是说明了是无符号整数,那么就有可能是 unsigned int 或者 unsigned long 或者是 unsigned long long ,那么它们对应的占位符就是 %u %lu %llu,所以C语言为了明确,就创造了 size_t,它的 占位符就是 %zd, 当我们使用sizeof 时,占位符写上%zd 就行,当然如果一定要 %u 或者%d 也行,只不过会有警告,所以建议大家使用 %zd。
如有错误,还请指出 !