2

我知道我应该知道这一点,但为时已晚,我的大脑无法将这些碎片拼凑起来。

这是一个直截了当的问题:

我有一个结构item。我想创建一个指向该项目类型的指针数组的指针。

例如。

struct item {
    int data;
    string moreData;
};

我想要一个ArrayPointer指向数组的那个点。我希望该数组在每个元素中包含一个指向项目的指针。

我如何在 C++ 中执行此操作,或者更具体地说,我需要在哪里放置多少个取消引用运算符?我知道如何声明基本(单间接)指针,并且非常熟练地使用它们。

如果可能的话,我需要以下步骤的信息:

宣布ArrayPointer.

ArrayPointer用大小 s初始化。

ArrayPointer用初始化每个元素new item

例如:

for(int i = 0; i < s; i++)
    ArrayPointer[i] = // a new item

我觉得一旦有人发布答案,我就会用力捂脸,以至于我的鼻子都折断了。

4

3 回答 3

1

如果我理解正确,那么您需要这样的东西

item **ArrayPointer = new item *[s];

for ( int i = 0; i < s; i++ )
{
    ArrayPointer[i] = new item; { i, "More Data" };
}

或者

item **ArrayPointer = new item *[s];

for ( int i = 0; i < s; i++ )
{
    ArrayPointer[i] = new item;
    ArrayPointer[i]->data = i;
    ArrayPointer[i]->moreData = "More Data";
}

要释放分配的内存,您可以按相反的顺序

for ( int i = 0; i < s; i++ )
{
    delete ArrayPointer[i];
}

delete [] ArrayPointer;

否则,如果 s 是一个常量,那么您可以简单地声明一个指针数组。例如

item * ArrayPointer[s];
for ( int i = 0; i < s; i++ )
{
    ArrayPointer[i]->data = i;
    ArrayPointer[i]->moreData = "More Data";
}
于 2014-11-23T05:32:46.000 回答
0

你想要的是一个数组struct item *,它们是指向item结构的指针。

此类指针的数组是struct item **.

#include <string>
#include <cstdlib>
using namespace std;

struct item {
    int data;
    string moreData;
};

struct item * newItem(int data, string moreData) {
    struct item *result = (struct item *) malloc(sizeof(struct item));
    result->data = data;
    result->moreData = moreData;
    return result;
}

struct item ** array;  // We don't know the size of the array in advance.

int main() {
    int arraySize = 3;  // We get this value from somewhere (user input?).
    array = (struct item **) malloc(3*sizeof(struct item *));
    // Now the array has been allocated. There is space for
    //  arraySize pointers.
    array[0] = newItem(5, "ant");    // Let's make some items. Note that
    array[1] = newItem(90, "bear");  //  newItem() returns a pointer to
    array[2] = newItem(25, "cat");   //  an item.
    return 0;
}
于 2014-11-23T05:28:37.647 回答
0

文件.h

struct item {
    int data;
    string moreData;
};

item ** array;

文件.cpp

array = new item*[s];

for(int i = 0; i < s; i++)
{
    array[i] = new item;
    array[i]->data = 10;
    array[i]->moreData = "data";
}
于 2014-11-23T05:36:02.003 回答