当你在函数外部需要声明一个指针,然后将指针作为参数传递给接下来调用的函数时,需要注意亮点
1:声明的指针分配了内存
2:声明的是空指针,未分配内存
针对于1情况,用一下方式可以直接实现
void jack(char* ptr)
{
char* p = "abcdefg";
strcpy(ptr,p);
return;
}
int main()
{
char* p = NULL;
p = (char*)malloc(7);
jack(p);
system("pause");
return 0;
}
针对于2,需要有两种方法来实现
方法一:
char *jack(char *p)
{
p = (char *)malloc(100);
return p;
}
void Test(void)
{
char *str = NULL; //申明字符串指针str并让它指向空地址
str=jack(str);
strcpy(str, "hello world");
printf(str);
}
方法二:
第二种方法就是通过二级指针(二级结构体指针的访问通过(*p)->访问)
void jack(char **p)
{
*p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL; //申明字符串指针str并让它指向空地址
jack(&str);
strcpy(str, "hello world");
printf(str);
}
注释:若想把函数内部的成员作为全局访问,应当把其声明为static
int* jack()
{
static int a=3;
return &a;//(生存周期是全局的,程序结束以后才释放,但是作用域仅限于jack函数内部)
}