C: populate multiple dimension array C: 填充多维数组

10 浏览
0 Comments

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中。

0
0 Comments

问题:如何填充一个多维数组?

在这个问题中,原作者想要填充一个多维数组,但是在尝试使用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");
}

然而,这种方法并不是一个真正的二维数组,而是一种查找表的形式。它比动态分配的二维数组要慢得多,而且更容易出错。在这种情况下,没有必要使用基于指针的查找表。不要写慢而危险的代码,当你可以写出快速而安全的代码来实现相同的目标。

以上是对问题的原因和解决方法的整理。

0