2010-12-19 79 views
0

編輯:創建動態二維數組的其他方法?

我完全修改了我的問題,因爲我對自己想要做的事情有了更好的瞭解。

#include <iostream> 
#include <cstdlib> 
using namespace std; 

int main(){ 
    const int max_rows = 10; 
    const int max_cols = 10; 

    int *test = new int[max_rows * max_cols]; 

    for(int i = 0; i < 100; i++){ 
     test[i] = 1 + (rand() % 100); 
    } 

    for(int i = 0; i < 100; i++){ 
     cout << "#" << i << " " << test[i] << endl; 
    } 

    int *b = &test[0]; 

    cout << *b << endl; 

    int *x = b + (i * sizeof(int) * max_cols) + (sizeof(int) * j); 

    cout << *x << endl; 

    return 0; 

} 

測試應該是我的二維數組。

* x應該包含地址test[i][j] (假設我在我的代碼中有cin >> i和cin >> j)。

其中i是行,j是我想要的列。

但它似乎並沒有給我正確的地址。除非我很傻,讀錯了。

這是我被告知要解決問題的方式。

+2

你不需要'*的sizeof(int)的'。 C的指針運算會隱式地執行 – Niki 2010-12-19 09:17:53

+0

您已編輯了代碼,但以下文本不再正確,因爲如果您有一維數組,則不存在'test [i] [j]'。 – wimh 2010-12-19 10:44:34

+0

你看過[Boost Multidimensional Array](http://www.boost.org/doc/libs/release/libs/multi_array/doc/user.html)庫嗎? – 2010-12-19 14:52:16

回答

1

當然有簡單的方法,你需要分配的一維數組,但使用它作爲二維:

const int row = 5; 
const int col = 7; 
int *twoD = new int[row * col]; 
std::cout << twoD [4*row + 3]; //sample to access [3][4] 
return 0; 
+0

看我的編輯?我不確定這是否仍然適用?抱歉? – d2jxp 2010-12-19 09:00:35

+0

這仍然適用,但應該更清楚地說明3和4是行還是列。目前3是列號,4是行號。 – wimh 2010-12-19 10:52:26

+0

@ d2jxp - 從計算* x中刪除「sizeof(int)」。請注意,我的代碼仍然正確 – Dewfy 2010-12-19 17:53:45