2012-06-20 75 views
0

我嘗試動態分配二維數組的一個維度。該陣列聲明如下:分配一維二維數組並返回

uint16_t coord[][2]; 

我只需要分配行數,座標數。 在谷歌,我發現足夠的代碼來分配這兩個維度,從開始:

uint16_t **coord; 

我不知道我是否還可以聲明爲上面的陣列。我需要做的:

uint16_t *coord[2]; 

還是不是?

我還需要返回從分配功能的陣列(指針),這樣其他功能可以訪問該陣列是這樣的:

foo = coord[4][0]; 
bar = coord[4][1]; 

什麼是返回數組分配正確的方法是什麼?

回答

5

按照clockwise/spiral rule,以下聲明:

uint16_t *coord[2]; 

是兩個指針數組,這似乎不是你想要的。然而,你可以用這個來代替:

uint16_t (*coord)[2]; 

您可以像這樣爲它分配內存:

coord = malloc(num_entries * sizeof(uint16_t[2])); 

現在,您可以訪問它作爲一個正常的多維數組:

coord[0][0] = 1; 
coord[0][1] = 2; 
coord[1][0] = 3; 
coord[1][1] = 4; 
+0

感謝您的鏈接,非常有趣:) –

+1

+1:除了指針的定義之外,鏈接是我讀過的指針上的最佳資源。我想投票的次數與我不知道這個規則和知道指針的年數一樣多,大約10! –

+0

+1鏈接! – Thomas

0

你在混合數組和指針,它們是不一樣的。

uint16_t coord[][2]; 

是一個不完整的類型,因爲您沒有定義一個維度。您將通過使用初始化程序修復該維度。看起來你對這個概念並不是很熟悉,所以你最好用一維的熱身:

uint16_t line[] = { 1, 2, 3 }; 

會給它三個元素。