1

我正在尝试在 C++ 中编写一个指向结构的指针数组。我的主要目标是能够动态地添加指向数组的指针。我在使用合成器时遇到问题

  struct items
  {
    int member1;
    int member2;
  };

  int N=5;
  items **ptr=new item *[N]; // This is a ptr to an array of ptr's. Each ptr 
                             // in this array needs to point to an items struct. 

我的问题是如何从这一点开始写入结构的对象。我知道我需要先创建它们,但我不知道该怎么做。

4

3 回答 3

3

您只分配一个指针数组item *,您还需要为每个指针分配内存item,例如:

struct item // naming it 'items' might be confusing, and was used inconsistently
            // in your code sample
{
    int member1;
    int member2;
};

int N=5;
item **ptr=new item *[N];

for(int i = 0; i < N; ++i)
{
    ptr[i] = new item();
}

访问您的结构成员如下所示:

ptr[2]->member1 = 42; // Sets member1 of the 3rd item element to 42

请注意,您需要在某处释放分配的内存,如下所示:

for(int i = 0; i < N; ++i)
{
    delete ptr[i];
}
delete [] ptr;

我一般对于你最好使用 c++ 标准容器,例如:

#include <vector>

int N = 5;
std::vector<item> myItems;
myItems.resize(N,item());

myItems[2].member1 = 42; // Sets member1 of the 3rd item element to 42

它将在内部为您完成所有内存管理。
如果您使用的是并且不需要动态大小的数组,您甚至可以使用以下方法完全避免堆分配内存std::array

#include <array>

std::array<item,5> myItems; // Size is fixed to 5, you can't use a variable here

myItems[2].member1 = 42; // Sets member1 of the 3rd item element to 42
于 2013-10-15T17:19:45.347 回答
1

您可以通过 将对象添加到数组中ptr[i] = new items()items** ptr您可以通过访问数据ptr[i]->member1。但我强烈推荐使用 stl 容器和智能指针。

于 2013-10-15T17:17:44.410 回答
0

首先,您必须完成分配步骤。

for(int i=0;i<N;i++)
  ptr[i]=new items;

然后您可以使用例如访问数组:

ptr[0]->member1=123;
于 2013-10-15T17:18:25.490 回答