[英]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.