2d数组,其中维度直到运行时才知道

时间:2014-08-11 22:18:02

标签: c multidimensional-array

我正在编写一个函数,它读取文件并将字符存储在二维数组中。我希望这是一个全局变量,因为我希望主方法之外的多个函数能够访问它,但是在我读完文件之后才能设置维度,那么这样做的方法是什么呢。在提出这个问题之前,我已经阅读了很多关于堆栈溢出的帖子,但我仍然感到困惑/这些问题对我没有帮助解决这个具体问题。

(我仅限于使用ANSI c提供的库/函数)

3 个答案:

答案 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];