【发布时间】:2014-04-28 18:37:04
【问题描述】:
这是我的任务: arrPrintMatrix(int *matrix, int m, int n):打印 matrix[m][n] 以表格形式显示在屏幕上。
这是我的代码:
#include <stdio.h>
#include <malloc.h>
int main() {
void arrPrintMatrix(int *matrix, int m, int n);
int matrix[2][3] = {{5, 10 , 15}, {0, 2, 4}};
int *ptr;
ptr = &matrix[0][0];
arrPrintMatrix(ptr, 2, 3);
return 0;
}
void arrPrintMatrix(int *matrix, int m, int n) {
int i, j;
for (i = 0; i < m; i++) {
printf("\n");
for (j = 0; j < n; j++) {
printf("%d\t", matrix[i] + j);
}
}
}
但是当我运行这段代码时,我得到 5 6 和 7 作为第一行,10 11 和 12 作为第二行。所以 matrix[i] + j 有问题。我应该如何解决这个问题?
顺便说一句,我对指针数组、malloc、函数指针感到很困惑,所以通常我对指针感到困惑。如果您推荐一些有关此的网页或视频,我会很高兴。
【问题讨论】:
-
把
void arrPrintMatrix(int *matrix, int m, int n)改成void arrPrintMatrix(int **matrix, int m, int n) -
谢谢自己。 @Grijesh,当我这样做时,它会返回 5、9、13 和 10、14、18。
-
@lombranzo 还将
printf("%d\t", matrix[i] + j);更改为printf("%d\t", matrix[i][j]); -
感谢@Grijesh,但它不再起作用了。使用双*的目的是什么?二维数组有什么特别之处吗?