//指针变量进行值传递,实参赋值给形参,会在栈区申请一个局部的指针变量,和外面实参是两个变量
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p, "hello world");
}
int main()
{
char *str=NULL;
getmemory(str);
printf("%s",str); //一直未NULL,多次调用会造成内存空间泄漏,无法释放
free(str);
return 0;
}
这样操作每调用函数一次都会泄露一块内存,str一直为NULL;
//要想改变实参的值,则需传递实参的地址,通过解指针来改变实参的值
void getmemory(char **p)
{
*p=(char *) malloc(100);
strcpy(*p,"hello world");
}
int main()
{
char *str=NULL;
getmemory(&str);
printf("%s",str);
free(str);
return 0;
}
使用指针变量的地址作为参数传入函数,函数中申请的空间的地址会赋值str和临时变量*p,释放时会释放同一块内存空间;