我正在编写一个函数,它读取文件并将字符存储在二维数组中。我希望这是一个全局变量,因为我希望主方法之外的多个函数能够访问它,但是在我读完文件之后才能设置维度,那么这样做的方法是什么呢。在提出这个问题之前,我已经阅读了很多关于堆栈溢出的帖子,但我仍然感到困惑/这些问题对我没有帮助解决这个具体问题。
(我仅限于使用ANSI c提供的库/函数)
答案 0 :(得分:2)
您想使用malloc
:
int i;
t_data * rows;
t_data ** array;
// Allocate the 2d array as a dynamic 1d array of pointers to rows
array = malloc(sizeof(t_data *) * num_rows);
// Allocate each row as a dynamic 1d array of t_data
for ( i = 0; i < num_rows; i++ )
array[i] = malloc(sizeof(t_data) * num_cols);
此处,t_data
是您要存储的数据的数据类型(对于每个数组元素),num_rows
是读取的行数,num_cols
是读取的数字列。
您可以通过array[i][j]
访问元素。
当您完成阵列后,您可以将其释放出来并反过来&#34;:
for ( i = 0; i < num_rows; i++ )
free(array[i]);
free(array);
答案 1 :(得分:0)
任何需要在C中进行“动态”调整的内容都需要使用指针malloc()
,free()
和相关工具。在线搜索(或在书中,如果有的话)进行动态内存分配。
请注意,这是一个相当广泛的主题(包含相关的学习曲线和陷阱),因此,如果您返回一些已实施的代码,我们可以更好地帮助解决任何直接相关的问题。
答案 2 :(得分:0)
您需要一个指针类型,例如uchar *。然后在运行时,当您知道维度 m x n 时,您需要使用malloc,如:
uchar *matrix = (uchar*)malloc(m * n * sizeof(uchar))
然后要导航它,你会使用一个考虑步幅的函数:
int stride = m;
// for element (i,j)
matrix[i * stride + j];