我的目标是为了效率,只使用一行来分配一个2D数组。因为我的教授希望它是高效的。 这段代码给我一个错误,说它无法将void*转换为int。
#include<stdio.h>
#include<stdlib.h>
#define NUMOFCOL 4
int **addtwoarr(int (*A)[NUMOFCOL], int (*B)[NUMOFCOL]);
int main(void){
int firstarr[4][4]={{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}},
secondarr[4][4]={{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}}, **receiver;
receiver = addtwoarr(firstarr, secondarr);
printf("%d", receiver[3][3]);
}
int **addtwoarr(int (*A)[NUMOFCOL], int (*B)[NUMOFCOL]){
int col, row, **arr;
(*arr)[NUMOFCOL] = malloc(NUMOFCOL * sizeof(*arr)); /*this line in particular gives the error */
for(row=0; row<NUMOFCOL; row++){
for(col=0;col<NUMOFCOL; arr[row][col]=A[row][col]+B[row][col], col++){}
}
return arr;
}
分配内存的过程发生在addtwoarr函数中,这也是错误发生的地方。
(*arr)[NUMOFCOL] = ...
?嗯,最好在到达该行之前,arr
指向某个东西。其余部分看起来像是猜测。 - WhozCraigint **arr
是一个指向int
指针的指针;而不是一个指向数组的指针。也就是说,那也是错误的。 - WhozCraig