#include<stdio.h>
#include<stdlib.h>
void get_string(char **p)
{
*p="hello world";
}
int main(void)
{
char *str = NULL;
get_string(&str);
printf("%s\n",str);
}
void get_string(char *p)
{
//printf("%p\n",&p);
p="hello world";
}
int main(void)
{
char *str = NULL;
//printf("%p\n",&str);
get_string(str);
printf("%s\n",str);
}
上面那个函数能打印出字符串,而下面那个函数不能打印字符串。
一级指针函数原理:
因为在执行函数时,内存会在栈空间里分配空间给函数,而函数执行结束时栈空间会释放,既无法再访问此空间。main 和get_string函数是不同的栈空间。
指针p指向的是“”hello world“它是保存在内存的数据段内,生存周期是main()结束时释放。指针str一开始指向的是一个空的空间,而这个空间在函数内指向了p。当函数结束,p的地址被释放。既str所指的内存无法访问那块区域。
二级指针:
把str指针的地址传给p,经过一次解引,就相当于使str指针直接指向数据段“”hello world“”的地址,所以能在函数结束后能通过指针str打印出字符串。