c - 在 C 中使用 malloc 动态创建一个二维指针数组

标签 c arrays pointers malloc

这是我正在使用的结构:

struct nodeList//a node structure
{
    int jump;
    int config;
    int level;
    int shifts[200];
    int shift_diff[200];
    struct nodeList *next;
};

我想创建一个可用于引用此类结构变量的二维指针数组,即该数组的任何元素都可以分配一个指向结构变量的指针。如果可能的话,我更愿意使用 malloc 动态创建数组。任何指针(双关语意想不到的)将不胜感激。

最佳答案

首先请三思程序设计。您真的需要一个二维指针数组,每个指针指向一个结构,每个结构包含许多项吗?这些要求相当复杂:如果你能简化它们,你的程序就会好得多。

由于当前的要求,您会注意到指针和数组语法将变得非常复杂,这是要求的罪魁祸首,比 C 语言更复杂。

考虑使用二维结构数组,或使用某种对您的给定情况有意义的基于指针的 ADT(链表、队列、图、二叉树?等等)。


话虽如此,指向结构的指针的二维数组:

struct nodelist* array[X][Y];

要动态分配它,您需要一个指向结构指针的二维数组的指针:

struct nodelist* (*array_ptr)[X][Y];

然后将其分配给动态分配的指向结构的二维指针数组:

array_ptr = malloc( sizeof(struct nodelist*[X][Y]) );

...
free(array_ptr);

请注意,除非二维数组没有像上面那样分配,否则在相邻的内存单元中,它不是一个数组


编辑。顺便说一句,如果你想避免数组指针产生的奇怪语法,有一个技巧。使用上面的代码,您必须将数组寻址为

(*array_ptr)[i][j];

意思是:“在二维数组中,给我项目编号 [i][j]”。

如果你省略了类型的最内层维度,你可以简化这个语法:

struct nodelist* (*array_ptr)[Y]; // pointer to a 1D array

malloc 将是相同的,但您现在可以像这样使用它,这可能更直观:

array_ptr[i][j];

意思是:“在数组编号 i 中,给我项目编号 j”。你在这里假设相邻内存中有一个数组数组,这是真的。

关于c - 在 C 中使用 malloc 动态创建一个二维指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778149/

相关文章:

c - 一个 friend 给我发了一段我不明白的片段。这是如何运作的?

c - memcpy 和二维数组

c++ - 将整数文字赋给指针?

c - 从缓冲区获取字符串

C 指针在函数中引用另一个指针

c - 如何在 argc 和 argv 中分配字符串

python - 将 Numpy 数组映射到字符列表

php - 从 2 个数组中获取唯一值

C 结构和指针程序在编译时什么都不做。不显示错误或警告

c++ - 对指针及其内存地址的混淆