程序一:不能完成内存申请的函数
voidGetMemory(char *p)
{
p=(char*)malloc(100);
}
voidmain()
{
char*str=NULL:
GetMemory(str);
strcpy(str,"HelloWorld");
printf("%s",str);
}
//此程序会奔溃,因为内存并没有动态传递,具体原理图如下:
程序二:利用一级指针申请内存的函数
char *GetMemory(char*p,unsignedintNum)
{
p = (char*)malloc(sizeof(char)*Num)
returnp;
}
int main(void)
{
char *str= NULL;
str = GetMemory(str,100);
strcpy(str,"world");
return 0;
}
原理解释:
现在返回的是_str所指向的内存块,所以str所指向的内存块为100个字节的内存块
函数三:利用二级指针申请内存函数char *GetMemory(char ** p,unsignedint Num)
{
*p = (char*)malloc(sizeof(char)*Num)
}
int main(void)
{
char *str= NULL;
str = GetMemory(&str,100);
strcpy(str,"world");
return 0;
}