2011-07-08 87 views
2

全部。我有一個有趣的問題,由我的C++教授給我提出。它顯然也用於一些編程工作面試。C++:使一個矩陣指向另一個

這裏的情況。我有一個整型的的二維陣列(矩陣):

int array1[][2] = {{11, 12}, {21, 22}}; 

我想創建第二二維陣列,數組2,它指向該第一陣列。也就是說,他們會在記憶中佔據相同的空間。

顯而易見的解決方案是使用指針。所以,我宣佈array2是這樣的:

int (*array2)[2][2]; 
array2 = &array1; 

這似乎工作。現在,這是抓住。我想從array1中減去11,但通過引用array2來完成。這裏是什麼,我試圖完成的代碼:

for (int i = 0; i < 2; i++) { 
    for (int j = 0; j < 2; j++) { 
     // Trying to do the equivalent of this: 
     array1[i][j] -= 11; 
    } 
} 

我曾嘗試在身體下面的內部for循環,均無功而返:

// Second row not affected 
*(array2[i][j]) -= 11; 

// Second row not affected 
*(*(array2[i]) + j) -= 11; 

// incompatible types in assignment of `int' to `int[2]' 
*(*(array2 + i) + j) -= 11; 

任何想法?我懷疑有些事情很簡單,我只是沒有到達這裏。

謝謝!

回答

1

既然這是C++,你可以使用引用創建一個別名數組,這正是他們所做的。

int array1[][2] = {{11, 12}, {21, 22}}; 
int (&array2)[2][2] = array1; 

for(int i=0; i<2; ++i) 
    for(int j=0; j<2; ++j) 
     array2[i][j] -= 11; 

雖然問題更可能是C問題與數組2將是一個指針數組1

int array1[][2] = {{11, 12}, {21, 22}}; 
int (*array2)[2] = array1; 

for(int i=0; i<2; ++i) 
    for(int j=0; j<2; ++j) 
     array2[i][j] -= 11; 
+0

左邊的灰色標記第二個解決方案的問題是,我不能將array2傳遞給函數,而不是array1。另外,我還沒有看到聲明數組時使用的第一種語法;我甚至不知道我能做到這一點。 –

+0

傳遞給函數的@Karl是相同的:'f(int a [] [2],int size)'將接受'array1'和'array2'的任一版本 – Cubbi

+0

抱歉,你是對的。按照我最初設置的方式,您必須在傳遞數組時解引用數組:f(* array2,2)。如果你使用任何一種解決方案,你都不會。那是我遇到錯誤的地方。 –

5

array2指向array1,所以你可以到array1*array2。嘗試(*array2)[i][j]

+0

哦第一行預期,咄,當然會工作。我在想我需要將指針取消引用到數組的行,而不是指向數組本身的指針。謝謝! –

+1

@Karl:如果這是正確的答案,不要忘記接受答案 –

相關問題