Как создать многомерный, динамически определенный массив? - PullRequest
0 голосов
/ 25 апреля 2011

я знаю, как создать одномерный, динамически определенный массив

 string *names = new string[number]; //number specified by the user

, однако, когда я пытаюсь сделать его многомерным

 string *names = new string[number][number]; //doesn't work

, он не работает.что дает?я нашел это http://www.cplusplus.com/forum/beginner/63/, но полностью смущен тем, что они говорят.кто-нибудь хочет объяснить?Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 25 апреля 2011

Я попытался дать некоторые пояснения к примеру по вашей ссылке:

// To dynamically allocate two-dimensional array we will allocate array of pointers to int first. 
// Each pointer will represent a row in your matrix.
// Next step we allocate enough memory for each row and assign this memory for row pointers.

const int rows = 4; //number of rows in your matrix
const int cols = 4; //number of columns in your matrix

// declaration
int ** a; 

/* allocating memory for pointers to rows. Each row will be a dynamically allocated array of int */
a = new int*[rows];
/* for each row you allocate enough memory to contain cols elements. cols - number of columns*/ 
for(int i = 0; i < rows; i++)
   a[i] = new int[cols];
0 голосов
/ 25 апреля 2011

Структура памяти одноразмерного массива (скажем, с тремя элементами) выглядит так:

names ------> [0] [1] [2] 

А двумерный массив (скажем, с 3 X 3 элементами) будет выглядеть так:

names ------> [0] --> [0] [1] [2] 
              [1] --> [0] [1] [2]
              [2] --> [0] [1] [2]
               ^
               |
           this is an array of pointers

то есть двумерный массив является массивом указателей на массивы, поэтому вам понадобятся ** имена на первом месте.

string **names = new string*[number]; // allocating space for array of string pointers

Теперь вам нужен каждый элемент этого массива строкуказатели для указания на массив строк.

Поэтому вам нужно будет выполнить

for(int i = 0; i < number, i++) {
   names[i] = new string[number];
}

Надеюсь, это поможет лучше понять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...