Для полноты картины, вот лучший способ сделать это в C ++, когда вы знаете, что границы массива заблаговременно. Преимущество использования следующего класса заключается в том, что вам не нужно заботиться о вызове delete [] для ваших данных. Это означает, что этот класс будет безопасным для исключений, и все другие замечательные вещи о RAII .
template<typename T, int width, int height>
class MultiArray
{
private:
typedef T cols[height];
cols * data;
public:
T& operator() (int x, int y) { return data[x][y]; }
MultiArray() { data = new cols[width]; }
~MultiArray() { delete [] data; }
};
Использование:
MultiArray<int, 10, 10> myArray;
myArray(2, 3) = 4;
cout << myArray(2, 3);
edit: и, пока я в этом, вот настройка, которую вы можете использовать, если вы не знаете границы массива до времени выполнения:
template<typename T>
class Array2D
{
private:
const int width;
T * data;
public:
T& operator() (int x, int y) { return data[y*width + x]; }
Array2D(const int w, const int h) : width(w) { data = new T[w*h]; }
~Array2D() { delete [] data; }
};
Использование:
Array2D myArray(10, 10);
myArray(3, 4) = 42;
cout << myArray(3, 4);