C ++ - 这个双指针/数组结构到底意味着什么?我无法想象它

时间:2011-02-07 17:13:18

标签: c++ arrays pointers data-structures

这是在C ++代码

YInterface ** Y_list;

int numberofYInterfaces;

然后

numberofYInterfaces=1;

Y_list = new YInterface *[numberofYInterfaces];        //What ??????

我很难描绘Y_list的结构?然后想象一下,如果numberofYInterfaces变成多于一个,甚至是2?

,我会感到困惑

OOPS 抱歉,我忘了写下面这句话:

Y_list[i]= new AnotherClass();

//以后添加到我的原始问题中。感谢Eric Fortin的单挑。 注意:AnotherClass继承自YInterface。

感谢任何帮助

4 个答案:

答案 0 :(得分:12)

当您声明Y_list时,您会得到一个带有未指定值的变量:

Y_list
+-------+
|       |
+-------+

当您使用new[]分配它时,它指向分配的任何new[],在这种情况下是一个指针数组:

Y_list         array
+-------+     +-------+
|   o---+---->|       |
+-------+     +-------+
              |       |
              +-------+
              |       |
              +-------+
              |       |
              +-------+
              |       |
              +-------+

此时,您还没有任何YInterface个对象。你只需要分配空间来保存指针,如果它们存在的话。

最后,为其中一个元素Y_list[i] = new AnotherClass指定一个值。那是YInterface后代存在的时候,但到目前为止只有一个。{1}}后代。在循环中运行该代码,您将获得多个实例。但是你仍然只有一个数组,并且有一个指向该数组的指针。

Y_list         array         AnotherClass
+-------+     +-------+     +-------+
|   o---+---->|   o---+---->|       |
+-------+     +-------+     |       |
              |       |     |       |
              +-------+     |       |
              |       |     |       |
              +-------+     +-------+
              |       |
              +-------+
              |       |
              +-------+

要释放所有这一切,请记住每个delete语句都有一个new语句,每个delete[]都有new[]个语句:

delete Y_list[i];

delete[] Y_list;

答案 1 :(得分:2)

这意味着它是YInterface上动态分配的指针数组。然后假设方法blah是YInterface的一部分,你可以通过数组访问它,如:

Y_list[0]->blah();

关于你的编辑。数组中的每个项都是YInterface上的一个指针,所以为了实际指向某个东西,你需要分配它与new运算符一样。所以做Y_list[i] = new AnotherClass()确实会分配一个AnotherClass对象并在索引i的数组中存储一个指针。

请记住,虽然AnotherClass需要继承YInterface才能使其工作。

答案 2 :(得分:2)

Y_list指向一块内存,它是一个指向YInterface对象的指针数组 - 每个指针都是sizeof(YInterface *),所以这个内存块(在调用new之后)的大小为numberOfYInterfaces * sizeof(YInterface) *)。

所以Y_list只是一个普通的动态分配数组,带有numberOfYInterfaces元素,每个元素本身都是一个指向YInterface对象的指针。

答案 3 :(得分:0)

在c ++数组中是指针,也就是数组的第一个元素的内存地址是数组的名称,所以现在你拥有的是指针数组,因此**