C语言中三重指针的目的

时间:2018-10-17 06:41:50

标签: c pointers

虽然我看到了一些线程,但我无法理解三重指针背后的含义,因为似乎没有它们也可以做同样的事情。

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成为2D数组。如果我使用malloc过程并将其放入main,则不再需要三重指针。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

  

如果我使用malloc过程并将其放入main,则不再需要三重指针。

有两种方法可以将变量传递给函数:按值或按引用。当您传递变量的引用时,就可以对其进行修改。

示例:

void fun(int a) {
   a = 42; // Does nothing
}

int b = 9;
fun(b);
// b is unchanged.

void fun(int *a) {
   *a = 42;
}

int b = 9;
fun(&b);
// b equals 42.

您的变量恰好是int **类型的,当您传递此变量的地址(引用)时,这使其成为int ***