我正在学习c语言并且总是使用指针与数组返回混淆。我的问题是:
我想阅读并声明
中的2D数组 int ** readMatrix(int rows,int cols);
功能
并将其返回到main()
PLZ用简单的语言给我解决方案,因为我已经阅读了很多书,但无法理解。 谢谢
答案 0 :(得分:0)
要在另一个函数内初始化2D数组的内存,并且意图使用此函数之外的相同内存,必须使用malloc从操作系统中请求所需的内存。
如果请求无法从操作系统提供,那么Malloc将返回一个指向您请求的内存块的起始地址的void指针,如果请求无法在家用PC上提供请求,因为它意味着您已经耗尽内存。 malloc doc
如果要创建Int类型的指针数组,则必须执行以下操作
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;