我的目標是分配一個2d數組,僅使用1行來提高效率。因爲我的教授期待它的效率。 該代碼給我一個錯誤,說它無法從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'最好指向那條線之前的東西。其餘的看起來像是猜測。 – WhozCraig
靜態初始化怎麼樣?根本不需要運行時。 – Downvoter
啊。我見過人們int(* m)[CCOLS] = malloc(cRows * sizeof(* m)); 但我不能得到那部分權利。 – Joshua