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