1、sizeof(类型名或变量名)的作用是计算一个类型或一个变量的大小是多少字节。例如:
struct S
{
char c;
char arr[2];
};
S s1;
float f=1.1;
sizeof(float)=4,sizeof(f)=4;
//sizeof(struct S)是计算类型struct S所有成员的总大小即sizeof(c)+sizeof(arr)=1+2=3
sizeof(struct S)=3;
//因为变量的大小与它的类型的大小相等,所以sizeof(s1)=sizeof(struct S)=3
sizeof(s1)=3;
2、malloc是一个库函数。malloc(size);的作用是在堆中分配一块大小为size的内存,然后返回这个内存块的首地址,但它返回的是一个void*型指针,因此需要对返回值进行类型转换。例如:
int *pint=(int*)malloc(sizeof(int));
//假设首地址为100,则通过指针ps可以使用的堆内存地址为100,101,102(因为sizeof(struct S)=3,所以malloc分配了3个字节的内存),
//而ps指向首地址100。
struct S *ps=(struct S*)malloc(sizeof(struct S));
3、用malloc分配的内存必须用free(指针变量名)来释放,free是另一个库函数。例如:
//释放上面由struct S *ps=(struct S*)malloc(sizeof(struct S));语句分配的3个字节的内存。
free(ps);
搞懂了以上3点,你就不难看懂你的代码了。
申请空间,p所指向那个空间的地址,也就是首地址