将矩阵作为指针指向功能不起作用。
#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
有效,但我想知道如何正确使用指针指针,感谢您的帮助。
答案 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");
}
}
不要做双指针。