我有一个基于矩阵的程序,需要各种功能才能访问这个矩阵及其维度,我从用户那里得到。我设法通过将它们作为参数传递给每个单独的函数来做到这一点,但这似乎效率不高。
当我尝试声明这一点时:
int lin, col;
char matrix[lin][col];
我收到一个错误:文件范围内不允许可变长度数组声明。我猜是因为那时我还没有向用户询问“lin”和“col”?我的问题是:有没有办法让我的可变维度矩阵具有全局范围?还是一种访问此矩阵和维度而不将它们作为参数传递给各种函数的方法?
我有一个基于矩阵的程序,需要各种功能才能访问这个矩阵及其维度,我从用户那里得到。我设法通过将它们作为参数传递给每个单独的函数来做到这一点,但这似乎效率不高。
当我尝试声明这一点时:
int lin, col;
char matrix[lin][col];
我收到一个错误:文件范围内不允许可变长度数组声明。我猜是因为那时我还没有向用户询问“lin”和“col”?我的问题是:有没有办法让我的可变维度矩阵具有全局范围?还是一种访问此矩阵和维度而不将它们作为参数传递给各种函数的方法?
做
char **matrix;
读取行r
和列c
作为用户的输入。
然后做 :
*matrix[c]=malloc(sizeof(matrix[r][c]); //You get contiguous memory here
然后访问矩阵,如 matrix[x][y] ,访问二维数组的方式相同。
在一天结束时,清除分配的内存:
clear(matrix);
还是一种访问此矩阵和维度而不将它们作为参数传递给各种函数的方法?
嗯,是 。您通常会传递如下参数:
void print_matrix(char** matrix_copy,int rows,int cols)
{
//Access the matrix using matrix_copy[x][y] format
}
main()
你可以像下面这样传递矩阵:
print_matrix(matrix,r,c); // As simple as that.
由于您不需要参数,因此您需要一个简单的解决方法。
宣布
char **matrix;
int r,c; // rows & columns
在所有功能之外,以便在整个程序中都可以访问它们。换句话说,在文件范围内声明它们。但在这种情况下,请确保您matrix
仅在使用malloc
.
正如 sjsam 所说,动态内存分配是解决您问题的可行解决方案。我想指出的唯一一点是代码看起来像这样:
int i,lin,col;
char **matrix;
matrix=malloc(lin * sizeof(char*));
//check for NULL
for(i=0;i<lin;i++){
matrix[i]=malloc(col * sizeof(char));
//again,check for NULL
}
再说一次,要释放分配的内存,请执行以下操作:
for(i=0;i<lin;i++)
free(matrix[i]);
free(matrix);
希望这能回答你的问题!