首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中复制多维数组引用

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

Stack Overflow用户
提问于 2014-03-23 12:56:58
回答 3查看 460关注 0票数 1

我有两个多维数组

代码语言:javascript
复制
uint8_t arr1 [24][8];
uint8_t arr2 [24][8];

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

代码语言:javascript
复制
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 ...
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-23 13:06:52

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

对于第二种选择(由于不涉及副本),建议这样做是可行的:

代码语言:javascript
复制
#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,完全可以使用相同的语法。

代码语言:javascript
复制
std::array<int,4> A = {10,20,30,40};
std::array<int,4> B = A; //copy array A into array B
票数 4
EN

Stack Overflow用户

发布于 2014-03-23 13:06:17

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

代码语言:javascript
复制
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 ...
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-23 13:29:03

我会做这样的事情:

代码语言:javascript
复制
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);。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22591216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档