我有两个多维数组
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 ...
}
基本上,我希望能够将引用复制到多维数组,以避免重复的代码来打印数组内容。上面给出了一个'无效的数组赋值'错误。如何成功复制数组引用需要做什么?
答案 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;
}
另请注意,如果您使用的是 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);
。