要求我具有3列和不确定行数的2d整数数组。如何创建数组,以便可以根据需要添加新行?
答案 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()。