我正在研究一种简单的 lisp 风格的预处理器语言。 在 API 中,我希望用户能够将任何维度和大小的数组传递给可以使用该语言进行操作的预处理器。 目前我有一个枚举类型;
typedef enum LISP_TYPE
{
LT_UINT,
LT_FLOAT,
LT_ARRAY
...,
...
} _LISP_TYPE;
我很难找到一种有效且易于使用的方法来存储数组并访问它们。 我还专门为数组使用了另一种结构;
typedef struct _lisp_array
{
LISP_TYPE type;
unsigned int length;
void* data;
} lisp_array;
当预处理器看到一个类型为 LT_ARRAY 的列表原子时,它会将其 void*
(lisp 术语中的 cdr)转换为上述结构。我遇到问题的地方是弄清楚如何访问多维数组。我想过计算一个步长值来遍历数组,但我能保证所有传递的数组都会连续分配吗?
感谢任何帮助。
最佳答案
C 内置(单维和多维)数组保证以行优先模式存储在一个连续的内存区域中。但是,这可能无法回答您的问题。 _lisp_array::data 成员指向的数据结构的预期布局是什么?
关于c++ - 在c中存储多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4784844/