对不起,我没有理解为何要使用二级指针
时间: 2024-05-06 20:16:40 浏览: 7
没关系,让我再解释一下。
在 C 语言中,函数参数传递是通过值传递的方式进行的,这意味着如果我们想要修改函数外部的变量,我们需要传递该变量的指针作为函数参数。如果我们要修改指针本身所指向的变量,则需要传递指向指针的指针。
例如,考虑以下函数:
```c
void foo(int* p) {
*p = 42;
}
```
这个函数将一个整数指针作为参数,然后将该指针所指向的整数设置为 42。现在假设我们有一个整数变量 `x`,我们想要通过调用 `foo` 函数来修改它的值。我们可以这样做:
```c
int x = 0;
foo(&x);
printf("%d\n", x); // 输出 42
```
在这个例子中,我们将 `x` 的地址传递给 `foo` 函数,该函数将其解引用并将其设置为 42。
现在考虑一个类似的例子,但这次我们想要传递一个指向指针的指针,以便我们可以修改指针本身所指向的变量。这时候,我们需要使用二级指针:
```c
void bar(int** pp) {
int* p = malloc(sizeof(int));
*p = 42;
*pp = p;
}
int* p = NULL;
bar(&p);
printf("%d\n", *p); // 输出 42
```
在这个例子中,我们定义了一个指向指针的指针 `pp`,然后在函数 `bar` 中分配了一个新的整数,并将其设置为 42。最后,我们将指向该整数的指针 `p` 赋值给了 `pp` 所指向的指针。因此,在 `main` 函数中,我们可以通过解引用 `p` 来访问该整数,并输出其值。
希望这样能更好地解释为什么有时候需要使用二级指针。