在之前的文章 《二级指针的作为函数形参的深入理解》 我们分析了二级指针的使用,这里我们再简单的的做个小结。
一级指针作为入参一级指针作为入参,在函数内部是要对该指针进行 简介引用,操作一级指针指向的内存,也就是这个入参的是直接 引用和修改的。不能作为 内存地址返回。 ,如果想要返回一个地址,可以直接让函数进行返回。
// 错误 -- 指针是[传值调用]
int func(char *p)
{
char *a = malloc(10*sizeof(char));
p = a; // 指针是传值调用,这里的p其实是 入参 p的 副本,并不是p
return 0;
}
// 正确
char *func(int size)
{
char *p = malloc(10*sizeof(char));
return p;
}
二级指针入参
二级指针作为入参,目的就是为了返回一个地址。这样会比较绕,但是非常适合于,既能返回地址,又能返回一个结果的情况。
int func(char **p, int size)
{
char *a = malloc(10*sizeof(char));
if(a == NULL){
return -1;
}else{
*p = a;
return 0;
}
}
// 我们在调用时,一般不用传入一个二级指针,而是传入一个一级指针的地址,
int main(void)
{
char *p;
int rc;
rc = func(&p, 10);
return rc;
}
小结
1、入参为一级指针,就是对指针指向的内存直接操作。
2、入参为二级指针,可以通过形参返回一个地址,如果觉得绕,不方便理解,可以通过函数直接返回。



