我觉得我非常接近正确的解决方法,但是我错过了在main方法中调用print函数的关键点。我有点不习惯,所以简单地朝正确的方向前进会有所帮助。我的代码应该按行主要方式打印2D数组,然后按列主要方式打印。
// ArrayPointer.c
#include <stdio.h>
#include <math.h>
// a: array pointer, m: # of rows, n: # of columns
void printMatrixRowMajor(int *a, int m, int n){
printf("Matrix row major fashion:\n");
int x[3][4];
a = &(x[0][0]);
for (m=0;m<3;m++){
for (n=0;n<4;n++){
printf("%d ", *(a + (m*4)+n));
}
printf("\n");
}
}
// a: array pointer, m: # of rows, n: # of columns
void printMatrixColMajor(int *a, int m, int n){
printf("\nMatrix column major fashion:\n");
int x[3][4];
a = &(x[0][0]);
for (n=0;n<4;n++){
for (m=0;m<3;m++){
printf("%d ", *(a + x[m][n]));
}
printf("\n");
}
}
main()
{
int row, col;
int x[3][4], *xptr;
xptr = &(x[0][0]);
printf("%d", printMatrixRowMajor);
}
答案 0 :(得分:3)
您稍作修改的代码可能如下所示:
#include <stdio.h>
#include <math.h>
// a: array pointer, m: # of rows, n: # of columns
void printMatrixRowMajor(int *a, int m, int n) {
printf("Matrix row major fashion:\n");
for (int y = 0; y < m; y++) {
for (int x = 0; x < n; x++) {
printf("%d ", *(a + (y * n) + x));
}
printf("\n");
}
}
int main() {
int x[3][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
printMatrixRowMajor(x, 3, 4);
return 0;
}
更改
控制台中的输出
如果运行该程序,它将在控制台上提供以下输出:
Matrix row major fashion:
1 2 3 4
5 6 7 8
9 10 11 12