要求我有一个2d数组的int,包含3列和未确定的行数。如何创建一个数组,以便我可以根据需要添加新行?
如果您对数组的动态分配有基本的了解(比如整数数组),那么二维数组就只是一个行数组。
要处理动态确定长度的整数数组,可以使用指向int
的指针:
int *array1;
因此,对于您的二维数组,请使用指向行的指针:
row_type *array2;
每行是三个整数。
typedef int row_type[3];
但是,您可以在没有类型别名的情况下编写它:
int (*array2)[3];
它被读作“array2是一个指向3个int
数组的指针”。
然后你可以用惯用的方式为它分配内存:
array2 = malloc(rows * sizeof(*array2));
您可以考虑使用原始三倍大小的普通数组。例如:
int * create_array(int n)
{
int *array = malloc(sizeof(int) * 3 * n)
return array;
}
然后将其用作:
// simulate array[y][x]
int value = array[x + y * 3];
您可以使用3元素数组列表(将其视为列) - 这可能是简单的单链表,定义类似于:
typedef struct _list_t
{
int m_rows[3];
struct _list_t * m_next;
} list_t;
或者是一个3元素数组的数组,它将使用realloc()
函数增长。
我肯定会使用struct和pointer来创建一个链表。
typedef struct int_list {
int i[3];
struct int_list *next;
} List;
因此,当您需要新行时,只需使用malloc()添加新节点。如果要从链接列表中删除节点,请使用free()。