C - 如何初始化未知大小的2d数组[关闭]

问题描述 投票:-2回答:4

要求我有一个2d数组的int,包含3列和未确定的行数。如何创建一个数组,以便我可以根据需要添加新行?

c pointers dynamic-memory-allocation
4个回答
2
投票

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

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

int *array1;

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

row_type *array2;

每行是三个整数。

typedef int row_type[3];

但是,您可以在没有类型别名的情况下编写它:

int (*array2)[3];

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

然后你可以用惯用的方式为它分配内存:

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

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];

0
投票

您可以使用3元素数组列表(将其视为列) - 这可能是简单的单链表,定义类似于:

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

或者是一个3元素数组的数组,它将使用realloc()函数增长。


0
投票

我肯定会使用struct和pointer来创建一个链表。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.