2015-10-13 88 views
-1

我有以下代碼:如何複製到C中的數組?

for(i = 0; i < m; ++i){ 
     for(j = 0; j < m && index[x[i]][j] >= 0; ++j){ 
      printf("%d ", index[x[i]][j]); 
     } 
} 

在上文中,我需要指數[X [I]] [j]的所有的值轉換成一個一維數組,說B []。

指定b [j]的值只會複製值。

+0

順便說一句,如果'index'(不應該名稱而不是'array' ??)是一個真正的二維數組,數據在內存中實際上是連續的,也就是說你可以迭代它'n * m '時間,從'(int *)index'開始。 –

+0

@PeterSchneider他也在複製時重新排列元素。注x [i] –

+0

啊。哦。它*是一個索引數組。我應該仔細閱讀。我以某種方式實際上不了解這個問題,部分原因是因爲毫無疑問,部分原因是最後一句話是非語言的。好的,標題中有一個問題 - 答案是「元素明細或memcpy」。 –

回答

3

假設你想在行主順序存儲和你有m行和n列,這應該做的副本:

for(i = 0; i < m; ++i){ 
    for(j = 0; j < n; ++j){ 
     b[i*n + j] = index[x[i]][j]; 
    } 
} 

確保b的大小m * n個。例如int b[m*n];

此外,在您的代碼中,您只打印非負數。如果您只想複製非負值,那麼您可能需要在該情況下爲b設置一些默認值。

2

另一個解決方案,如您使用int arrays,使用memcpy

如果您想要複製2d數組中的所有值(複製連續內存),則此方法有效。

memcpy()函數將n個字節從存儲器區src複製到內存區0123的存儲器 dest。內存區域不能重疊。如果 內存區域重疊,請使用memmove(3)。

memcpy(B, index, sizeof(index[0][0])*m*m) 
+0

一般很棒的建議。不過在這種情況下。請注意索引'x'的數組。基本上Vidya不想複製連續內存 –

+0

是的,更新了我的答案的條件。 – luoluo

+0

打印完成後,數組完全是-1。 – Vidya

2

可以具有用於B數組索引一個單獨的變量。並將值分配給b數組。如下所示。

int pos=0; 
for(i = 0; i < m; ++i){ 
    for(j = 0; j < n; ++j){ 
     b[pos++] = index[x[i]][j]; 
    } 
} 

這會將索引[x [i]] [j]中的所有值賦給一維數組b。

相關問題