Это делает массив указателей? - PullRequest
0 голосов
/ 16 февраля 2019

Итак, я пытаюсь создать динамически распределенный массив.Для этого я пытаюсь сделать массив указателей.Я использовал typedef для определения типа указателя и попытался создать массив указателей, используя этот код.

emprec * arrptr = new emprec[size];

Мой вопрос заключается в том, является ли это правильным способом создания массива указателей?Если нет, то что было бы лучшим способом сделать это.

emprec определен в программе, как показано ниже

struct emprec
{
int id;
float salary;
};
typedef emprec * emprecptr;
typedef emprec arr[MAXDBSIZE];

(я студент и пытаюсь узнать большео динамическом размещении)


После любезной помощи вам, ребята, здесь стало ясно, что я изначально создал массив emprec, который будет массивом структур.Я не хотел этого.Изменение кода на

emprecptr* DBarray = new emprecptr[dbsize];

теперь дает мне массив указателей.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Если

struct emprec
{
    int id;
    float salary;
};

, тогда

emprec * arrptr = new emprec[size];

не является массивом указателей, а массивом emprec.Но поскольку у вас также есть typedef emprec * emprecptr;, то

emprecptr * arrptr = new emprecptr[size];

будет массивом указателей (на emprec).Без typedef вы должны были бы написать его как:

emprec* * arrptr = new emprec*[size];

Но, как вы можете видеть, typedef упрощает понимание кода и, возможно, облегчает его чтение.

0 голосов
/ 16 февраля 2019

Первый пункт - не путать массив указателей с указателем на массив .Ты сказал первым, так что я собираюсь поверить тебе на слово.Но то, что следует, вводит в заблуждение, если вы действительно имели в виду второе.

В общем случае для создания динамического массива T вы пишете

T* arr = new T[size];

Так как вам нужен массив указателей Tдолжен быть указателем.Например, вот как создать массив целочисленных указателей.

int** arr = new int*[size];

Аналогично, массив указателей на emprec будет

emprec** arr = new emprec*[size];

Это можно упростить, используя typedef вВаш вопрос

emprecptr* arr = new emprecptr[size];
...