Что такое использование и объяснение что-то вроде этого ?:Использование массива ptr-to-ptr?
int capacity;
int** number;
this->number = new int*[this->capacity];
Я учусь на экзамен и в тестовом экзамене они поставили требование использования объекта указатель на указатель и делает динамический массив из него. Есть два класса; Кошелек & WalletKeeper. В решениях, которые они сделали это в заголовочном-файле WalletKeeper:
private:
Wallet** wallets;
int capacity;
int size;
/*other stuff below this*/
И в конструкторе:
WalletKeeper::WalletKeeper(int capacity)
{
this->capacity = capacity;
this->size = 0;
this->wallets = new Wallet*[this->capacity];
this->initiate();
}
Я понимаю, основной динамический массив так:
Wallet * wallets = new Wallet[capacity];
Это означало бы, что вы создаете указатель, указывающий на место в памяти, где создан этот массив кошельков, поэтому вы можете изменять содержимое этих слотов памяти. Но почему бы вам сделать указатель на массив указателей? Какая польза?
Кошелек не имеет массив своей собственной, я бы понял это иначе, потому что я прочитал это: The correct way to initialize a dynamic pointer to a multidimensional array?
Профессора не в отпуске до дальнейших проволочек.
Почему бы вам когда-нибудь сделать массив массивов, которые могут содержать другие массивы? Например, матрица может быть представлена как массив массивов (массив чисел для каждой строки, вся матрица - всего лишь массив строк). – ForceBru
Я работаю над ответом, но прежде чем я это сделаю, я просто хочу выразить, насколько я потрясен, что профессора все еще учат C++, как это. Им следовало бы научить вас просто использовать объект 'std :: vector' или 'std :: vector >', любой из которых был бы бесконечно предпочтительнее этого подверженного ошибкам и плохого соответствия, для практического применения. –
Xirema
Это массив кошелек *. Это не «естественный» современный C++, и его следует выполнять с помощью классов контейнеров, и, как это возможно, следует избегать необработанного распределения памяти. – crashmstr