【问题标题】:How do I print elements of a 2D matrix in C using base address?如何使用基地址在 C 中打印二维矩阵的元素?
【发布时间】:2017-03-11 11:35:15
【问题描述】:

我编写了一个代码,它从用户那里获取二维矩阵的元素,然后使用矩阵的基地址进行打印。 为简单起见,我省略了输入部分。 这是我尝试过的代码:-

 main()
 {
  int mat[50][50],i, j, r, c, *p;
   p = &mat[0][0];

   <------skip the input---->

 for(i = 0; i < r; i++) /* print the matrix*/
   {
      for(j = 0; j < c; j++)
      {
         printf("%d\t", *((p + i) + j));
      }
      printf("\n");
  }
}


Input: 
1
2
3
4

Output:
1   2
2   0

看来我的代码是错误的。请帮助。真的很困惑!

【问题讨论】:

  • 也许你需要数组ant指针之间的基础知识。 *(*(p +i) + j)。 -----哦,对不起,我错了。
  • ^ 这个不要理会,错了。
  • 要访问矩阵的下一行,您需要将步幅(即每行 50 个元素)与行索引相乘。所以你会有*(p + i * 50 + j)
  • 为什么还要使用基指针来打印...

标签: c matrix


【解决方案1】:

基本上你想要打印的是p[i][j],它相当于*(p + (i*rowNum) + j)。这可以如下所示。

printf("%d\t", *(p + (c  *  i) + j);

【讨论】:

    【解决方案2】:

    你确定要使用指针吗? 这是一个更简单的解决方案:

    int matrix[SIZE][SIZE] = { {1, 2}, {3, 4} };
    
    for (int row = 0; row < SIZE; row++)
    {
        for (int col = 0; col < SIZE; col++)
        {
            printf("%d\t", matrix[row][col]);
        }
        printf("\n");
    }
    

    【讨论】:

    • OP 非常清楚地说明了他想要做的方式。你的方式不是我们想要的方式。
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2015-11-29
    • 2021-11-20
    • 2015-07-21
    相关资源
    最近更新 更多