如何使用指针指针传递矩阵?

时间:2013-07-30 20:53:34

标签: c++ c pointers matrix

将矩阵作为指针指向功能不起作用。

#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有效,但我想知道如何正确使用指针指针,感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

首先,谢谢你提出这个问题。这是一个很好的回顾C如何做多维数组。另外,可以做双指针。请记住,数组引用等效于指针,例如:a[0]*a都引用int a[12];的第一个元素,其中*a是指针的解引用{ {1}}。因此,当{M}被声明为a

时,&M是指针M的地址

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

希望这有帮助,请询问是否有更多问题......

int M[3][4];

答案 1 :(得分: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");
    }
}

不要做双指针。