- •«Северный (Арктический) федеральный университет имени м.В. Ломоносова»
- •Оглавлени
- •1 Операции «*» и «&» при работе с указателями.
- •Int a(0);// объявляем переменную, инициализируем её значением «0»;
- •Int *p//по адресу, записанному в переменной p, будет хранится переменная типа int или, другими словами, p указывает на тип данных int.
- •4.2 Операция delete
- •5 Задачи
Int a(0);// объявляем переменную, инициализируем её значением «0»;
double C(0.0); // объявляем переменную, инициализируем её значением «0.0»;
cout << "A=" << A << "(0x" << &A << ")" << endl; // выводим адрес переменной
cout << "C=" << C << "(0x" << &C << ")" << endl;// «0x» указывает на шестнадцаричную систему исчисления.
Использование операции << позволяет показать адреса в шестнадцатеричном представлении, что видно из наличия префикса 0x перед каждым числом. Это обычная форма записи адресов памяти. Каждая переменная имеет уникальный адрес. При выводе на дисплей мы замесаем, что адреса отличаются друг от друга двумя байтами. Это произошло потому, что переменная типа int занимает два байта в памяти (в 16-битной системе). Если бы использовались переменные типа char, то значения адресов отличались бы на единицу, так как переменные занимали бы по 1 байту, а если бы использовался тип double, то адреса отличались бы на 8 байтов.
Адреса расположены в убывающем порядке, потому что локальные переменные хранятся в стеке, где адреса располагаются по убыванию. Если же использовать глобальные переменные, то их адреса располагаются в порядке возрастания, так как глобальные переменные хранятся в куче, где адреса располагаются по возрастанию.
Следует помнить, что адреса переменных — это не то же самое, что их значение.
Адресное пространство ограничено. Возможность узнать, где расположены в памяти переменные, полезна, а видеть само значение адреса нам нужно не всегда. Потенциальное увеличение наших возможностей в программировании требует реализации следующей идеи: нам необходимы переменные, хранящие значение адреса. Нам знакомы переменные, хранящие знаки, числа с плавающей точкой, целые и т. д. Адреса хранятся точно так же. Переменная, содержащая в себе значение адреса, называется переменной-указателем или просто указателем.
С помощью указателей можно обрабатывать массивы, строки и структуры, создавать новые переменные в процессе выполнения программы, передавать адреса фактических параметров.
Указатель — это переменная, значением которой является адрес памяти, по которому хранится объект определенного типа (другая переменная). Например, если C - это переменная типа char, а P - указатель на C, значит в P находится адрес, по которому в памяти компьютера хранится значение переменной C.
Указатели используются для передачи по ссылке данных, что намного ускоряет процесс обработки этих данных (в том случае, если объём данных большой), так как их не надо копировать, как при передаче по значению, то есть, используя имя переменной. В основном указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере. Ведь программист заранее не может знать, какого размера нужен массив тому или иному пользователю, в таком случае используется динамическое выделение памяти под массив.
Как и любая переменная, указатель должен быть объявлен. При объявлении указателей всегда указывается тип объекта, который будет храниться по данному адресу: тип имя_переменной;
Например:
