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