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

标签 java c++ pointers

这个问题对你们中的一些人来说可能有点不言自明,但我真的想了解以下之间的相似之处:List myList = new ArrayList<Vertex>(); { 在 JAVA 中} 和 Vertex* myList = new Vertex[size] {在 C++ 中}。那有什么意义*在 Java 中不存在的 C++ 中。我知道它指向列表的第一个元素..我们什么时候应该使用 * ?它只是用于 vector 还是?

最佳答案

当这两种语言有不同的假设时,我们不能谈论异同。

在 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?

关于java - {c++} Vertex* myList 和 {java} List myList 有何相似之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564201/

相关文章:

java - 无法在 PDF 查看器应用程序中打开 PDF

java - 使用 iText 或其他方式将 PDF 转换为多个 JPG

java - java中的默认值

c++ - ffmpeg滤镜图像处理

c++ - -> 的基操作数没有非指针类型的指针 ’

c++ - 将指向基类型的指针与派生类型的指针进行比较

c++ - 作业 : Making an array using pointers

java - JTable 的 RowSorter 未正确排序整数 (1,10,100...2,20...3)

c++ - std::is_nothrow_copy_constructible 的实现是什么?

C++ 字符串声明