Два ваших комментария неверны. Возможно, исправленные комментарии прояснят ситуацию? (Я предполагаю, что имена функций указывают на то, для чего они предназначены, хотя такие предположения не всегда точны.)
list2 = &list; //Sets the values to be the same
Нет, это вызывает list2
, чтобы указать на список, который вы только что очистили. Существует только один список, только один набор значений в списке.
list.addHead("I'm meant to be here"); //Adds this as head of both lists
Нет, список только один. Это добавляет «Я должен быть здесь» к началу списка .
*list2 = list; //Unsure what this does
Это берет список, на который list2
указывает ( aka list
на две строки ранее) и заменяет его содержимое содержимым list
. То есть он выполняет самоназначение способом, который может не обнаруживаться компилятором go, следовательно, он может избежать оптимизации. (Он также может go не быть обнаружен студентом, пытающимся пройти стресс-тест.;)) Логически, однако, эта строка функционально такая же, как list = list;
.
printFunc(*list2); //prints the contents of the list
Это печатает ноль? Это говорит о том, что ваш оператор присваивания неправильно обрабатывает самопредставление.