如何在C语言中使用memcpy复制3D数组

5

我有一个三维数组int32_t x[1024][4][256]。我需要将数组的所有元素复制到另一个相同类型和大小的数组int32_t y[1024][4][256]中。

我可以使用memcpy(y, x, sizeof(x));吗?

之后,我能像访问x数组一样访问y数组的元素吗?

1个回答

11

我能使用memcpy(y, x, sizeof(x))吗?

可以。

之后我能像访问x数组一样访问y数组的元素吗?

可以。

需要注意的是,如果您动态分配了数组(例如使用malloc()),则此方法将不起作用。在这种情况下,sizeof()将不再给出数组的大小(它将给出指针的大小),您需要自己跟踪数组维度。


好的,谢谢。我在某个地方读到C语言中的数组是连续元素,所以memcpy可以用来复制数组的所有元素。那么它是否与数组的维数无关?如果我不使用malloc并独立声明变量,例如int32_t x[128][256][1024],我能在C语言中使用它来处理任意维度的数组吗? - user1390048
是的,多维数组只是一个数组的数组。 - Carl Norum
注意:这在C中是安全的,但在C++中不是。我知道@user1390048将问题标记为仅限于C,但值得一提,以防有人想在C++中尝试它。 - Jonathan Grynspan
你能简要告诉我为什么C++不安全吗? - user1390048
memcpy() 只在 C++ 中使用 POD 类型(当然包括 int32_t)时才是安全的。因为更复杂的类型不能通过这种方式进行复制,所以必须使用其他方法,例如 std::copy() 来完成工作。如果想要一直保持代码的一致性和清晰性,始终使用 std::copy() 将有助于防止意外误用 memcpy() - Jonathan Grynspan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接