Указатели - это переменные, в которых содержатся адреса ячеек памяти. Они используются при работе с большими объёмами данных, при работе с динамическими переменными, массивами и т.д.
Стоит отметить, что при запуске на выполнение программы, в оперативную память загружаются все данные, необходимые для работы, а именно, переменные, массивы, объекты классов и т.д. Для каждого такого объекта выделяется ячейка в оперативной памяти с размером, описанным программистом. Каждая выделенная ячейка памяти имеет свой уникальный адрес. Именно эти адреса - значения переменных указателей.
Объявляется указатель следующим образом:
1 |
<тип указателя>* <имя указателя>; |
Символ “*” указывает, что эта переменная является указателем.
Значение переменной-указателю присваивается следующим образом:
1 |
<имя указателя> = &<имя переменной>; |
Символ “&” является ссылкой на адрес переменной, указанной за ним.
Рассмотрим работу с указателями на примере.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream.h> // подключаем функции ввода/вывода int main() { int var_x = 1; //объявляется переменная var_x и задаётся её значение int* adr_x = &var_x; //объявляется указатель переменной var_x и определяется адрес cout << "&var_x = " << &var_x << endl; //выводится адрес переменной var_x напрямую (На экране появляется нечто похожее на &var_x = 12ff50) cout << "adr_x = " << adr_x << endl; //выводится адрес переменной var_x через указатель (На экране появляется нечто похожее на adr_x = 12ff50) cout << "var_x = " << var_x << endl; //выводится значение переменной var_x (На экране появляется var_x = 1) cout << "*adr_x = " << *adr_x << endl; //выводится значение переменной var_x через указатель (На экране появляется *adr_x = 1) int var_y = 2; //объявляется переменная var_y и задаётся её значение int* adr_y = &var_y; //объявляется указатель переменной var_y и определяется её адрес int var_z; //объявляется переменная var_z int* adr_z = &var_z; //объявляется указатель переменной var_z и определяется её адрес var_z = var_x + var_y; //вычисляется значение переменной var_z напрямую cout << "var_z = " << var_z << endl; //выводится значение переменной var_z напрямую (Будет выведено 3, потому что var_x + var_y = 1 + 2 = 3) *adr_z = *adr_x + *adr_y; //вычисляется значение переменной var_z через указатели cout << "*adr_z = " << *adr_z << endl; //выводится значение переменной var_z через указатель (Опять будет выведено 3, потому что опять *adr_x + *adr_y = *(&var_x) + *(&var_y) = var_x + var_y = 1 + 2 = 3) cin.get(); // ожидание нажатия пользователем любой клавиши return 0; } |