#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void change_value(char **value);
int main (void)
{
char *p1 = NULL;
change_value(&p1);
printf("p1 is %s\n",*(&p1));
printf("p1 is %s\n",p1);
free(p1);
}
void change_value(char **value)
{
char **p2 = NULL;
p2 = (char **)value;
*p2 = calloc(1,10);
memcpy(*p2,"testtest",10);
printf("p2 is %s\n",*p2);
}
***************
输出结果:
p2 is testtest
p1 is testtest
p1 is testtest
分析:
p2是指针的指针*p2---->一段内存,
p2,value赋予同一个地址,*p2指向一个内存空间,*p2代表p2这个地址指向的内存空间的地址,可以表示为p2,value---->*p2----->实际内存,函数调用后,value和&p1相同,即value,&p1----->*p2------>实际内存,那么* (&value)即value,可以打印出具体的字符串