gpt4 book ai didi

c++ - C++中的指针结构和动态内存分配

转载 作者:行者123 更新时间:2023-11-28 06:23:12 25 4
gpt4 key购买 nike

我有两个结构,其中第二个结构嵌套了第一个结构:

struct first
{
int a;
};

struct second
{
first nested;
};

现在的问题是第二个结构必须通过指针动态分配。此外,嵌套的第一个结构必须是通过指针动态分配的数组,其数组大小必须通过输入文件读入。

我知道如何读入它,但我不知道如何访问它。例如,假设大小为 8。在给定指针格式的情况下,我将如何指定第二个结构的值?

我尝试假设 ptr 指向第一个结构,ptr1 指向第二个结构 ptr1->((ptr+count)->a) 在这里我们可以通过循环处理它。这是行不通的。所以我想知道如何初始化第二个结构的值,该结构的成员包括 n 元素数组中的所有 n 结构。

最佳答案

Vector 真的很简单,只需将结构粘贴在类型所在的位置,然后像使用任何其他数组一样使用它。虽然你所描述的听起来确实像链表,但嘿 vector 可能更适合你 :)

#include <vector>

//main
vector <Type> myArray(8); //set the number of elements you want

myArray[0] = blablabla

更具体的例子:

struct first
{
int a;
};

vector <first> myArray(8);

first[0].a = 1; // you get the idea :)

编辑从评论来看,这在我看来更符合你的口味。

struct bla { 
int num;
};

//in main
bla *balBla = NULL;
blaBla = new(bla[8]); //There made on the fly dynamic man
blaBla[0].num = 7;
//Don't forget to delete when done or scary memory leak!!!
delete[] blaBla;

上次编辑 如果这不是您想要的,那么没有人会理解您的意思

#include <iostream>
using namespace std;

struct b {
int num;
};

struct a {
b *nested = NULL;

a(){} //Default Constructor

a(int elements) {
nested = new(b[elements]);
} //Lets you add elements to nested at initialization

void addElem(int elements) {
if (nested != NULL) {
delete[] nested;
}
nested = new(b[elements]);
} //Redefine or make new array

~a() {
delete[] nested;
} //destructor
};


int main() {
a myStupidObj(3);
myStupidObj.nested[0].num = 69;
myStupidObj.nested[1].num = 77;
myStupidObj.nested[2].num = 666;

cout << "Struct of one D array of structs" << endl;
cout << myStupidObj.nested[0].num << endl;
cout << myStupidObj.nested[1].num << endl;
cout << myStupidObj.nested[2].num << endl;

//Make 2d version
a *my2DStupidObj = new(a[2]);
my2DStupidObj[0].addElem(3);
my2DStupidObj[0].nested[0].num = 666;
my2DStupidObj[0].nested[1].num = 6969;
my2DStupidObj[0].nested[2].num = 80085;

cout << "array of struct of one D array of structs" << endl;
cout << my2DStupidObj[0].nested[0].num << endl;
cout << my2DStupidObj[0].nested[1].num << endl;
cout << my2DStupidObj[0].nested[2].num << endl;

my2DStupidObj[1].addElem(3);
my2DStupidObj[1].nested[0].num = 11;
my2DStupidObj[1].nested[1].num = 111;
my2DStupidObj[1].nested[2].num = 1111;

cout << my2DStupidObj[1].nested[0].num << endl;
cout << my2DStupidObj[1].nested[1].num << endl;
cout << my2DStupidObj[1].nested[2].num << endl;

delete [] my2DStupidObj;
return 0;
}

关于c++ - C++中的指针结构和动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com