【发布时间】:2018-10-17 06:41:50
【问题描述】:
虽然我在这方面看到了一些线程,但我无法理解三重指针背后的含义,因为似乎没有它们也可以做同样的事情。
void Reading(int *N, int ***M) {
printf("Input an integer N: \n");
scanf("%d", N);
*M = malloc(N * sizeof(int*));
int i;
for (i = 0; i < N; i++)
*(*M+i) = malloc(N * sizeof(int));
printf("Input N*N integers that will form a matrix \n");
int i, j;
for (i = 0; i < *N; i++)
for (j = 0; j < *N; j++)
scanf("%d", &((*M)[i][j]));
}
此代码使 **M 成为二维数组。如果我将 malloc 过程放入 main 中,则不再需要三重指针。有人可以解释一下为什么会这样吗?
【问题讨论】:
-
它的目的是允许双指针的地址在函数内改变而不返回值(它是双指针的模拟传递引用)。成为 C 语言中的 3 星程序员 并不是一种恭维。更好的设计是将
Reading键入为int **Reading(...)并在Reading中声明M,分配、验证然后返回M并分配给调用者中的双指针。