我有一个2d和3d数组,声明如下:
unsigned char twoDArray[2][2];
unsigned char threeDArray[5][2][2];
我用所需的四个值填充了“ twoDArray”,现在我要将其放置在threeDArray的第一个位置:
threeDArray[0] = twoDArray;
我收到一条错误消息“无法分配给数组类型unsigned char [2] [2]”。除了循环遍历2d数组并将每个值一次放置到3d数组中的位置3DArray [0] [row] [col](其中row和col更改以访问每个元素)之外,还有什么方法可以进行此赋值在我的2d数组中)?
谢谢。
答案 0 :(得分:0)
如果使用的是C ++ 11,则可以使用std::array<>
代替支持通过operator=
进行赋值的c样式数组。
std::array<std::array<unsigned char, 2>, 2> twoDArray{};
答案 1 :(得分:0)
对此的最佳解决方案实际上取决于是否可以使用C ++ 11。
如果您必须依赖C ++ 11之前的版本,则必须这样做,就像您在C中这样做一样:
使用memcpy
将数组的内存复制到另一个内存中。这是容易出错的,因为它缺乏类型安全性,所以一个错误的数字和繁荣的未定义行为。
使用C ++ 11,您可以使用std::array
,它使一切变得更容易,更易读且更安全,我为您提供了两种方法的解决方案:
#include <cstring>
#include <array>
int main() {
{
unsigned char twoDArray[2][2];
unsigned char threeDArray[5][2][2];
std::memcpy(threeDArray[0], twoDArray, 2 * 2);
}
{
using oneDArrayT = std::array<unsigned char, 2>;
using twoDArrayT = std::array<oneDArrayT,2>;
twoDArrayT twoDArray{};
std::array<twoDArrayT,5> threeDArray{};
threeDArray[0] = twoDArray;
}
}