在C ++中复制多维数组参考

xvtk

我有两个多维数组

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 ...
}

基本上,我希望能够将引用复制到多维数组,以避免使用重复的代码来打印数组内容。上面给了我一个“无效的数组分配”错误。我需要怎么做才能成功复制数组引用?

马可·A

当使用数组作为值时(我说的是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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章