簡體   English   中英

在C中將多維數組轉換為單維

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

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