我有一些数据结构为多维数组,即 double[][]
,我需要将它传递给需要 的单个线性数组的函数double[]
以及用于多维表示的维度元数据。
例如,我可能有一个 3 x 5 多维数组,我需要将其作为 15 元素平面数组以及高度和宽度参数传递,以便函数知道它是 3x5 数组而不是 5x3 数组。
然后该函数将返回平面数组和大小元数据,我需要使用它们将数据转换回多维类型。
我相信平面和多维表示在内存中的数据布局完全相同;唯一的区别是索引操作的执行方式。所以我想通过类型转换而不是复制数组值来进行“转换”。
在总大小相同的多维数组和平面数组之间进行类型转换的最正确和可读的方法是什么?
我其实在编译的时候就知道多维数组的维度是多少了。数组大小不是动态的。
最佳答案
@Maxim Egorushkin 和@ypnos 给出了最正确的方法:double *flat = &multi[0][0];
。它适用于任何像样的编译器。但不幸的是,它不是有效的 C++ 代码并调用未定义的行为。
问题是对于数组 double multi[N][M];
(N
和 M
是编译时常量表达式) , &multi[0][0]
是大小为 M
的数组的第一个元素的地址。所以只对 M
进行指针运算是合法的。看这个其他question of mine了解更多详情。
关于c++ - 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664313/