代码之家  ›  专栏  ›  技术社区  ›  Roman Ambrosevich

如何在C中传递具有点的函数中的静态矩阵?

  •  0
  • Roman Ambrosevich  · 技术社区  · 1 年前

    我需要通过内存程序进行优化,所以我决定使用带有静态矩阵的指针,但我对C中的指针不太了解,而且程序不起作用(在VS程序中抛出异常)

    #include <stdio.h>
    
    int Sumofsum(int **matrix, int size) {
        int sum = 0;
        for (int i = 0; i < size; ++i) {
            for (int j = 0; j < size; ++j) {
                sum += matrix[i][j];
            }
        }
        return sum;
    }
    
    void SumofSumOut(int sum) {
        printf("Sum of sums of elements in those rows: %d\n", sum);
    }
    
    int main() {
        int matrix[5][5] =
                {
                        {21,8, 3, 4, 5},
                        {1, 3, 5, 7, 9},
                        {2, 4, 6, 8, 9},
                        {1, 3, 4, 5, 7},
                        {3, 3, 3, 3,11}
                };
        int sum, size = 5;
        sum = Sumofsum(matrix, size);
        SumofSumOut(sum);
        return 0;
    }
    

    我试着用(*matrix)[5],但它不是我需要的

    1 回复  |  直到 1 年前
        1
  •  0
  •   ikegami Gilles Quénot    1 年前

    int **matrix 指示指向指针的指针。这是什么 int *matrix[] 会降解为。

    您没有指针数组。


    将数组视为1d:

    int sum_of_sum( int *matrix, int size ) {
        int sum = 0;
        for ( int i = 0; i < size; ++i ) {
            for ( int j = 0; j < size; ++j ) {
                sum += matrix[ i * size + j ];
            }
        }
        return sum;
    }
    
    sum_of_sum( &matrix[0][0], size )
    

    将指针传递到第一行。

    int sum_of_sum( int size, int (*matrix)[ size ] ) {
        int sum = 0;
        for ( int i = 0; i < size; ++i ) {
            for ( int j = 0; j < size; ++j ) {
                sum += matrix[i][j];
            }
        }
        return sum;
    }
    
    sum_of_sum( size, matrix );
    

    将指针传递到数组。

    int sum_of_sum( int size, int (*matrix)[ size ][ size ] ) {
        int sum = 0;
        for ( int i = 0; i < size; ++i ) {
            for ( int j = 0; j < size; ++j ) {
                sum += matrix[i][j];
            }
        }
        return sum;
    }
    
    
    sum_of_sum( size, &matrix );