C: populate multiple dimension array C: 填充多维数组
C: populate multiple dimension array C: 填充多维数组
我有几个数字要插入到Matrix
中。\n这是我一个一个获取所有数字的方法:\n
int i, n; int ch; int *arr; int dimension; int numbers = 0; char str[512]; // 用户输入。 fgets(str, sizeof str, stdin); for (i = 0; i <= (strlen(str)); i++) { if (str[i] != '\0' && !isspace(str[i])) { int num = atoi(&str[i]); numbers++; if (i == 0) { dimension = num; arr = allocatearraysize(dimension); } // 这里我想把当前数字添加到我的`Maxtix`中。 } } free(arr); int* allocatearraysize(int size) { return (int *)malloc(size * size * sizeof(int)); }
\n所以我尝试:\n
arr[0][0] = num;
\n只是为了看看是否有效,但是得到了一个错误
:\n
\n表达式必须具有指向对象的类型\n
\n编辑\n所以如果我的输入是2 1 2 3 4
:\n第一个数字
(2
)表示我的matrix
应该是2x2
的,并且我期望在这个数字
(2
)之后有4个数字
。\n如果数字
的数量与第一个数字
不匹配,例如:\n
3 1 2 3 4
\n这里的第一个数字
是3,所以在这个数字
之后,我期望有9个数字
,所以在这种情况下,我只想打印错误
消息。\n但无论如何,我都想将这些数字
插入到我的Matrix
中。
问题:如何填充一个多维数组?
在这个问题中,原作者想要填充一个多维数组,但是在尝试使用var[i][j]
访问数组元素时遇到了问题。这是因为数组不是一个二维数组,无法使用这种方式访问。
解决方法如下:
int i, j, n; int ch; int **arr; int size; int numbers = 0; char str[512]; fgets(str, sizeof str, stdin); size = atoi(&str[0]); if(size > 1) { arr = (int**) malloc(size * sizeof(int*)) for (i = 0; i < size; i++) arr[i] = (int*) malloc(size * sizeof(int)); // 填充数组元素 arr[i][j] free(arr); } else { fprintf(stderr, "Size must be a valid number"); }
然而,这种方法并不是一个真正的二维数组,而是一种查找表的形式。它比动态分配的二维数组要慢得多,而且更容易出错。在这种情况下,没有必要使用基于指针的查找表。不要写慢而危险的代码,当你可以写出快速而安全的代码来实现相同的目标。
以上是对问题的原因和解决方法的整理。