C-如何初始化未知大小的二维数组

时间:2019-03-21 06:18:58

标签: c pointers dynamic-memory-allocation

要求我具有3列和不确定行数的2d整数数组。如何创建数组,以便可以根据需要添加新行?

4 个答案:

答案 0 :(得分:2)

如果您对数组(例如整数数组)的动态分配有基本的了解,那么二维数组就是行数组。

要处理动态确定长度的整数数组,请使用指向int的指针:

int *array1;

因此,对于二维数组,请使用指向行的指针:

row_type *array2;

每行是三个整数。

typedef int row_type[3];

但是,您可以将其写为不带类型别名的方式:

int (*array2)[3];

,它读作“ array2是指向3 int的数组的指针”。

然后您可以按照惯用的方式为其分配内存:

array2 = malloc(rows * sizeof(*array2));

答案 1 :(得分:0)

您可以考虑使用具有原始尺寸三倍的普通阵列。例如:

int * create_array(int n)
{
    int *array = malloc(sizeof(int) * 3 * n)
    return array;
}

然后将其用作:

// simulate array[y][x]
int value = array[x + y * 3];

答案 2 :(得分:0)

您可以使用3元素数组的列表(将其作为列进行处理)-甚至可以是简单的单链接列表,其定义类似于以下内容:

typedef struct _list_t
{
    int m_rows[3];
    struct _list_t * m_next;
} list_t;

或由3个元素组成的数组,它们将使用realloc()函数增长。

答案 3 :(得分:0)

我肯定会使用struct和指针来创建链接列表。

typedef struct int_list {
    int i[3];
    struct int_list *next;
} List;

因此,当您需要新行时,只需使用malloc()添加新节点。如果要从链接列表中删除节点,请使用free()。​​