Указатели

Указатели

X Æ A-12


Приветствуем. Считается, что понимание указателей - ключ к понимаю С++. Однако присутствуют не только в плюсах, но практически во всех языках в том или ином виде. Необоснованно считается очень сложной темой, давайте разберемся.

Вспомните, что такое переменная. Это именованная область в памяти. Логично предположить, что каждая область в памяти имеет свое "название", свой "адрес". Причем название это записано в шестнадцатеричной системе счисления.

Продемонстрирую, как это выглядит в памяти компьютера.

На примере выше изображено три переменных типа int, и каждая из них хранится в определенной ячейки памяти. Заранее задам один вопрос, что можно сказать про эти три переменные, как они связаны?

Так, но что же на самом деле представляет из себя "название"? Вот эти цифры "0036F804", что это? Это отдельный тип данных, под названием указатель.

Указателем он называется, потому что указывает на какую-то область в памяти.

Для того, чтобы создать такой указатель, необходимо передать ему тип данных, на который он будет указывать, и поставить символ "*". Перейдем к примеру.

Остается один вопрос, что такое &?. Дело в том, что мы не можем просто написать int* ptr = a, так как мы в тип данных "указатель" пытаемся присвоить тип данных "int". Значит, & - символ, позволяющий взять адрес переменной.

Следующий логичный вопрос - если мы сейчас умеем брать адрес переменной, то как нам посмотреть, что хранится по конкретному адресу? Для этого нам опять поможет символ "*".

Давайте рассмотрим пример с выводом в консоль.

13 строка - вывод переменной "а", a = 5;

14 строка - вывод ptr. Наглядно видно, что из себя представляет тип данных "указатель". Указатель - адрес в памяти.

15 строка - мы смотрим, что хранится по этому адресу, используя "*". По этому адресу хранится переменная a = 5.

16 строка - мы, как и ранее, смотрим, что хранится по этому адресу, и данному объекту(в нашем случае переменной a) присваивается значение 7.

Обратите внимание, значение переменной было изменено безвозвратно, однако нигде не было явно указано "a = 7".


А теперь ответ на вопрос, что же связывает те три переменные из первого примера. Вспомните, что int занимает в памяти 4 байта, при этом адреса этих трех переменных отличаются друг от друга на 4. Это значит, что в памяти компьютера они записаны подряд, один за другим, а значит эти три числа образуют массив. Но об этом позже.


С ув. TechMentor.

Report Page