sizeof()是什么?
sizeof()并不是一个函数,而是一个操作符。它计算的就是操作数在内存中所占用的存储大小,单位为字节。这里的操作数既可以是数据类型,也可以是某个表达式。
关于sizeof()的使用
举个栗子:
这段代码使用sizeof()运算符来输出各种基本数据类型所占据的内存大小(以字节为单位)。
#include <stdio.h>
int main()
{
printf("%zd\n",sizeof(char));//1
printf("%zd\n", sizeof(short));//2
printf("%zd\n", sizeof(int));//4
printf("%zd\n", sizeof(long));//4
printf("%zd\n", sizeof(long long));//8
printf("%zd\n", sizeof(float));//4
printf("%zd\n", sizeof(double));//8
printf("%zd\n", sizeof(long double));//8
return 0;
}
程序运行结果:
注意:这些数据类型的大小可能会因为编译器和系统的不同而显示的结果不同。例如,int在某些系统上可能是2字节,而在其他系统上可能是4字节或者更多,但通常是4字节。 另外,long(长整型)是大于等于int(整型)的内存大小的,所以long运行出来是4字节也没有问题的,long double与double的大小关系同理。
由于sizeof返回的是一个size_t类型的值,所以用%zd来打印结果。
再举个栗子:
这段代码使用sizeof()运算符展示如何返回不同表达式的大小(以字节为单位)。
#include <stdio.h>
int main()
{
int a = 10;//定义一个整型变量a,并初始化为10
printf("%zd\n",sizeof(a));//4
printf("%zd\n", sizeof a);//4
printf("%zd\n",sizeof(int));//4
printf("%zd\n",sizeof (a + 2));//4
printf("%zd\n", sizeof (10 + 2));//4
printf("%zd\n", sizeof 10 + 2);//6
printf("%zd\n",sizeof(++a));//4
return 0;
}
解析:
- 使用sizeof运算符获取变量a的大小,因为a是int类型,所以输出是4字节。
- 另外,在C语言当中,sizeof运算符可以接受括号内的类型(如sizeof(int)),也可以接受变量名或者表达式(如sizeof a),后者会自动解析为变量的类型大小。在使用类型作为操作数时,括号是必须要加上的,而在使用变量时,括号是可选的。因此sizeof a和sizeof(a)是等价的。
- 直接获取int类型的大小。
- 由于a是int类型,a+2的结果也是int类型,所以大小是4字节。这个地方需要注意的是,如果sizeof()括号内放的是表达式,它其实是不会真实计算这个表达式的数值的,最后返回的应该是这个表达式在内存中所占的大小。
- 虽然(10+2)这个表达式的结果是一个整数常量,但sizeof返回的是这个整数常量在内存中的大小,因此仍然是4字节。
- 倒数第二行和前面的有点不同。sizeof 10返回整数常量10的大小(就是4字节),然后这个值(4)与整数2相加,得到6。因此,这行代码的输出是6,而不是整数类型的大小。
- ++a还是int类型,所以大小是4字节。