这会构成一个指针数组吗?

时间:2019-02-15 22:31:35

标签: c++ arrays dynamic-memory-allocation

所以我正在尝试制作一个动态分配的数组。为此,我正在尝试制作一个指针数组。我使用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 :(得分:0)

首先要注意的是不要将指针数组与指向该数组的 pointer混淆。你是第一个说的,所以我将按你的话。但是,如果您真的是第二个意思,那么以下内容将产生误导。

一般来说,要创建一个T的动态数组,

T* arr = new T[size];

因为您想要一个指针数组T必须是一个指针。例如,这里是如何创建整数指针数组。

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

类似地,指向emprec的指针数组将是

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

使用您问题中的typedef可以简化

emprecptr* arr = new emprecptr[size];

答案 1 :(得分:0)

给予

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简化了对代码的理解,并且有可能使其更易于阅读。