{c ++} Vertex * myList和{java} List myList之间有何相似之处?

时间:2018-11-30 20:05:34

标签: java c++ pointers

对于某些人来说,这个问题可能有点不言自明,但我实际上是在试图了解List myList = new ArrayList<Vertex>(); {在JAVA}和Vertex* myList = new Vertex[size] {在C ++}之间的相似之处。 C ++中*在Java中不存在的意义是什么?我知道它指向列表的第一个元素。何时应该使用*?它仅用于矢量还是?

1 个答案:

答案 0 :(得分:1)

当这两种语言具有不同的假设时,我们不能谈论相似性/差异性。

在Java中,所有内容都是参考-您正在创建对象,它们存储在某个位置(堆栈/堆),但是您只能通过引用来访问它们。这意味着在myList中将保留ArrayList实例的地址(真实实例-内存中)

在C ++中,您可以将对象作为对象访问(具有所有后效应,例如,在将其作为函数的参数传递给对象时复制整个对象),也可以通过引用(使用指针-只是为了避免此类后效应,还可以使用一些特殊的礼物)赋予指针,例如遍历存储单元)。

是的-关于遍历计算机内存-C ++中有趣的事实是它正在分配固态内存块(我的意思是-接下来的N个单元格/地址在行中)以放置数组-这就是为什么您可以将数组声明为

int* a = new int[100]; // this is called dynamic allocation

因为您需要的是第一个元素的地址和对象大小(取决于指针类型)。您只需执行以下操作即可跳到下一个元素

a++

要区别使用对象/指针,您需要(或不需要)星号运算符*,这就是为什么它在C ++中发生的原因。

也请阅读What exactly is the purpose of the (asterisk) in pointers?