sizeof()
sizeof() 定义
sizeof()是一个返回一个对象或者类型所占的内存字节数的操作符,返回的类型为size_t, 定义为 typedef unsigned int size_t;
所以实际上就是无符号整型,可用 %u 、%o 、%x
来输出结果。
*在xcode中,似乎被定义为 typedef long unsigned int size_t;
,需要用%lu
来输出。
sizeof() 用法
基本类型大小
#include <stdio.h>
int main(){
int test_i;
unsigned int test_ui;
short int test_si;
short unsigned int test_sui;
long int test_li;
long unsigned int test_lui;
char test_c;
double test_d;
float test_f;
printf("%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu\n",sizeof(test_i),sizeof(test_ui),sizeof(test_si),sizeof(test_sui),sizeof(test_li),sizeof(test_lui),sizeof(test_c),sizeof(test_d),sizeof(test_f));
}
结果为
4,4,2,2,8,8,1,8,4
Program ended with exit code: 0
(参照C:基本类型)
数组大小
#include <stdio.h>
int main(){
char ac[5]={"abcde"};
char ac2[]={"abcde"};
char ac3[]={"a","b","c","d","e"};
printf("%lu,%lu,%lu\n",sizeof(ac),sizeof(ac2),sizeof(ac3));
return 0;
}
ac
在初始化时被定义了大小,所以超出部分不会被录入。
ac2
是默认大小,录入所有输入字符组成数组,但是实际上输入完成之后,会自动生成一个占位符 \0
,是告诉编译器字符到此结束,所以比预期多一个字符。
ac3
是错误的录入方式,应为 ac3[0]="a"
…