使用二级指针传参的应用场景
在C语言中,通过传递指针(一级指针)可以修改函数外部的变量。要传递二级指针作为参数主要用于一下两种情况。
1. 动态内存分配
如果你需要在函数内部动态分配内存,并希望在函数外部使用分配的内存,那么你需要传递一个指向指针的指针(二级指针)。在函数内部,可以通过修改指针的值来分配内存,并在函数外部保留对该内存的访问权限。
void allocateMemory(int **ptr){
*ptr = malloc(sizeof(int));
if (*ptr != NULL){
**ptr = 42;
}
}
int main(){
int *ptr = NULL;
allocateMemory(&ptr);
if (ptr != NULL){
printf("%d\n", *ptr); //输出42
free(ptr); //用完释放内存
}
return 0;
}
2. 修改指针本身的值
有时候希望在函数内部修改指针本身的值,使其指向不同的内存地址。这时需要传递一个指向指针的指针,以便在函数内部修改指针的值对外部函数可见。
void updatePointer(int **ptr){
int *newPtr = malloc(sizeof(int));
if (newPtr != NULL){
*newPtr = 42;
*ptr = newPtr;
}
}
int main(){
int *ptr = NULL;
updatePointer(&ptr);
if (ptr != NULL){
printf("%d\n", *ptr); //输出42
free(ptr); //用完释放内存
}
return 0;
}