2014-01-05 54 views
1

如何將2d數組的行復制到1d數組?將2d數組的行復制到1d數組

我相信我所做其分配像前:

int x,y; 
    scanf("%d%d", &x,&y); 
    int one[x]; 
    int two[y][x]; 
    one=two[0]; 

但現在它給我的錯誤:

不兼容的類型分配

編輯:

好吧,我的壞。 我忘記了我不能以這種方式複製數組,但我可以傳遞2d數組的單行函數作爲參數。解決了。

回答

3

您試圖從2維數組分配到1維數組!您將不得不遍歷二維數組並選擇每個單獨的值並插入一維數組中。

+0

,做他如何插入二維數組值1D? – haccks

+0

one [x] = two [y] [x] from your answer :)。遍歷二維數組並選擇正確的索引值並插入一維數組中。 – Siva

3

你不能這樣做

one=two[0]; // Illegal assignment in C 

數組名稱是不可修改的左值。它不能是賦值運算符=的左操作數。您可以這樣做,因爲

one[x] = two[y][x]; 
1

只需使用此代碼:

int col,rowToCopy=0; 
    for(col=0;col<x;col++){ 
     one[col]=two[rowToCopy][col]; 
} 
0

看來,這是不能接受的(我不能完全肯定 - 我會更好看)。

該語言的語義是,對於一維數組,數組的名稱是指向數組元素類型的指針,以及指向第一個元素的指針。 在你的情況下,數組只是一個類型(int *)的指針。

任何(int *)我們都可以應用[]括號。 這些括號正如我已經檢查過的,只是將方括號內的數字添加到指針(使用指針算術)並對指針應用取消引用。 解釋換句話說:所以在這個願景

int *p; 
p[nn] is equivalent to *(p+nn); 

具有代碼波紋管:

int a[8],b[8]; 
a=b; 

做A = B只能指針的內容複製B向指針。 但是因爲數組是一個常數指針,不可能改變,這是不可能的。 所以上面的代碼會報錯; 任何方式,如果可能的話,它會複製數組b開始的地址到指針a。 而且,任何方式都不是你所需要的或你期望的。

這就是C對待數組的方式(感謝我強迫我思考)。

在大小是固定的,我會做這樣的情況:

typedef struct{int arr[0x4];}S; 
S a,b; 
a=b; 

爲了訪問數組,你應該使用:a.arr []和b.arr []

在如果你需要一個數組數組,它​​可以很容易地擴展到你的情況。

問題是,在你的情況下,大小是動態的。

唯一的簡單的解決方法是使用:

memcpy(a,b,sizeof(a)); 

這已複製B的影響到你所需要的。其他解決方案更復雜。

0

下面的代碼可以解決你的問題:

#include<iostream> 
#include<string.h> 

using namespace std; 

int main() 
{ 
    int i,row,col,col1; 
    char value1[10][4]={}; 
    char *value2; 
    value2 = new char[40]; 

    /** Creating a 2D char array ***/ 
    for(i=0;i<8;i++) 
    { 
    strcpy(value1[i],"MK,"); 
    } 
    value1[7][strlen(value1[7])-1]='\0'; 

    /*** Printing the 2D array ****/ 
    for(i=0;i<8;i++) 
    { 
    cout<<"\n\n value1[i]="<<value1[i]; 
    } 

    /*** assigning the 2D array value1[][] to string value2 **/ 
    col1=0; 
    for(row=0;value1[row][0]!='\0';row++) 
    { 
    for(col=0;value1[row][col]!='\0';col++) 
    { 
     *(value2+col1) = value1[row][col]; 
     col1++; 
    } 
    } 
    *(value2+col1)='\0'; 
    /** assignment done ***/ 

    cout<<"\n\nSize of rows="<<row<<"\n\nSize of Column="<<col; 
    cout<<"\n\nvalue1="<<value1[0]; 
    cout<<"\n\nValue2="<<value2; 
    return 0; 
}