有两个方法:
1.用return的方法
char *GetMemory(char * p, int num)
{
p = (char *)malloc(num*sizeof(char));
return p;
}
int main()
{
char *str = NULL;
str = GetMemory(str, 10);
strcpy(str, "hello");
free(str);
return 0;
}
2.用二级指针
void GetMemory(char **p, int num)
{
* p = (char *)malloc(num * sizeof(char));
}
int main()
{
char *str = NULL;
GetMemory(&str, 10);
strcpy(str, "hello");
free(str);
return 0;
}
下面是关于二维数组形参实参的一些替代
数组参数 等效的指针参数
数组的数组:char a[3][4] 数组的指针:char (*p)[4] (char a[][4]后面的不能删掉,也就是每次+1时,其所移动的大小)
指针数组:char *a[5] 指针的指针:char **p
C语言中,当一维数组作为函数参数的时候,编译器总是把它解析成为一个指向其首元素首地址的指针,这条规则不是递归的,只有一维数组才这样,当数组超过一维时,将第一维改写为指向数组首元素首地址的指针后,后面的维也不可改写,如:a[3][4][5]作为参数时可以改写为(*p)[4][5].
阅读(3310) | 评论(0) | 转发(0) |