如何创建指向结构的指针数组

How to Create an array of pointers to structs?

本文关键字:结构 指针 数组 何创建 创建      更新时间:2023-10-16

我有

struct Item {int id; string name; float sellprice; int qstock;};
struct Sale {int id; int quantity; double tcost;};

我想创建一个包含 100 个索引的数组,这样当我取消引用数组位置时,我将处于结构位置。此外,必须使用 malloc 为结构分配内存。

例如

*(items[0]).id=10; //will store id=10 in first index struct.

但是我不确定如何声明指针数组。我是否需要创建一个指向结构的指针,然后创建一个指向该指针的数组?

itemsPtr *Item;
itemsPtr items[100];
items[0]->id=10; 

还是会像这样。

Item *items[100];

我尝试了其中一些变体并遇到了问题。另外,当我必须将此指针数组传递给函数时,我是否只传递数组名称,因为它是指针还是什么?

如果你使用的是 C,你可以执行以下操作:

Item* items[100]; //an array of Item*

要分配新的Item,并在数组中存储指向此Item的指针,您可以执行以下操作:

items[i] = malloc(sizeof(Item));

要访问元素,可以使用取消引用(*(或箭头(->(运算符。如果您只想访问结构的成员,则可能首选后者:

items[i]->id
*(items[i]).id

要将数组传递给函数,您只需将数组传递items就像传递普通数组一样。

在数组超出范围之前,请确保清理分配的Item。因此,对于您在数组中初始化的每个值:

free(items[i])

当然,如果您使用的是C++,则需要避免使用malloc/free,而是按照标准使用newdelete运算符(不能混合使用它们(。