Речь идет не о связанном списке.
-
.
используется для ссылки на компонент структуры, когда известен объект структуры ->
используется для ссылкикомпонент структуры, когда известен адрес объекта структуры
Как
node k, *m, *n;
m = &k;
n = new node;
k.info = "Hello"; // k is a node type object so use directly . operator
m->info = "Hi"; // m is a pointer to an object to type node, so use -> operator
n->info = "Man"; // n is a pointer to an object to type node, so use -> operator
*(m).info = "This"; // *(m) refers to an object itself, we use . operator on it
*(n).info = "Is a test"; // *(n) refers to an object itself, we use . opeartor on it
Все они имеют допустимый синтаксис
- Когда вы делаете
node k;
внутри функции она обычно располагается в стеке - Когда вы делаете
static node k;
или объявляете node k;
глобальным, она размещается в .data
или аналогичном разделе исполняемого файла - Когда вы используете
new
для выделения некоторой памяти, она обычно выделяется из кучи
В книгах используется второй пример, потому что вы заранее не знаете, сколько узлов будет использовано, поэтому нецелесообразно выделять узел как локальные переменные с тоннами определений переменных.Вместо этого указатель используется для временного выделения памяти, их инициализации и затем связывания с соответствующей позицией списка.В будущем адресные ссылки ссылок указателей в связанных списках позволят нам получить доступ к узлам связанного списка в порядке связывания.Таким образом, мы использовали node *k; k = new node;
, поэтому у нас есть адрес для объекта типа node
, поэтому естественно использовать k->info;
, но вы можете использовать любой синтаксис.Вы должны помнить, что в левой части ->
должен быть адрес типа класса / структуры, к которому вы хотите обратиться, а в левой части оператора .
должен бытьСам объект.
PS.Вы должны освободить память на delete
(которую вы выделили с помощью new
) после того, как вы закончили использовать.