2d动态数组(在C中),每行具有特定的行号和不同的列大小
如何在每行中创建具有特定行号和不同列大小的2d动态数组(在C中)?
例如:这是一个数组(3 =行)
|1 | 4 | 5 | |3 | |6 | 2 |
第1行 – 3列
第2行 – 1列
第3行 – 2列
我希望我的程序在运行时向用户询问每一行以给出cols的数量。 我如何制作这样的数组?
如果你想要一些动态并且不关心持续访问时间,你可以创建一个链表列表,否则你别无选择,只能分配一些有足够内存的空间并用realloc保持更新。
您可能想要的是使用指针指针并为每行分配足够的内存。 例:
int ** array = calloc(sizeof(*array), NUMROWS); array[0] = calloc(sizeof(**array), 3); // 3 fields array[1] = calloc(sizeof(**array), 1); // 1 field array[2] = calloc(sizeof(**array), 2); // 2 fields
你需要一个指针数组:
int *ptr_array[3];
然后对于每一行,您需要分配内存:
int map_array[3] = {3,1,2} int i; for(i = 0; i < 3; i++){ ptr_array[i] = malloc(sizeof(int)*map_array[i]); }
如果您需要动态行数,则应该将第一部分作为:
int **ptr_ptr_array; (*ptr_ptr_array) = malloc(sizeof(int *)*3);
好好回收记忆。