【问题标题】:Printing contents of matrix by using pointer使用指针打印矩阵的内容
【发布时间】: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 作为第二行。所以 ma​​trix[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,但它不再起作用了。使用双*的目的是什么?二维数组有什么特别之处吗?

标签: c pointers matrix


【解决方案1】:

换行

        printf("%d\t", matrix[i] + j);

        printf("%d\t", matrix[i*n+j]);

更新

2D 数组的内存布局在this article 中有很好的解释。

【讨论】:

  • 谢谢,这就是我想要的。就像我在第一篇文章中写的那样,如果你能推荐一些关于使用指针数组、malloc 等的页面或视频......我会很高兴。
  • @lombranzo 我添加了一个指向有关二维数组内存布局的 URL 的链接。
【解决方案2】:

m改变:

 matrix[i] + j

收件人:

matrix[(i*n)+j]

【讨论】:

  • "m" 是这里的行号。我认为,它应该是列号,所以“n”。谢谢马洪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多