2013-06-01 51 views
2

因此,在我的程序中,我有一個函數傳遞給它一個二維數組,我想設置另一個二維數組等於該二維數組。我在C++中編寫了這個代碼,並且無法完全正確地使用語法。現在我有以下幾點:指定一個二維數組到另一個

void MyFunction(float **two_d_array){ 
    float newArray[4][4]; 
    //Set new array equal to two_d_array 
} 

two_d_array也將始終是4x4因此尺寸本身不是問題。

+0

問題是什麼功能?你有錯誤嗎?如果是,那麼錯誤信息是什麼?或者我們應該猜測? – user93353

回答

4

我希望你沒有傳遞一個二維數組作爲你的函數的雙指針。

不管怎麼說,你可以只寫

for (int i = 0; i < 4; i++) 
    for (int j = 0; j < 4; j++) 
     newArray[i][j] = two_d_array[i][j]; 

如果您有其他二維數組(和指針數組),然後只需使用memcpy()

void foo(float arr[][4]) 
{ 
    float newArray[4][4]; 
    memcpy(newArray, arr, sizeof(newArray)); 
} 
+0

謝謝你的幫助。但是將它作爲雙指針傳遞有什麼問題?訪問元素的語法將是相同的,不是嗎? – user1855952

+0

@ user1855952語法會,只是語義不會。數組不是指針,指針不是數組,二維數組不會衰減爲雙指針,而是指向具有第二維大小的數組的指針。 – 2013-06-01 06:15:38

+0

好的,我明白了。謝謝! – user1855952

0

是,你必須指定第二個dimenson,並通過一個整數參數傳遞第一個維度,它將如下所示: void foo(float arr [] [4],int dim);

1

當定義一個兩個維數組作爲

float a[4][4] 

它的類型是浮[4] [4]。

,如果你想通過浮動**你可以創建你使用float **

float** f = (float**) malloc(sizeof(float *)*4); 
    for(int i=0;i<4;i++){ 
     f[i] = (float*) malloc(sizeof(float)*4); 
    } 
//initialize 
MyFunction(f); 

而且MyFunction的將是類似

void MyFunction(float **two_d_array){ 
    float newArray[4][4]; 
    for(int i=0;i<4;i++){ 
     float* one_d = & two_d_array[i][0]; 
     for(int j=0;j<4;j++){ 
      newArray[i][j] = one_d[j]; 
     } 
    } 

} 
相關問題