簡體   English   中英

如何在C中制作多維動態分配的數組?

[英]How can I make multidimensional dynamically allocated arrays in C?

在將其標記為重復項之前,請注意,我正在尋找針對任意維度數組的更通用的解決方案。 我在這里或論壇上讀過很多關於制作2D或3D整數數組的文章,但是這些是針對特定尺寸的特定解決方案。 我想要任何尺寸的陣列的通用解決方案。 首先,我需要具有如下定義的intlist類型:

typedef struct{
   int l // length of the list
   int * e // pointer to the first element of the array
}intlist;

這實際上填補了C中將數組當作指針對待的空白。 使用這種類型,我可以將數組傳遞給函數,而不必擔心減小大小。 然后在下一步中,我想將mdintlist作為多維動態分配的數組。 類型定義應該是這樣的:

typedef struct Mdintlist{
    intlist d // dimension of the array
    /* second part */
}mdintlist;

第二部分有幾個選項。 on選項是具有指向較低維的mdintlist的指針,例如

struct Mdintlist * c;

其他選擇是使用空指針:

void * c;

我不知道如何從這里繼續。

PS一種解決方案可能是只分配一個內存塊,然后使用函數調用元素。 但是我想以數組形式調用元素。 像tmpmdintlist.c [1] [2] [3] ...

希望我已經清楚地解釋了我想要什么。

PS:這是一篇古老的文章,但是對於那些可能會在這里結束的人來說,我的一些努力可以在Cplus倉庫中看到。

你不能! 您只能在c中使用function選項,因為無法更改語言語義。 但是在c ++中,您可以重載[]運算符,即使我永遠也不會做這樣丑陋的事情( x[1][2][3] 已經很丑陋,如果繼續添加“ dimensions”,它將變得非常丑陋 ) ,我認為這是有可能的。

好吧,如果您將指針和數組長度分開,最終將獲得更少的代碼。

int *one_dem_array;
size_t one_dem_count[1];

int **two_dem_array;
size_t two_dem_count[2];

int ***three_dem_array;
size_t three_dem_count[3];

這樣,您仍然可以使用首選的符號。

int num_at_pos = three_dem_array[4][2][3];

暫無
暫無

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

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