C++ 指向指针数组的指针

C++ 指向指针数组的指针,c++,pointers,multiple-indirection,C++,Pointers,Multiple Indirection,我知道我应该知道这一点,但现在已经很晚了,我的大脑就是无法把这些碎片拼凑起来 这是一个简单的问题: 我有一个结构项。我想创建一个指向指向该项类型的指针数组的指针 例如 我想要一个ArrayPointer指向数组的点。我希望该数组在每个元素中包含一个指向项的指针 我如何在C++中做这个,或者更精确地说,我需要在哪里放置多少个去操作符?我知道如何声明基本(单间接)指针,并且非常流利地使用它们 如果可能,我需要以下步骤的信息: 声明阵列指针 正在初始化大小为s的ArrayPointer 使用新项初始化

我知道我应该知道这一点,但现在已经很晚了,我的大脑就是无法把这些碎片拼凑起来

这是一个简单的问题:

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

例如

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

<>我如何在C++中做这个,或者更精确地说,我需要在哪里放置多少个去操作符?我知道如何声明基本(单间接)指针,并且非常流利地使用它们

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

声明
阵列指针

正在初始化大小为s的
ArrayPointer

使用
新项初始化
阵列指针的每个元素

例如:

for(int i=0;i

我觉得一旦有人回复我,我就要使劲把脸伸到手掌上,我的鼻子都要断了

您需要的是一个
struct item*
数组,它是指向
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;
}
#包括
#包括
使用名称空间std;
结构项{
int数据;
字符串数据;
};
结构项*新项(整型数据、字符串数据){
结构项*结果=(结构项*)malloc(sizeof(结构项));
结果->数据=数据;
结果->更多数据=更多数据;
返回结果;
}
结构项**数组;//我们事先不知道阵列的大小。
int main(){
int arraySize=3;//我们从某个地方得到这个值(用户输入?)。
数组=(结构项**)malloc(3*sizeof(结构项*);
//现在阵列已分配。有足够的空间
//排列指针。
数组[0]=newItem(5,“ant”);//让我们制作一些项。注意
数组[1]=newItem(90,“bear”);//newItem()返回指向
数组[2]=newItem(25,“cat”);//一个项。
返回0;
}

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

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

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

item**ArrayPointer=新项*[s];
对于(int i=0;i数据=i;
ArrayPointer[i]->moreData=“更多数据”;
}
要释放已分配的内存,可以按相反顺序释放

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

delete [] ArrayPointer;
for(int i=0;i
否则,如果s是一个常数,那么您可以简单地声明一个指针数组。比如说

item * ArrayPointer[s];
for ( int i = 0; i < s; i++ )
{
    ArrayPointer[i]->data = i;
    ArrayPointer[i]->moreData = "More Data";
}
item*ArrayPointer[s];
对于(int i=0;i数据=i;
ArrayPointer[i]->moreData=“更多数据”;
}
文件.h

struct item {
    int data;
    string moreData;
};

item ** array;
file.cpp

array = new item*[s];

for(int i = 0; i < s; i++)
{
    array[i] = new item;
    array[i]->data = 10;
    array[i]->moreData = "data";
}
array=新项*[s];
对于(int i=0;idata=10;
数组[i]->moreData=“data”;
}

自己做一个因子并使用
std::vector
std::vector
。我知道如何做,问题是我需要数组是伪动态的(我需要在运行时声明它的大小一次)。简单的版本是:
item*psDynamicArr;psDynamicArr=新项目[尺寸]但在这种情况下,数组将包含项,我需要它包含指向项的指针。好的,我已经修改了代码,这样您就不会提前声明其大小。谢谢。我缺少的是
newitem*[s]
我以前从未见过这样的确切陈述。我所有的尝试都涉及到
new*items]
。再次感谢!好极了。我现在还可以将每个元素初始化为NULL,这样我就可以将使用的内存量保持在最小。
item * ArrayPointer[s];
for ( int i = 0; i < s; i++ )
{
    ArrayPointer[i]->data = i;
    ArrayPointer[i]->moreData = "More Data";
}
struct item {
    int data;
    string moreData;
};

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

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