2012-08-07 7 views
5

私はmultidumentional配列statndardの道を作成する方法を知っている:多次元配列intを指すポインタをC++で作成する方法は?

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

をそして、私は1次元配列を指すポインタを作成する方法を知っている:

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

答えて

8

。 これは新しい配列なので、戻り値の型は へのポインタに変換され、最初の要素はpointer to array[n] of intです。あなたはどちらを使用する を持っているものです。

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

もちろん、あなたが本当に全く新しい配列を使用しないでください。 _best_solutionここでは、単純なMatrixクラスを書き、メモリに std::vectorを使用しています。あなたは、過負荷のいずれかが 、問題にあなたの気持ちにoperator()(int i, int j)をすることができますよるとインデックスのため(i, j) を使用するか、またはあなたは、第二の物価スライドを行うにはoperator[]を定義 ヘルパーを返すようにoperator[](int i)をオーバーロードすることができます。 (ヒント: operator[]int*上で定義されている、あなたは 境界がint*がプロキシとして仕事をするなど、チェックを気にしたくない場合。)また

、のようなもの:

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

は仕事をしますが、長期的にはMatrixクラスは となります。

+0

+1質問に答えるために、それが問題の正しい解決策ではない理由を説明します。 –

+1

'std :: vector'をラップする' Matrix'クラスの例については、http://stackoverflow.com/a/9760489/245265を参照してください。 –

+0

+1、私の答えよりもはるかに良い考えがありました。 –

5

もちろん、可能です。

あなたはint型へのポインタへのポインタを作成することがあります、そして構文はそれが聞こえるだけのようなものです:あなたは、おそらくあなたは、人々が通過するときのように考えるよりも、この例の詳細を見てきました

int** ptr = sales; 

文字列の配列(あなたがmain()のargvのように)では、常に文字配列の配列を渡しています。もちろん

我々は、すべての可能な場合はstd ::文字列を使用して好む:)

+4

ポインタの配列はありません。多次元配列と同じです。 –

3

私はそれがこのようなものだった覚えている:式new int[m][n]array[m] of array[n] of intを作成

int** array = new int*[m]; 
for(int i=0; i<m; i++) { 
    array[i] = new int[n]; 
} 
関連する問題