[英]convert multidimensional array to single dimensional in C
如果我在C中定義了如下數組:
int B[d1][d2][d3][d4][d5][d6][d7][d8][d9];
然后,很容易將“ B”轉換為一維。 但是如果我在C中有一個數組,該數組的定義如下:
int********* A;
//which will be allocated as follows for example
A = (int*********) malloc(N*sizeof(int********));
for(int i=0; i<N; i++)
{
//differentSizes will be distinct for every "i"
//the same distinctness of sizes will be for every other
//inner parts of all inner for loops
compute(&differentSizes);
A[i] = (int********) malloc(differentSizes*sizeof(int*******));
for(...)
{
...
}
}
其中“ A”的每個維度的尺寸都非常大,並且對於“ A”的所有內部陣列/子陣列而言,它們都是不同的。
我的問題:是否有一種有效的方法可以將“ A”轉換為一維? 如果可能,您可以舉一個簡單的例子嗎? 謝謝!
我看不到你的問題。 多維數組在內存中是連續的,因此類型轉換將起作用:
int B[13][37];
int *oneDimension = (int *)B;
從現在開始,您可以通過計算B
在每個維度上的大小的適當偏移量來訪問B
的元素; 使用上面的示例:
int valueAtB_2_6 = oneDimension[2 * 13 + 6];
聲明數組所有內容的方式將在內存中是連續的。 如果您可以確定元素的數量,則可以將數組復制到一個一維或遍歷原始維,這取決於您要執行的操作:
int* singleIndex = (int*)B;
for (int i = 0; i < d1 * d2...dN; i++)
{
printf("Element # %d = %d\n", i, *singleIndex);
}
例如。
現在,如果您正在對數組進行堆初始化,那么這將不起作用,因為所有內存都將散布在堆上,但是對於靜態/堆棧分配的數組則可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.