在C ++中复制多维数组引用

时间:2014-03-23 12:56:59

标签: c++ arrays

我有两个多维数组

uint8_t arr1 [24][8];
uint8_t arr2 [24][8];

我正在编写一个函数来打印出这些数组的内容,我希望指定函数我想要打印哪个数组。我尝试了以下方法:

void print_array(int n) {
  uint8_t arr[24][8];

  if (n == 1) {
    arr = arr1;
  }
  else if (n == 2) {
    arr = arr2;
  }

  // ... code to print "arr" contents ...
}

基本上,我希望能够将引用复制到多维数组,以避免重复的代码来打印数组内容。上面给出了一个'无效的数组赋值'错误。如何成功复制数组引用需要做什么?

3 个答案:

答案 0 :(得分:4)

当数组用作值(我说的是C数组)时,它的名称代表第一个元素的地址。这意味着您需要以某种方式手动复制内存(memcpy)或者您需要以某种方式使用该指针。

对于第二种选择(建议因为没有涉及复制),这将起作用:

#include <iostream>
using namespace std;

uint8_t arr1 [24][8];
uint8_t arr2 [24][8];

void print_array(int n) {
  uint8_t (*arr)[24][8];

  if (n == 1) {
    arr = &arr1;
  }
  else if (n == 2) {
    arr = &arr2;
  }

  for(int i=0; i<24; i++){
    for(int j=0; j<8; j++)
        printf("\n %d ", (int)(*arr)[i][j]);
  }
}

int main() {

    arr1[0][1] = 3;
    arr1[1][5] = 6;

    print_array(1);
    return 0;
}

直播:http://ideone.com/CvMQfB

另请注意,如果您使用的是 C ++ 11 ,那么您可能会使用std::array,并使用相同的语法完全按照您的想法使用

std::array<int,4> A = {10,20,30,40};
std::array<int,4> B = A; //copy array A into array B

答案 1 :(得分:1)

您可以创建指向数组的指针:

void print_array(int n) {
  uint8_t (*arr)[24][8];

  if (n == 1) {
    arr = &arr1;
  }
  else if (n == 2) {
    arr = &arr2;
  }

  // ... code to print "arr" contents ...
}

答案 2 :(得分:0)

我会做类似的事情:

void print_array(const uint8_t (&arr)[24][8]) {
    for (std::size_t i = 0; i != 24; ++i) {
        for (std::size_t j = 0; j != 8; ++j) {
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

然后将其称为print_array(arr1);print_array(n == 1 ? arr1 : arr2);