c++ - 如何创建指向结构的指针数组?

标签 c++ arrays pointers struct

我有

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 运算符,这是标准操作符(您不能混合使用它们)。

关于c++ - 如何创建指向结构的指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49332053/

相关文章:

c - 如何将我的指针初始化为 NULL

C++ 在 boost::ptr_container 中共享元素?

javascript - 使用 html 中的 ids 定义 JavaScript 数组

java - 使用ASM访问数组

c - 指针改变变量的值

c++ - 将指向枚举的指针传递给函数

c++ - 静态库中对 c++11 原子的 undefined reference

android.hardware.Camera 每两次都无法打开

c++ - 在基本构造函数之前初始化成员。可能的?

arrays - 检查 mongo 集合中是否存在值