错误:二进制操作数无效*指向矩阵的指针

时间:2014-09-30 04:23:12

标签: c pointers matrix scanf calloc

我收到错误:第13,20,25,31和36行的二进制*操作数无效。我不知道如何处理指向矩阵指针的指针的动态内存分配。此外,如何使用指向指针的方式将整数存储在矩阵中。另外,我意识到在指针方面有很多简单的方法可以解决这个问题,但我不得使用任何括号,并且函数输入提供给我。

void read_matrices(int **A, int **B, int **C, int *m, int *n, int *p, char *file) {
    FILE *fp = fopen(file, "r");
    if (!fp) {
        fprintf(stderr, "\n Error: file open failed for file '%s'\n\n", file);
        exit(0);
    }

    /* read & output m, n, p */
    fscanf(fp, "%d\n%d\n%d\n", m, n, p);
    printf("\n m: %d\n n: %d\n p: %d\n\n", *m, *n, *p);

    /* allocate memory for A and set values to null */
    A = calloc(m * n, sizeof(int));

    /* read A */
    int i, j;
    for (i = 0; i < *m; i++) {
       fscanf(fp, "\n");
       for (j = 0; j < *n; j++) {
            fscanf(fp, "%d", *(A + i * n + j));
        }
    }

    /* allocate memory for B and set values null */
    B = calloc(n * p, sizeof(int));

    /* read B */
    for (i = 0; i < *n; i++) {
        fscanf(fp, "\n");
        for (j = 0; j < *p; j++) {
            fscanf(fp, "%d", *(B + i * p + j));
        }
    }

    /* allocate memory for C and set values null */
    C = calloc(m * p, sizeof(int));

    /* close FP & free allocated memory */
    fclose(fp);
}

2 个答案:

答案 0 :(得分:0)

有点难以理解你在该函数中做了什么,但似乎你只需要更好地理解C中的指针。

对于这一行:

A = calloc(m * n, sizeof(int));

这是在尝试将两个指针相乘,但我假设你想要将它们指向的值相乘,所以你需要在m和n前加一个*取消引用它们(并获得它们的价值)。

对于A的赋值,你现在要做的是,指定一个指向指针&#34;的指针,这是不可能的。你需要通过在它前面添加一个*以获得它所指向的指针来引用A,然后你还应该将calloc的结果转换为(int *)以匹配你指定的内容。

示例:

*A = (int*)calloc(*m * *n, sizeof(int));

相同的规则适用于代码中的其他错误。

答案 1 :(得分:0)

让我们看看你的第一个错误。涉及的变量声明为int *m, int *n,因此指向整数。

第13行:

A = calloc(m * n, sizeof(int));

错误是由m * n引起的。你说的是指针m乘以指针n。这是没有意义的。您可能意味着将指向的值乘以这些指针:(*m) * (*n)

说实话,我不明白为什么你首先提出了mn指针。

此外,A被声明为指针的指针。这可能意味着您还需要*A

我建议你阅读传值和传递地址。