Что именно означает эта декларация как английское предложение? - PullRequest
0 голосов
/ 06 ноября 2011

если я напишу этот код: Node* head;

Я понимаю, что head это тип переменной Node, и он хранит тип адреса переменной Node.

Это правда?

Ответы [ 4 ]

4 голосов
/ 06 ноября 2011
Node* head;

Это означает создание переменной по имени head, которая может хранить адрес другой переменной типа данных Node.

Проще говоря, head - указатель типа Node.
Кроме того, вы никогда не должны использовать неинициализированные указатели, как это всегда инициализировать их при создании.

2 голосов
/ 06 ноября 2011

Сначала давайте получим несколько определений.

  1. Указатель - числовое значение индекса в памяти.
  2. Стек - область памяти, которая отвечает за хранение значенийлокальные переменные
  3. Куча - область памяти, которая отвечает за хранение долгосрочных данных.
  4. Компилятор - Программа, которая переводит код с языка программирования в 1 и 0, понятные компьютеру
Node *head;

Для этого выделяется место в стеке для указателя.Обратите внимание, что выделено только пространство для указателя, а не место для данных.Теперь Node это тип.Это говорит компилятору, какие данные находятся в этом месте.Он также сообщает компилятору, как взаимодействовать с данными.

Node *head = new Node();

Это выделяет место для указателя в стеке.Затем он выделяет пространство в куче и возвращает адрес (индекс) для хранения в пространстве в стеке.Помните, что данные в стеке исчезают после возврата функции, поэтому, если вы не вызовете delete, чтобы избавиться от данных в куче или передать ссылку, когда функция вернется, у вас не будет доступа к данным илиудали это;это называется утечкой памяти.

Node head;

Это объявление, однако, выделяет место для всех данных для объекта Node в стеке.Основное различие между этим и распределением кучи (один пример выше) состоит в том, что эта переменная является МЕСТНОЙ.Т.е. он исчезнет после возврата текущей функции.

1 голос
/ 06 ноября 2011

head - указатель на память в формате Node.

Указатель - переменная, в которой хранится адрес памяти.

http://www.cplusplus.com/doc/tutorial/pointers/

Память вашего компьютера может быть представлена ​​как последовательность ячеек памяти, каждая из которых имеет минимальный размер, которым управляют компьютеры (один байт).Эти однобайтовые ячейки памяти нумеруются последовательно, так что в любом блоке памяти каждая ячейка имеет тот же номер, что и предыдущая, плюс одна.

0 голосов
/ 06 ноября 2011

Node *head - это то, что вы написали, здесь *head - это «переменная» типа Node, а head - ссылка на нее.

Когда вы разыменовываете head (делаете * head), вы получаете свою переменную.

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