-2

传递矩阵作为指向函数的指针不起作用。

#include <stdio.h>

void printMatrix(int **matrix, int row, int col)
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
            printf("%d ", matrix[i][j]);
        printf("\r\n");
    }
}
void printM (size_t row, size_t col, int matrix[3][4])
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
            printf("%d ", matrix[i][j]);
        printf("\r\n");
    }
}
int main() 
{
    int M[3][4];
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 4; j++)
            M[i][j] = 4*i+j;

    printM(3, 4, M);

    int *row = *M;
    printMatrix(&row, 3, 4);    //not working
}

函数printM有效,但我想知道如何正确使用指向指针的指针,谢谢帮助。

4

2 回答 2

2

首先,感谢您提出这个问题。这是对 C 如何处理多维数组的一个很好的回顾。另外,可以做双指针。请记住,数组引用等同于指针,例如:a[0]并且*a都引用int a[12];where的第一个元素*a是指针的取消引用a。因此,当 M 被声明为时,&M指针的地址是Mint M[3][4];

为了清晰起见,我通过添加一些注释来修改您的代码,以便它可以使用 Microsoft 的 C 编译器在 Eclipse 中运行,特别是从 for 语句中移出的 int 声明。除此之外,它与您最初编写的内容相同,只是更改了 printMatrix 声明及其调用方式。

希望对你有帮助,如果有更多问题请追问...

    #include <stdio.h>

    void printMatrix(int (*matrix)[3][4], int row, int col)
    {
    int i, j;

    // point t so that when de-referenced it is at
    // the matrices first element
        int *t = (*matrix)[0];

    printf("\n");
        for (i = 0; i < row; i++)
        {
         // in C matrices are stored in Row Major form, so
         // per K&R just sequentially loop thru (*t)[12]
         for (j = 0; j < col; j++) {printf("%d ", *t++);}

         printf("\r\n");

        }
     } // end printMatrix

     void printM (size_t row, size_t col, int matrix[3][4])
     {
     int i, j;

     printf("\n");
         for (i = 0; i < row; i++)
         {
           for (j = 0; j < col; j++) {printf("%d ", matrix[i][j]);}

         // new line for next row
         printf("\r\n");
         }
      } 

    int main()
    {
      int i,j;

      // define a matrix with 3 rows and 4 columns
          int M[3][4];

          // fill-in the matrix with values
         for (i = 0; i < 3; i++)
           for (j = 0; j < 4; j++)
              M[i][j] = 4*i + j;

         // print the three rows and four columns of M
         printM(3, 4, M);

         printMatrix(&M, 3, 4);    // Also Works

     }  // end main
于 2013-07-30T22:37:54.547 回答
1
void printMatrix(int *matrix, int row, int col)
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
            printf("%d ", *(matrix+(i*col)+j);
        printf("\r\n");
    }
}

不要做双指针。

于 2013-07-30T21:00:52.407 回答