函数参数传递的只能是数值,所以当指针作为参数传递时,传递的是指针的具体值,而不是一个地址。
#include <stdio.h>
void GetMemory(char *p,int num)
{
p=(char*)malloc(sizeof(char)*num);
}
void main()
{
char *str=NULL;
GetMemory(str,100);
strcpy(str,"hello");
printf(str);
}
这样的一段代码程序会崩溃,因为并没有成功给str这个指针开辟一块空间,它指向的仍然是NULL。GetMemory中的P变量是临时申请的一个指针变量,当str传值进来(NULL)时,p指向NULL,除此之外,没做任何改变。当运行malloc函数后,也只是将malloc返回的的指针地址赋给了p,并不能传递给str。所以这里就需要用指针的指针了。
#include <stdio.h>
void GetMemory(char **p,int num)
{
*p=(char*)malloc(sizeof(char)*num);
}
void main()
{
char *str=NULL;
GetMemory(&str,100);
strcpy(str,"hello\n");
printf(str);
}
这样的话就可以成功为指针开辟一块空间了,这个时候就是将指针变量str的地址传递了过去,而不是将指针变量的值(NULL)传递了过去,因此就可以改变str的指向了。