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";
}