簡體   English   中英

“動態分配內存模擬多維數組”的正確術語?

[英]Proper terminology for “dynamically allocated memory emulating multi-dimensional array”?

前段時間我問了一個問題 ,我被告知(在提交中)使用術語“多維數組”作為這樣的結構:

int **a;

初始化如下:

a = malloc(n * sizeof(*a));
for (i = 0; i < n; ++ i)
    a[i] = malloc(m * sizeof(*a[i]));

是誤導,這是“只是一個多維數組的模擬”。 我不是英語母語人士,我很難搞清楚什么是正確的術語。 不幸的是,抱怨這個術語的人自己也沒有幫助。

果然,術語“多維陣列的仿真”太長,無法在文本/會話中實際使用。

總結一下:

  • 上面構造的適當術語是什么(特別是在C中,如果有所不同)?

問題:

  • 這種術語語言是否不可知? 如果沒有,例如在C ++中如何調用它?

注意:如果您的答案與參考文獻相關聯,我會很高興。
編輯 :我理解這個構造和int a[n][m];之間的區別int a[n][m]; 那不是問題。

更新

分配的內存不一定是常規的。 這種結構更精確:

a = malloc(n * sizeof(*a));
for (i = 0; i < n; ++ i)
  if (needed[i])
    a[i] = malloc(m[i] * sizeof(*a[i]));
  else
    a[i] = NULL;

我總是聽到這些被稱為“鋸齒狀陣列” - 即使每個子陣列長度相同,它們可以有不同的長度,因此稱為“鋸齒狀”。 (在真正的多維數組中,每個維度都有固定的大小,在這種情況下,只有第一個維度才真正固定。)

它是“數組(指向)數組”,該術語可以在各種語言中理解,並適用於元素數組的長度是否相等(方形AoAs)或不是(鋸齒狀的AoAs)。

“嵌套數組”,或“數組[of ...]”。

雖然我不認為它支持不同的維度,但Boost在這個模糊的空間中提供了一個產品 - http://www.boost.org/libs/multi_array/doc/user.html - 設計決策和界面甚至可能值得考慮如果你正在實施新的東西。

我會像在c-faq中那樣將構造稱為“模擬多維數組”。 如果您認為該術語太長,您可以說“模擬二維數組”等。但是,參考int **a; 因為它的類型是指向int的指針,所以永遠不應該完成多維數組。 我認為區別在於指針可用於構造數組,但它們將始終作為指針保留。 此外,應該知道指針數組( int *a[10]; )也可用於構造鋸齒狀數組,因此術語不會具體指代您所擁有的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM