【发布时间】:2016-01-06 21:21:44
【问题描述】:
我有这样的代码:
void print_matrix(int **a, int n) {
int i, j;
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++)
printf("%d\t", *(a+i*n+j));
putchar('\n');
}
}
int main () {
int matrix[3][3];
insert (matrix); /* Function that reads Matrix from stdin */
print_matrix(matrix, 3);
return 1;
}
我收到 GCC 错误:
预期为“int **”,但参数类型为“int (*)[3]”
我阅读了所有相关主题,但仍然找不到问题的答案,所以在将其标记为重复之前,请阅读它。
指针不是数组,我明白这一点。我在某处读到元素不是连续的,在这种情况下,这可能会发生:111 222 333 -> 111 是第一个 int 数组的地址,222 是第二个 int 数组的地址,333 是第三个 int 数组的地址。但如果是这样的话,我不明白为什么 GCC 会给我一个错误。
首先,我希望有人能证实我所读到的内容是真实的。如果有人能给我答案,我将不胜感激。
请注意,我知道 *(a+i*n+j) 是不正确的,以防矩阵的内存不是连续的。
最好的问候。
【问题讨论】:
-
类型不等价,
int [3][3]是 9 个整数的连续存储,而int **是指向(可能是指针数组)指针的指针。跨度> -
你能告诉我有什么可能的解决办法吗?
-
但是你解引用错了,你能写
a[j][i]吗? -
我明白为什么它现在不起作用了,但我不知道除了 print_matrix(int a[][3], int n) 之外还有什么可能的修复方法。