【问题标题】:Assigning a 2d array pointer parameter to a local array pointer variable将二维数组指针参数分配给局部数组指针变量
【发布时间】:2020-08-21 19:56:26
【问题描述】:

对于如何将二维数组指针参数分配给本地二维数组指针变量,我有点困惑。检查下面的代码。

#define N   5
#define M   6

void print(int (*arr)[M][N]) {

    int *localArr[M][N];

    localArr = arr;  //error C3863: array type 'int *[6][5]' is not assignable
    //localArr[0][0] =1; and so on.
}

int main()
{

    int Array1[M][N];
    print(&Array1);         
}

【问题讨论】:

  • 查看arr的声明类型和localArr的声明类型。看到有什么不同吗?
  • arrlocalArr 有不同的类型。 arr 是指向 int 数组的指针,而 localArr 是指向 int 的指针数组。
  • 想想括号...
  • 谢谢,还有其他最佳方法吗?就我而言,超速至关重要。
  • @Someprogrammerdude 你能画出这两个数组来可视化它们吗?我很困惑。

标签: c++ arrays pointers parameter-passing


【解决方案1】:

本地声明必须是这样的,

 int (*localArr)[M][N]; //pointer to an MxN array
 //int * localArr[m][N];//An MxN array of pointer to int

【讨论】:

  • 您好,谢谢,我明天去看看。您能否提出一种更简单或最佳的方法将二维数组传递给局部函数变量?我不喜欢偏移计算的想法..
  • 如果您知道确切的大小(M & N),我认为指向数组的指针是正确的方法,因为编译器知道大小并在编译期间捕获任何错误。
【解决方案2】:

你想达到什么目标?如果您只想打印二维数组,那为什么不使用这种方法呢?

void print(int localArr[M][N]) {

    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            cout << localArr[i][j];
        }
    }
}

如果有一些限制,那么 Nitheesh 是对的!

【讨论】:

  • localArr 实际上是一个类变量,被许多方法使用。
【解决方案3】:

如果我们改变尺寸以使其更容易适应:

#define M 2
#define N 3

然后在某种程度上,变量arr 是这样的:

+-----+ +--------+--------+--------+--------+------ --+--------+ | arr | ---> | [0][0] | [0][1] | [0][2] | [1][0] | [1][1] | [1][2] | +-----+ +--------+--------+--------+--------+------ --+--------+

arr 是一个指针。它指向一个数组数组,其中每个元素都是一个int

这意味着您可以取消引用 arr 以获取它所指向的内容,然后对其使用数组索引来获取 int 值:

int value = (*arr)[0][1];

现在如果我们改用localArr,它更像

+----------------+----------------+---------------- -+----------------+----------------+-------------- --+ | localArr[0][0] |本地Arr[0][1] | localArr[0][2] |本地Arr[1][0] |本地Arr[1][1] |本地Arr[1][2] | +----------------+----------------+---------------- -+----------------+----------------+-------------- --+

localArr 是一个数组数组,其中每个元素都是一个int *

所以你需要一个int * 来获取单个元素:

int *pointer = localArr[0][1];

【讨论】:

  • 谢谢伙计,明天我会和他们一起玩,找到最适合我需要的东西。
  • 我从一开始真正想要的是传递数组的内存地址(指针)。所以,我相信,正如 NitheeshGeorge 所建议的那样,arr 声明是正确的选择。
  • @Maverick 就我个人而言,我宁愿使用std::array,如果可能的话,使用引用而不是指针。
猜你喜欢
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多