C 如何传递用户在函数中定义其维度的矩阵

C 如何传递用户在函数中定义其维度的矩阵,c,C,要在函数中传递矩阵,我们需要传递其维数,但如何传递用户定义其维数的矩阵 void Matrix_func(int x[size][size]) { } 您可以将其传递为: void Matrix_func(int size, int x[][size]){ } 您可能希望为此使用动态内存分配,在这种情况下,您可以使用双指针作为值。此外,您可以为矩阵创建一个struct,而不是到处传递大小。例如: #include <stdio.h> #include &l

要在函数中传递矩阵,我们需要传递其维数,但如何传递用户定义其维数的矩阵

    void Matrix_func(int x[size][size])
    {
    }
您可以将其传递为:

void Matrix_func(int size, int x[][size]){
}

您可能希望为此使用动态内存分配,在这种情况下,您可以使用双指针作为值。此外,您可以为矩阵创建一个
struct
,而不是到处传递大小。例如:

#include <stdio.h>
#include <stdlib.h>

struct matrix_t {
    int width;
    int height;
    int** values;
};

matrix_t* alloc_matrix(int width, int height) {
    int i;
    matrix_t* matrix;
    matrix = (matrix_t*)malloc(sizeof(matrix_t));
    matrix->width = width;
    matrix->height = height;
    matrix->values = (int**)malloc(sizeof(int*) * height);
    for (i = 0; i < height; ++i) {
        matrix->values[i] = (int*)malloc(sizeof(int) * width);
    }
    return matrix;
}

void free_matrix(matrix_t* matrix) {
    int i;
    for (i = 0; i < matrix->height; ++i) {
        free(matrix->values[i]);
    }
    free(matrix->values);
    free(matrix);
}

void matrix_func(matrix_t* x) {
    int row;
    int col;
    for (row = 0; row < x->height; ++row) {
        for (col = 0; col < x->width; ++col) {
            printf("%d ", x->values[row][col]);
        }
        printf("\n");
    }
}

int main() {
    int height;
    int width;
    matrix_t* matrix;

    printf("Enter height: ");
    scanf("%d", &height);
    printf("Enter width: ");
    scanf("%d", &width);

    matrix = alloc_matrix(width, height);
    matrix_func(matrix);
    free_matrix(matrix);
}

size参数应该是第一个参数:
void Matrix_func(int size,int x[size][size])
指向
int
的指针与
int[][]
不兼容,而不是
Matrix=(Matrix_t*)malloc(sizeof(Matrix_t)),考虑<代码>矩阵= Malc(sisioof *矩阵);<代码>更容易正确编码、检查和维护。
Enter height: 4
Enter width: 5
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0