我收到錯誤:在第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);
}
謝謝,我不明白當我想使用它們的值時,我不得不解除引用m,n和p。另外,添加一個指向A的引用可以將它轉換爲原始指針或原始值? – user3339703 2014-09-30 04:43:02
當您解引用A時,您將獲取底層整數指針。這段代碼有點蹩腳,但如果你通過read_matrices(&A,....)調用這個函數(而A是一個int指針[int *]),那麼函數內的A將會修改A的值是一個指針),將外部A有效地設置爲您在函數中分配的矩陣。 – mukunda 2014-09-30 04:46:50
對於'void *'指針,在C語言中不需要鑄造 – 2014-09-30 05:03:52