gpt4 book ai didi

c - 错误: invalid operands to binary * Pointer to a pointer to a matrix

转载 作者:行者123 更新时间:2023-11-30 17:28:09 24 4
gpt4 key购买 nike

我收到错误:第 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);
}

最佳答案

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

对于这一行:

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

它所做的是尝试将两个指针相乘,但我假设您想要将它们指向的值相乘,因此您需要在 m 和 n 前面加上 * 前缀取消引用它们(并获取它们的值)。

对于对 A 的赋值,您现在要做的就是将一个指针赋给“指向指针的指针”,这是不可能的。您需要通过在 A 前面加上 * 前缀来尊重 A,以获取它指向的指针,然后您还应该将 calloc 的结果转换为 (int*) 以匹配您分配给的内容。

示例:

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

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

关于c - 错误: invalid operands to binary * Pointer to a pointer to a matrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com