很难理解如何访问函数内部的矩阵以及如何将其传递给 main 中的函数
Hard time understanding how to access the matrix inside the function and how it was passed into the function in main
给你一个表示图像的 n x n 二维矩阵,将图像旋转 90 度(顺时针)。
问题的全貌:https://leetcode.com/problems/rotate-image/
传递矩阵的函数:
void rotate(int** matrix, int matrixSize, int* matrixColSize);
澄清一下,我不是要问如何解决 leetcode 问题,我要问的是 1) 他们是如何在 main 中制作矩阵的,2) 它是如何传递到所述函数中的above 3) 如何访问函数内部的元素。我很难从视觉上掌握指向指针的指针。
matrix
是指向指针的指针类型,函数只能接受相同类型的参数,所以你必须将通过内存创建的数组传递给它分配,例如:
int **matrix = malloc(rows * sizeof *matrix);
for(int i = 0; i < rows; i++)
matrix[i] = malloc(cols * sizeof **matrix);
你像传递任何其他变量一样传递它,尊重类型:
int main() {
int **matrix = malloc(rows * sizeof *matrix);
for(int i = 0; i < rows; i++)
matrix[i] = malloc(cols * sizeof **matrix);
rotate(matrix, ...);
}
更简洁的索引方式与静态声明的二维数组相同,即 int matrix[5][5]
.
例如:
void rotate(int** matrix, ...){
printf( "%d", matrix[0][0]);
}
上面的代码当然会像您期望的那样访问第一行和第一列中的元素。
为了简单起见,我没有检查 malloc 的 return 值,您应该检查一下。
参数有点混乱,但我想这是使问题复杂化的一种方式,使问题变得更加困难。 正常方式是传递数组的维度,即:
void rotate(int** matrix, int rows, int cols);
没有必要让第三个参数是指针,也没有顺便传递整个数组的大小,这会导致不必要的逻辑。
更简单的方法是完全避免第三个参数,因为它是一个方阵。
给你一个表示图像的 n x n 二维矩阵,将图像旋转 90 度(顺时针)。
问题的全貌:https://leetcode.com/problems/rotate-image/
传递矩阵的函数:
void rotate(int** matrix, int matrixSize, int* matrixColSize);
澄清一下,我不是要问如何解决 leetcode 问题,我要问的是 1) 他们是如何在 main 中制作矩阵的,2) 它是如何传递到所述函数中的above 3) 如何访问函数内部的元素。我很难从视觉上掌握指向指针的指针。
matrix
是指向指针的指针类型,函数只能接受相同类型的参数,所以你必须将通过内存创建的数组传递给它分配,例如:int **matrix = malloc(rows * sizeof *matrix); for(int i = 0; i < rows; i++) matrix[i] = malloc(cols * sizeof **matrix);
你像传递任何其他变量一样传递它,尊重类型:
int main() { int **matrix = malloc(rows * sizeof *matrix); for(int i = 0; i < rows; i++) matrix[i] = malloc(cols * sizeof **matrix); rotate(matrix, ...); }
更简洁的索引方式与静态声明的二维数组相同,即
int matrix[5][5]
.例如:
void rotate(int** matrix, ...){ printf( "%d", matrix[0][0]); }
上面的代码当然会像您期望的那样访问第一行和第一列中的元素。
为了简单起见,我没有检查 malloc 的 return 值,您应该检查一下。
参数有点混乱,但我想这是使问题复杂化的一种方式,使问题变得更加困难。 正常方式是传递数组的维度,即:
void rotate(int** matrix, int rows, int cols);
没有必要让第三个参数是指针,也没有顺便传递整个数组的大小,这会导致不必要的逻辑。
更简单的方法是完全避免第三个参数,因为它是一个方阵。