在C中打印2D打印功能

时间:2019-06-13 21:27:55

标签: c

我觉得我非常接近正确的解决方法,但是我错过了在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);


}

1 个答案:

答案 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;
}

更改

  • 主要定义了一些矩阵数据
  • printMatrixRowMajor被调用(不是函数指针的printf)
  • 两个索引变量用于遍历printMatrixRowMajor中的矩阵元素
  • 矩阵的维度用于访问矩阵元素
  • 采用的主要功能签名
  • 返回0添加到主行

控制台中的输出

如果运行该程序,它将在控制台上提供以下输出:

Matrix row major fashion:
1 2 3 4 
5 6 7 8 
9 10 11 12