当前位置: 首页 > 知识库问答 >
问题:

将数组作为带有三个指针的参数

郭永怡
2023-03-14

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

示例代码:

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个答案

乐正翰
2023-03-14

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

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

例如,取整数int some_num=10

现在当你突然想要将这些数字存储为数组时,你会怎么做,当然int[]some_num_array={some_num,some_num2,some_num3};

如果你知道向量,那么向量等价为:std::向量

你可能已经知道向量的作用了,它是一个容器,在里面存储值,当然它永远不会存储无穷大的值,因为它会消耗你的内存,并且会变得和你的内存所能处理的一样大。。。

你所问的这个,int***A,可以解释为std::vector

正如你已经看到的,它是一个包含向量向量的向量。。。

然后,同样,它也是一个包含指针指针的指针...

参考运算符(

如果我们试图将上面的数字some_num转换为int***,这意味着将一个非指针变量转换为一个三级指针,其值为5<代码>自动A=新整数**(新整数*(

换句话说,int***可以被称为三维指针(数组),就像你看到的二维数组在其行(索引)中存储列一样。

另一方面,三维阵列在其内部(侧面)存储多个二维阵列。。。

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

在这里,你可以用一个术语来混淆人们,这个术语被称为去引用,并且与引用完全相反,我们一直在谈论的事实......它去引用(减少[因此,在术语中使用de]所谓的指针级一一)...

就像这样,some_num=***A ,它只是将A的值存储在某个_num中

但是,***A=some_num;,另一方面,是不同的,它改变了A的值的任何地方,但不是指针本身,这就是为什么(const char)*不能取消引用赋值,因为它的取消引用的值是一个常量字符,这是一个常量......(在函数内部或外部)

所以,最后,我想说,指针的使用要么是能够解引用它的值(修改值,但不是指针),要么是创建一个基于内存的指针级别限制数组。。。

 类似资料:
  • 问题内容: 我有以下功能: 其中,的类型是具有以下定义的接口: 题: 这是真的,和是 通过按引用 ,并且有它的价值被复制? 我认为: 是通过引用的,因为它是一张地图 是一个结构。因此,我应该传递指针以避免复制数据 问题答案: 接口类型只是一组方法。请注意,接口定义的成员未指定接收方类型是否为指针。这是因为 值类型的方法集是其关联的指针类型的方法集的子集 。满嘴 我的意思是,如果您具有以下条件: 然

  • 我创建了2个函数,读取和写入一个路径,声明为: 我创建了一个额外的函数,它将使用路径调用上述函数之一 但是,当作为回调传递给时,编译器会发出以下警告 将“int(const char*,const void,int)”传递给类型为“int()(const char*,void*,int)”的参数的指针类型不兼容 将接受常量指针的函数转换为接受非常量指针的函数会是未定义的行为吗? 我注意到有一个几乎

  • 主要内容:用数组作函数参数在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的 指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。 像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。 有的时候,对于整数、小数

  • 主要内容:关于数组指针的谜题数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以 为例,该数组在内存中的分布如下图所示: 定义数组时,要给出数组名和数组长度,数组名可以认为是一个 指针,它指向数组的第 0 个元素。 在C语言中,我们将第 0 个元素的地址称为数组的首地址。以上面的数组为例,下图是 arr 的指向:

  • 问题内容: 如果我删除in : github.com/creating_web_app_go/main.go:8:不能在http.HandleFunc的参数中使用func文字(类型func(http.ResponseWriter,http.Request))作为func(http.ResponseWriter,* http.Request)类型。 我对Go和指针都很陌生。 所以问题是,为什么必须是

  • 本文向大家介绍指针数组、数组指针、函数指针的区别?相关面试题,主要包含被问及指针数组、数组指针、函数指针的区别?时的应答技巧和注意事项,需要的朋友参考一下 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32