Указатели и ссылки в связанных списках - PullRequest
0 голосов
/ 07 августа 2020
struct node {
    int data;
    node* next;
};

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;

    node* nu = new node;
    std::cout << *&nu << std::endl;
}

Вопрос: является ли nu адресом памяти, действительно ли указатели являются просто адресом памяти или есть что-то, чего мне здесь не хватает. Какое значение имеет * nu, это объект, содержащийся в адресе, &nu дает мне сам адрес памяти. если бы nu было целым числом, он дал бы мне число ?. Был бы признателен за помощь.

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

- это адрес памяти, указатели на самом деле просто адрес памяти или есть что-то, чего мне здесь не хватает.

nu - это указатель на node, и это означает, что nu «указывает на» место в памяти (в данном случае в куче), где был создан node. Ячейка памяти - это адрес, поэтому да, nu по сути является адресом памяти. Если вы распечатаете его, вы получите шестнадцатеричное значение - сам адрес.

Какое значение имеет * nu, это объект, содержащийся в адресе

Синтаксис например, *nu (или обычно *pointer) переводится как достижение точки, на которую указывает указатель. Оператор *, который называется оператором разыменования , используется в C ++ для получения значения, стоящего за указателем.

& nu дает мне сам адрес памяти.

& - это способ получить адрес переменной. Запись &nu означает, что вы хотите получить адрес переменной nu. Обратите внимание, что это не адрес node, а сама переменная nu. Эта переменная тоже находится в памяти (в стеке), и у нее есть адрес.

, если бы nu было целым числом, он дал бы мне номер?

Нет, ты тоже получишь адрес. & дает вам адрес переменной, а не значение. Это может показаться сложным с указателем, потому что значением указателя является адрес.

* & nu

В этом случае вы получили адрес nu переменная (& n) и сразу же достигла значения, стоящего за ней (* & nu). Это эквивалентно просто nu, потому что значение - это адрес node где-то в куче.

0 голосов
/ 07 августа 2020

&nu использует оператор адресации для получения адреса указателя, в результате чего получается указатель на указатель. Оператор косвенного обращения * затем получает содержимое нового указателя, которое является значением исходного указателя nu и является тем, что вы отправляете на cout.

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