C语言 如何创建具有动态行和列的多维数组



我正在尝试编写一个具有动态行和列(多维(的数组。

这是我尝试过的:

#include <stdio.h>
#include <stdlib.h>
#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))
int main() {
int size, q = 0;
// get arr size from stdin
scanf("%d", &size);
int *arr[size];
for (int i=0; i<size; i++) {
int len, element = 0;
// get length of column from stdin
scanf("%d", &len);
arr[i] = malloc(len * sizeof(int));
for(int j=0; j<len; j++) {
// get each column's element from stdin and append to arr
scanf("%d", &element);
arr[i][j] = element;
}
}
for (int i=0; i< LEN(arr); i++)
printf("%dn", LEN(arr[i]));
}

标准丁:

2
3 4 5 6
4 1 2 3 4

输入的第一行是要存储在arr(2(中的数组的大小/数量, 以下行以列的大小 (3, 4( 开头,后跟要在每列中存储的元素 (4 5 6, 1 2 3 4(。

标准输出:

2
2

当我运行这个程序时,输出为 2,这意味着每列的长度为 2,这是无意的。我正在寻找一种解决方案来输出正确的列长。我做错了什么?

预期的标准是:

3
4
arr

是一个数组,因此sizeof(arr)会按预期为您提供数组的大小(以字节为单位(。

但是,arr[i]不是一个数组。 它是一个指针,特别是一个int *。 因此,sizeof(arr[i])为您提供了int *的大小(以字节为单位(。

动态分配内存时,需要跟踪分配的空间量。 您可以通过维护一个单独的数组来执行此操作,该数组的大小为每个子数组的大小。

int *arr[size], arr_len[size];
...
for (int i=0; i<size; i++) {
...
arr[i] = malloc(len * sizeof(int));
arr_len[i] = len;
...
}
for (int i=0; i< LEN(arr); i++)
printf("%dn", arr_len[i]));

相关内容

  • 没有找到相关文章

最新更新