很难理解如何访问函数内部的矩阵以及如何将其传递给 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) 如何访问函数内部的元素。我很难从视觉上掌握指向指针的指针。

  1. matrix是指向指针的指针类型,函数只能接受相同类型的参数,所以你必须将通过内存创建的数组传递给它分配,例如:

    int **matrix = malloc(rows * sizeof *matrix);
    
    for(int i = 0; i < rows; i++)
        matrix[i] = malloc(cols * sizeof **matrix);
    
  2. 你像传递任何其他变量一样传递它,尊重类型:

    int main() {
    
        int **matrix = malloc(rows * sizeof *matrix);
    
        for(int i = 0; i < rows; i++)
            matrix[i] = malloc(cols * sizeof **matrix);
    
        rotate(matrix, ...);
    }
    
  3. 更简洁的索引方式与静态声明的二维数组相同, int matrix[5][5].

    例如:

    void rotate(int** matrix, ...){   
    
        printf( "%d", matrix[0][0]);
    
    }
    

上面的代码当然会像您期望的那样访问第一行和第一列中的元素。

为了简单起见,我没有检查 malloc 的 return 值,您应该检查一下。

参数有点混乱,但我想这是使问题复杂化的一种方式,使问题变得更加困难。 正常方式是传递数组的维度,:

void rotate(int** matrix, int rows, int cols);

没有必要让第三个参数是指针,也没有顺便传递整个数组的大小,这会导致不必要的逻辑。

更简单的方法是完全避免第三个参数,因为它是一个方阵。