先看问题程序:
#include <stdio.h>
void func1(char *p)
{
p = "4567";
}
void func2(char **pd)
{
*pd = "5678";
}
main()
{
char *ptr = "1234";
func1(ptr);
printf("%s\n", ptr);
char *ptrd = "2345";
func2(&ptrd);
printf("%s\n",ptrd);
return 0;
}
看了程序,估计您也可能也会猜到我要问的问题了,为什么func2可以把指针地址带出来,而func1却不可以。
这里请不要简单的解释说,因为func1结束了,所以p指针的生命期终止被回收。也不要解释说因为编译器有对入参指针有个备份_p的说法。这里,我只是想搞清楚,为什么二级指针可以,而一级指针却不可以。