(char*)malloc(x*sizeof(char))
假设x=8,那么就是申请了8个连续的字节,当然就有8个连续的地址了,但是返回的是首地址。因为空间是连续的,所以可以通过首地址计算其他地址。
比如
char *p=(char *)malloc(8*sizeof(char));
p就指向一个有8个连续空间的首地址,p+1就是第二个空间的地址。简单总结就是申请空间,有多少空间就有多少地址。
此外,一个sizeof(char)表示一个字节的空间,乘以8,表示8个字节空间,在堆(heap)上开辟8个char的连续地址的空间。所以是8个char的地址.
案例分析:被调函数给结构体分配内存
当结构体的内存在被调函数中分配时,要将其传出,有两种方法使用return传出
Man *createMan(int num)
{
Man *tArray = NULL;
tArray = (Man *)malloc(num * sizeof(Man));
if (tArray == NULL)
{
return NULL;
}
return tArray;
}
使用二级指针传出
int createMan(Man **tArray, int num)
{
(*tArray) = (Man *)malloc(num * sizeof(Man));
if (tArray == NULL)
{
return -1;
}
return 0;
}
createMan(&Man1, 3);
参考文献:C/C++ 的思考:int a[10] 和 int *a = malloc(10 * sizeof(int)) 的区别