一、基本使用
首先,先了解一下sizeof的定义:sizeof用于返回运算对象的内存大小,单位是字节。
这个运算对象可以为变量名和类型。但是注意的是,在对类型进行运算时要使用圆括号将其括起来。
如下图使用即可:
#include<stdio.h>
int main()
{
//类型的使用
printf("int的大小为 %d字节\n",sizeof(int));
printf("char的大小为 %d字节\n",sizeof(char));
printf("float的大小为 %d字节\n",sizeof(float));
//变量的使用
int a,b;
a=0;
b=sizeof a;
printf("变量a的内存大小是:%d字节\n",b);
return 0;
}
实际上,问变量的大小就是该变量类型的大小。
二、拓展
1. size_t类型
由于,C标准只规定了sizeof返回的值是无符号整数,并未规定返回值的类型,所以该值的类型可以是"unsigned int、unsigned long、unsigned long long "。相对应地,在使用printf()函数时,转换说明对应为"%u、%lu、%llu".
但这个是根据系统而定的。如果你的系统使用unsigned int,而你的程序需要在另一个系统使用,不幸的是,另一个系统不使用unsigned int,而使用其他的类型。
所以,为了有更好的移植性,C标准规定size_t为sizeof返回值的类型,即当你使用sizeof时,该运算符返回的值是size_t类型的。当然,这里也解释一下,size_t实际上是使用了为现有类型创建别名。如下第2点说明。
2. 类型别名
C中有一种typedef用法,例如:
#include<stdio.h>
int main()
{
typedef int cbc;
cbc a;
a=0;
printf("a的值为:%d",a);
}
这里使用typedef,便把cbc(这里随便给了名)替代了int,所以可以cbc来声明变量。
回到正题,size_t便是unsigned int或unsigned long等等类型的别名,当使用到size_t,系统便会根据自身使用不同的类型(即unsigned int/unsigned long等等)。
3.size_t的转换说明
C给出“zd"为size_t类型的转换说明,但是得注意这个转换说明有些系统不适用。此时可以使用"%u"或"%lu"等。如下图所示,
#include<stdio.h>
int main()
{
printf("int类型的大小为%zd\n",sizeof(int));
printf("int类型的大小为%u\n",sizeof(int));
}
4.size_t具体使用
如下代码所示:
#include<stdio.h>
int main()
{
int a;
size_t daxiao;
daxiao=sizeof a;
printf("变量a的大小为%lu\n",daxiao);
}
因为size_t为sizeof返回值的类型,所以不妨用它来声明一个变量来存储返回值。不过有点多余,直接使用sizeof即可。