sizeof用来求参数(类型或变量)的大小。

指针:指针的大小是一个定值,void *p;32位下sizeof(p)=4;64位下sizeof(p)=8;

数组:如果数组预分配N,即int array[N],则sizeof(array)=N*sizeof(int);如果数组没有预分配数量,则大小由具体值决定。int array[] = {1, 2, 3},则sizeof(array)=3*sizeof(int)。注意,如果是char型数组,要注意隐藏的'\0'。

32位下char, short, int, float, long, double的大小分别为1,2,4,4,8

结构体:当结构体内的元素长度都小于处理器的位数时,便以结构体里最长的数据元素为对齐单位。否则就以处理器的位数为对齐单位。空结构体或空类的大小为1。

sizeof的主要用途:

1.动态分配: int* p = (int*)malloc(100*sizeof(int));

2.内存值初始化:memset(p,0,sizeof(p));

3.IO读取:fread(p, sizeof(int),100,fd);