Указатель на массив указателей

Я знаю, что должен это знать, но уже поздно, и мой мозг просто не соберет кусочки.

Это так просто, как может возникнуть вопрос:

У меня есть структура item, Я хочу создать указатель на массив указателей на этот тип элемента.

Например.

struct item {
int data;
string moreData;
};

Я хочу иметь ArrayPointer эта точка на массив. Я хочу, чтобы этот массив содержал в каждом элементе указатель на элемент.

Как мне сделать это в C ++ или, если быть более точным, куда мне нужно добавить число операторов разыменования? Я знаю, как объявлять основные (однонаправленные) указатели, и я довольно свободно их использую.

Мне нужна информация для следующих шагов, если это вообще возможно:

Объявление ArrayPointer,

Инициализация ArrayPointer с размером с.

Инициализация каждого элемента ArrayPointer с new item,

например:

for(int i = 0; i < s; i++)
ArrayPointer[i] = // a new item

Я чувствую, что как только кто-то отправит ответ, я пойду в лицо так сильно, что сломаю нос.

2

Решение

Если я правильно понял, тогда вам нужно что-то вроде этого

item **ArrayPointer = new item *[s];

for ( int i = 0; i < s; i++ )
{
ArrayPointer[i] = new item; { i, "More Data" };
}

Или же

item **ArrayPointer = new item *[s];

for ( int i = 0; i < s; i++ )
{
ArrayPointer[i] = new item;
ArrayPointer[i]->data = i;
ArrayPointer[i]->moreData = "More Data";
}

Освободить выделенную память вы можете в обратном порядке

for ( int i = 0; i < s; i++ )
{
delete ArrayPointer[i];
}

delete [] ArrayPointer;

В противном случае, если s является константой, вы можете просто объявить массив указателей. Например

item * ArrayPointer[s];
for ( int i = 0; i < s; i++ )
{
ArrayPointer[i]->data = i;
ArrayPointer[i]->moreData = "More Data";
}
1

Другие решения

file.h

struct item {
int data;
string moreData;
};

item ** array;

file.cpp

array = new item*[s];

for(int i = 0; i < s; i++)
{
array[i] = new item;
array[i]->data = 10;
array[i]->moreData = "data";
}
0

То, что вы хотите, это массив struct item *, которые являются указателями на item Структуры.

Массив таких указателей является struct item **,

#include <string>
#include <cstdlib>
using namespace std;

struct item {
int data;
string moreData;
};

struct item * newItem(int data, string moreData) {
struct item *result = (struct item *) malloc(sizeof(struct item));
result->data = data;
result->moreData = moreData;
return result;
}

struct item ** array;  // We don't know the size of the array in advance.

int main() {
int arraySize = 3;  // We get this value from somewhere (user input?).
array = (struct item **) malloc(3*sizeof(struct item *));
// Now the array has been allocated. There is space for
//  arraySize pointers.
array[0] = newItem(5, "ant");    // Let's make some items. Note that
array[1] = newItem(90, "bear");  //  newItem() returns a pointer to
array[2] = newItem(25, "cat");   //  an item.
return 0;
}
0
По вопросам рекламы [email protected]