更多关于sizeof()的小小题目请阅读[博客]:C语言–指针进阶3–这些指针和数组相关的题目你都会做吗?
sizeof是什么?
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、–等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
sizeof的使用
举例:请看下面的代码:
int main()
{
char ch = 'o';
short a = 100;
int b = 200;
long c = 300;
long long d = 400;
unsigned int e = 500;
int arr[10] = { 0 };
char cha[] = "hello c";
printf("ch的长度:%d 字节\n", sizeof(ch));
printf("a的长度:%d 字节\n", sizeof(a));
printf("b的长度:%d 字节\n", sizeof(b));
printf("c的长度:%d 字节\n", sizeof(c));
printf("d的长度:%d 字节\n", sizeof(d));
printf("e的长度:%d 字节\n", sizeof(e));
printf("\nint型数组arr的长度:%d 字节\n", sizeof(arr));
printf("\n字符型数组cha的长度:%d 字节\n", sizeof(cha));
printf("\nshort类型的长度:%d 字节\n", sizeof(short));
printf("int的长度:%d 字节\n", sizeof(int));
return 0;
}
程序输出结果:
可以看出,sizeof计算的就是变量或者类型在内存中所占存储大小,其单位为字节!
计算数组的大小时:
对于数字型的数组,比如代码中的int型数组,sizeof是这样计算的:(每个元素的大小 ✖ 元素个数),因此代码中int arr[10]
这个数组计算出来的结果是40字节,因为每个元素的大小是int型4个字节,一共10个元素,故而一共是40个字节。
对于字符型数组,比如代码中的char cha[] = "hello c";
,因为字符串其末尾会自动加上一个结束符“\0”,因此cha[]中实际的字符是这样的:hello c\0
,其中空格算一个字符,\0算一个字符,一共8个字符,而一个字符所占空间为1个字节,因此一共有8个字节。
另需注意,sizeof并不是一个函数,而是一个操作符,因此对于一个具体的变量来说,比如a吧,sizeof a
这样的不加括号的表述也是正确的,但为了让代码更清晰明确,最好还是加上括号。