我有两个多维数组
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 ...
}基本上,我希望能够复制对多维数组的引用,以避免重复代码来打印数组内容。上面给出了一个“无效数组赋值”错误。要成功复制数组引用,我需要做什么?
发布于 2014-03-23 13:06:52
当数组用作值时(我指的是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发布于 2014-03-23 13:06:17
您可以创建指向数组的指针:
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 ...
}发布于 2014-03-23 13:29:03
我会做这样的事情:
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);。
https://stackoverflow.com/questions/22591216
复制相似问题