用三重指针将数组作为参数

时间:2018-10-13 07:53:41

标签: c++ arrays function pointers

请告诉我使用单,双或三重指针接受数组的函数之间的区别。

示例代码:

int visit(int ***A, int i, int j, int n, int m, int size) {
     (*A)[i][j] = -1;
     size++;
     if(i-1 >= 0 && j-1 >= 0 && (*A)[i-1][j-1] == 1) {
        size += visit(A, i-1, j-1, n, m, 0);
     }
     if(i-1 >= 0 && (*A)[i-1][j] == 1) {
         size += visit(A, i-1, j, n, m, 0);
     }
     if(i-1 >= 0 && j+1 < m && (*A)[i-1][j+1] == 1) {
         size += visit(A, i-1, j+1, n, m, 0);
     }
     if(j-1 >= 0 && (*A)[i][j-1] == 1) {
         size += visit(A, i, j-1, n, m, 0);
     }
     if(j+1 < m && (*A)[i][j+1] == 1) {
         size += visit(A, i, j+1, n, m, 0);
     }
     if(i+1 < n && j-1 >= 0 && (*A)[i+1][j-1] == 1) {
         size += visit(A, i+1, j-1, n, m, 0);
     }
     if(i+1 < n && (*A)[i+1][j] == 1) {
         size += visit(A, i+1, j, n, m, 0);
     }
     if(i+1 < n && j+1 < m && (*A)[i+1][j+1] == 1) {
         size += visit(A, i+1, j+1, n, m, 0);
     }
     return size; 
}

***A是什么意思?

1 个答案:

答案 0 :(得分:0)

  

请告诉我使用单,双或三重指针接受数组的函数之间的区别。

在编译期间,数组(例如int[])将更改为(int*)...

例如,取整数int some_num = 10;

现在,当您突然想要将这些数字存储为数组时,该怎么办,当然int[] some_num_array = { some_num, some_num2, some_num3 }; <-这是最通用的方法... < / p>

如果您了解vectors,则等效向量为:std::vector<int> some_num_array{ some_num, some_num2, some_num3 } ...

您可能已经知道向量的作用,它是一个在容器中存储值的容器,当然它永远不会存储无穷大的值,因为它会消耗您的内存,并且会变得像您的记忆可以处理...

您所询问的int*** A可以解释为std::vector<std::vector<std::vector<int>>> ...

如您所见,它是向量 包含向量 向量 ...

然后,以同样的方式,它也是指针 包含指针 指针 ...

引用运算符(&)用于将指针转换为超级指针等等。在C / C ++中,引用方法允许其他成员和函数分配一个指针。值赋给变量(记住!永远不能赋给变量!)...

如果我们尝试将上面的数字some_num转换为int***,则意味着将非指针变量转换为3级指针,其值将为5 ... { {1}}

因此,换句话说,auto A = new int**(new int*(&some_num));可以称为三维指针(数组),就像您已经看到一个二维数组在其中存储列(索引)。

另一方面,三维数组将多个二维数组存储在其内部()...

  

“ **** A是什么意思?*”

在这里,您可以将人们误以为dereferencing这个术语,而与引用相反,我们一直在谈论这个事实……它 de 引用(逐项减少[因此,在术语内使用 de 的所谓的 pointer-level ))

例如int***,它只是将 A 的值存储在 some_num

但是,另一方面,some_num = ***A;会改变 A 的值,但指针本身会 NOT ,这就是原因为什么***A = some_num;不能被取消引用进行赋值,因为它的被取消引用的值是一个常量字符,它是一个常量... ...(在函数内部还是外部)

因此,最后我要说的最后一点是,使用指针是为了能够取消引用其值(修改值,而不是指针)或创建内存数组指针的级别限制...