目录
虽然sizeof的书写方法:? ?sizeof(数据类型或是变量名);? ?但sizeof是运算符而不是函数。sizeof的功能是用来计算变量(或数据类型)在当前系统中占用内存的字节数。
当用来计算数据类型时写成:
sizeof(数据类型);
printf("sizeof(char): %d\n", sizeof(char));
printf("sizeof(short): %d\n", sizeof(short));
printf("sizeof(int): %d\n", sizeof(int));
此处的括号必须写上
当用来计算变量名时写成:
sizeof(变量名);
sizeof 变量名;
int a = 1;
int b = 2;
printf("a占用的内存是=%d\n", sizeof(a));
printf("b占用的内存是=%d\n", sizeof b);
此处的括号可省略
先上代码有图有真相
int main() {
char str[] = "HelloWorld";
printf("sizeof(str):%d\n",sizeof(str));
printf("strlen(str):%d\n", strlen(str));
return 1;
}
注:使用strlen需要引入#include <string.h>
运行结果为:? ? ? ? ? ?sizeof(str):11
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?strlen(str):10
显然字符串的长度为10,那sizeof的计算结果为什么是11呢?因为当使用字符数组定义字符串时,对于字符串比如HelloWorld,数组中会自动增加一个终止的元素’\0’,所以sizeof计算的结果为11;而strlen获取字符串长度时只计算字符串开头和终止的元素’\0’之间的字符数(不包括终止的元素’\0’本身)。
int main()
{
int arr[] = {1,2,3,4,5};
printf("sizeof(arr): %d\n", sizeof(arr));
char arr1[] = "HelloWorld";
printf("sizeof(arr2): %d\n", sizeof(arr1));
printf("strlen(arr2): %d\n", strlen(arr1));
return 0;
}
执行结果为:
sizeof(arr): 20
sizeof(arr2): 11
strlen(arr2): 10
当使用sizeof计算指针大小时,32位平台所有类型的指针的占用空间大小都是4个字节,64位平台所有类型的指针占用的空间大小为8个字节。
int main()
{
printf("sizeof(int*): %d\n", sizeof(int*));
return 0;
}
32位执行结果为:sizeof(int*): 4? ? ? 而64位执行结果为:sizeof(int*): 48