我需要爲分配二維數組定義函數,但它應該只調用malloc一次。在C中有一個malloc的二維數組分配函數
我知道如何分配它(-std = C99):
int (*p)[cols] = malloc (sizeof(*p) * rows);
但我無法弄清楚如何從函數返回。返回不是選項,因爲一旦函數結束(或至少部分),數組將停止存在。因此,只有將數組傳遞給此函數的選項與參數類似,但上面的解決方案需要在聲明中定義col數。它甚至有可能嗎?
謝謝。
由於用戶kotlomoy我設法解決這個問題是這樣的:
...
#define COLS 10
#define ROWS 5
int (*Alloc2D())[COLS]
{
int (*p)[COLS] = malloc(sizeof(*p) * ROWS);
return p;
}
//and this is example how to use it, its not elegant,
//but i was just learning what is possible with C
int main(int argc, char **argv)
{
int (*p)[COLS] = Alloc2D();
for (int i = 0; i < ROWS; i++)
for(int j = 0; j < COLS; j++)
p[i][j] = j;
for (int i = 0; i < ROWS; i++){
for(int j = 0; j < COLS; j++)
printf("%d", p[i][j]);
printf("\n");
}
return 0;
}
你真的應該加上' c99'標籤 – kotlomoy