#include <stdlib.h>
#include <stdio.h>
void testFunc1(int** a){
*a = malloc(2*sizeof(int));
(*a)[0] = 5;
(*a)[1] = 6;
}
void testFunc2(int** a){
*a = malloc(2*sizeof(int));
(*a)[0] = 7;
(*a)[1] = 8;
}
int main(){
int** x = malloc(2*sizeof(int*));
set1(&x[0]);
set2(&x[1]);
printf("value:%d\n", x[0][0]);
printf("value:%d\n", x[0][1]);
printf("value:%d\n", x[1][0]);
printf("value:%d\n", x[1][1]);
return 0;
}
输出:
value:5
value:6
value:7
value:8
可视化工作:
x --> x[0] | x[1]
| |
\/ \/
? ?
您想更改 x[0] (x[1]) 指向的地址。对于能够真正改变它的函数,您必须传递 x[0] (x[1]) 作为参考。由于 x[0] (...) 是指向 int (即 int* )的指针,因此函数的参数应该是指向指向 int 的指针(即 int** 类型)的指针以完成此操作(在 C 中) . 因此,我们用 x[0] 的地址调用 set1。在 set1 中,我们希望将 malloc 返回的地址存储在我们作为参数获得的地址中。所以我们取消引用它并做到这一点。