2012-08-07 99 views
5

我知道如何創建一個multidumentional陣列statndard方式:如何在C++中創建一個指向int多個數組的指針?

const int m = 12; 
const int y = 3; 
int sales[y][n]; 

而且我知道如何創建一個指向一個維數組的指針:

int * ms = new int[m]; 

但是,它可以創建一個指針那指向多分區數組?

int * sales = new int[y][m]; // doesn't work 
int * mSales = new int[m]; // ok 
int * ySales = new int[y]; // ok 
mSales * ySales = new mSales[y]; // doesn't work, mSales is not a type 

如何創建這樣一個指針?

+1

可能的重複[如何在C++中使用數組?](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c) – fredoverflow 2012-08-07 15:40:56

回答

8

表達new int[m][n]創建array[m] of array[n] of int。 由於它是一個新數組,因此返回類型轉換爲指向 的第一個元素:pointer to array[n] of int。這是你必須 的內容:

int (*sales)[n] = new int[m][n]; 

當然,你真的不應該使用數組新意可言。這裏的最佳解決方案是編寫一個簡單的Matrix類,使用 std::vector作爲內存。根據你的感情就此事, 您可以超載operator()(int i, int j)和使用(i, j) 索引,或者你可以重載operator[](int i)返回一個 助手定義operator[]做第二個指數。 (提示: operator[]定義上int*;如果你不想 邊界檢查等,int*將做的工作作爲代理打擾。)

另外,像:

std::vector<std::vector<int> > sales(m, n); 

會做這項工作,但從長遠來看,Matrix類將會值得 它。

+0

+1回答問題並解釋爲什麼這不是解決問題的正確方案。 – 2012-08-07 13:39:04

+1

請參閱http://stackoverflow.com/a/9760489/245265,其中包含一個包含'std :: vector'的Matrix類。 – 2012-08-07 13:49:00

+0

+1,比我的回答要好得多。 – 2012-08-07 13:55:29

5

當然,這是可能的。

您將創建一個指針的指針爲int,而且語法就像它的聲音:

int** ptr = sales; 

,你可能看到比你想象的那樣,當人們傳遞更多的例子字符串數組(像你在main()中的argv中那樣),你總是傳遞一個字符數組的數組。

當然,我都比較喜歡使用的std :: string儘可能:)

+4

指針數組不是與多維數組相同。 – 2012-08-07 13:37:15

3

我記得是這樣的:

int** array = new int*[m]; 
for(int i=0; i<m; i++) { 
    array[i] = new int[n]; 
} 
相關問題