Каковы сходства между {c ++} Vertex * myList и {java} List myList? - PullRequest
0 голосов
/ 30 ноября 2018

Этот вопрос может быть немного понятен для некоторых из вас, но я действительно пытаюсь понять, в чем сходство: List myList = new ArrayList<Vertex>(); {В JAVA} и Vertex* myList = new Vertex[size] {В C ++}.В чем смысл того * в C ++, который не существует в Java.Я знаю, что он указывает на первый элемент списка ... когда мы должны использовать *?Это только для векторов или?

1 Ответ

0 голосов
/ 30 ноября 2018

Мы не можем говорить о сходстве / различии, когда эти два языка имеют разные предположения.

В Java все является справочным - вы создаете объекты, они хранятся где-то (в стеке / куче), но выдоступ к ним только по ссылке.Это означает, что в myList будет храниться адрес для экземпляра ArrayList (реальный экземпляр - в памяти)

В C ++ вы можете обращаться к объекту как к объектам (со всеми последующими эффектами, такими как копирование всего объекта, когдапередача в качестве аргумента функции), но также и по ссылке (с помощью указателей - просто для того, чтобы избежать таких последствий, а также для использования некоторых специальных подарков, данных указателям, таких как итерации по ячейкам памяти).

Да - насчет итерации по компьютерной памяти - забавный факт в C ++ состоит в том, что он выделяет сплошной блок памяти (я имею в виду - следующие N ячеек / адресов в строке) для размещения массива там -вот почему вы можете объявить ваш массив как

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

, потому что вам нужен адрес первого элемента и размер объекта (определяется типом указателя).Вы можете перейти к следующему элементу, просто выполнив

a++

Чтобы различать использование объекта / указателя, вам нужен (или не нужен) оператор звездочки *, и поэтому он происходит в C ++.

читайте также Какова цель (звездочка) в указателях?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...