如何将2D数组返回到main()

时间:2017-07-17 13:32:20

标签: c

我正在学习c语言并且总是使用指针与数组返回混淆。我的问题是:

我想阅读并声明

中的2D数组

int ** readMatrix(int rows,int cols);功能

并将其返回到main()

PLZ用简单的语言给我解决方案,因为我已经阅读了很多书,但无法理解。 谢谢

1 个答案:

答案 0 :(得分:0)

要在另一个函数内初始化2D数组的内存,并且意图使用此函数之外的相同内存,必须使用malloc从操作系统中请求所需的内存。

如果请求无法从操作系统提供,那么Malloc将返回一个指向您请求的内存块的起始地址的void指针,如果请求无法在家用PC上提供请求,因为它意味着您已经耗尽内存。 malloc doc

如果要创建Int类型的指针数组,则必须执行以下操作

see

int ** readMatrix(int rows,int cols){
     int** var = (int**) malloc(sizeof(int)*rows); //Here you allocate the memory for the pointer which will later point the the columns
     for (int i=0; i<r; i++)
        arr[i] = (int *)malloc(cols * sizeof(int)); //Here you allocate the columns

      return var; 
 }

另一种方法是将2D阵列映射到1D阵列上。我对绘图有什么意义?让我用一个例子来说明:

如果要将2D阵列中的所有元素映射到1D阵列,则1D阵列必须具有与2D阵列相同数量的元素,否则您将错过元素。 然后你需要某种公式来将索引从2D数组计算到1D数组。公式为:y * width + x

宽度表示2D数组的一行可包含的最大元素数量。 X表示您在当前行上的位置,Y表示您当前所在的行。

C中的

看起来像这样:

 int* var = malloc(sizeof(int)*rows*cols);
 for(int i = 0; i < row; i++)
    for(int j = 0; j < cols; j++)
       var[i*cols+j] = 0;