今天早上我已經和同事討論過這個話題。他說,將數組作爲指針數組分配總是比較好,因爲分別分配每個元素有更好的機會獲得一個空閒的內存塊。 Somethink這樣的:指針陣列與元素陣列
// Consider n_elements as a dynamic value
int n_elements = 10, i;
int **ary = (int **) malloc(sizeof(int *) * n_elements);
for(i = 0; i < n_elements; i++)
{
ary[i] = (int *) malloc(sizeof(int));
}
至於反對他的做法,我認爲這是更好地分配元素的數組,只是因爲你會得到一個緊湊的內存塊,而不是一堆周圍堆蔓延引用。類似這樣的:
int n_elements = 10;
int *ary = (int *) malloc(sizeof(int) * n_elements);
ary[0] = 100;
在這次對話之後,我一直在想它,而且我的最終結論是,它取決於。由於我上面提到的原因,我發現第二種解決方案是一種更好的方法,但是在分配大型結構數組時可能會比第一種更好。
除了我的結論之外,您對此有何看法?
就像你說的,「這取決於」。 :) – lurker
對於需要10個整數,你會瘋了。使用'int a [10];'對於一個連續的N個項目序列,後者(減去'malloc()')的轉換將是要走的路(*很少*不是這種情況)。前者通常只在您需要任意長度的項目列表的任意長度列表時纔會完成,在使用2D數組期間提供*語法*(實際上其實是任何事情)。但是,它最終取決於您的特殊需求。 – WhozCraig
這不主要是基於意見的。大聲笑。 –