如何访问多维数组的整行? 例如:
int logic[4][9] = {
{0,1,8,8,8,8,8,1,1},
{1,0,1,1,8,8,8,1,1},
{8,1,0,1,8,8,8,8,1},
{8,1,1,0,1,1,8,8,1}
};
// I want everything in row 2. So I try...
int temp[9] = logic[2];
我的尝试抛出错误:
数组初始化需要大括号
我知道我可以使用FOR循环检索行,但是我很好奇是否有更明显的解决方案。
答案 0 :(得分:7)
这不是数组/指针在C ++中的工作方式。
该数组存储在内存中的某个位置。为了引用相同的数据,您需要一个指向数组开头的指针:
int* temp = logic[2];
或者,如果您需要该阵列的副本,则必须分配更多空间。
静:
int temp[9];
for (int i = 0; i < 9; i++) {
temp[i] = logic[2][i];
}
动态:
// allocate
int* temp = new int(9);
for (int i = 0; i < 9; i++) {
temp[i] = logic[2][i];
}
// when you're done with it, deallocate
delete [] temp;
或者因为你正在使用C ++,如果你不想担心所有这些内存和指针,那么你应该使用std::vector<int>
来表示动态大小的数组,std::array<int>
来表示静态大小的数组。 / p>
#include <array>
using namespace std;
array<array<int, 9>, 4> logic = {
{0,1,8,8,8,8,8,1,1},
{1,0,1,1,8,8,8,1,1},
{8,1,0,1,8,8,8,8,1},
{8,1,1,0,1,1,8,8,1}
}};
array<int, 9> temp = logic[2];
答案 1 :(得分:4)
除了将数组衰减为指针外,您还可以将其绑定到引用:
int (&temp)[9] = logic[2];
这样做的一个优点是它允许您使用C ++ 11基于范围的循环:
for (auto t : temp) {
// stuff
}
答案 2 :(得分:2)
直接分配不起作用。 C ++不允许这样做。充其量,您可以将它们指定为指向相同的数据 - int *temp = logic[2]
。你需要一个for循环或类似下面的东西。
我相信这会奏效:
int temp[9];
memcpy(temp, logic[2], sizeof(temp));
但我通常建议改用std::vector
或std::array
。