在文件范围内声明矩阵,用户输入的维度? C
Declare matrix at file scope, dimensions from user input? C
我有一个基于矩阵的程序,需要各种函数才能访问这个矩阵及其维度,这是我从用户那里得到的。我设法通过将它们作为参数传递给每个单独的函数来做到这一点,但这似乎效率不高。
当我尝试声明时:
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);
Or a way to access this matrix and dimensions without passing them as
arguments to various functions?
嗯,是的。你通常传递如下参数:
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
在所有函数之外,以便它们可以在整个程序中访问。
换句话说,在文件范围内声明它们。但是在这种情况下,请确保仅在使用 malloc
.
分配了一些 space 之后才能访问 matrix
正如 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);
希望这能回答您的问题!
我有一个基于矩阵的程序,需要各种函数才能访问这个矩阵及其维度,这是我从用户那里得到的。我设法通过将它们作为参数传递给每个单独的函数来做到这一点,但这似乎效率不高。
当我尝试声明时:
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);
Or a way to access this matrix and dimensions without passing them as arguments to various functions?
嗯,是的。你通常传递如下参数:
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
在所有函数之外,以便它们可以在整个程序中访问。
换句话说,在文件范围内声明它们。但是在这种情况下,请确保仅在使用 malloc
.
matrix
正如 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);
希望这能回答您的问题!