我有以下代碼:如何複製到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]的值只會複製值。
我有以下代碼:如何複製到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]的值只會複製值。
假設你想在行主順序存儲和你有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設置一些默認值。
可以具有用於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。
順便說一句,如果'index'(不應該名稱而不是'array' ??)是一個真正的二維數組,數據在內存中實際上是連續的,也就是說你可以迭代它'n * m '時間,從'(int *)index'開始。 –
@PeterSchneider他也在複製時重新排列元素。注x [i] –
啊。哦。它*是一個索引數組。我應該仔細閱讀。我以某種方式實際上不了解這個問題,部分原因是因爲毫無疑問,部分原因是最後一句話是非語言的。好的,標題中有一個問題 - 答案是「元素明細或memcpy」。 –