Все рассмотренные ранее примеры организации переменных, называется организация статических переменных. Для таких переменных память выделяется автоматически при запуске программы и так же автоматически освобождается при завершении программы. В этом случае обращение к переменной происходит по её идентификатору. Но существует и другой способ обращения к переменной – по ее адресу, по которому записано значение. Для этого необходима переменная для хранения адреса, которая называется указателем.
Указатель– это переменная, значением которой является адрес памяти, по которому хранится объект определённого типа.
Значение указателя–это без знаковое целое представляющее собой адрес переменной любого типа.
Формат объявления указателя:
Тип [ модификатор] * имя_указателя;
Тип * имя_указателя;
Тип – идентификатор типа переменной, адрес которой будет содержать переменная-указатель.
[модификатор] – необязателен, предназначен для объявления размера ОП, отведенной под указатель. По умолчанию размер ОП установлен 16 бит.
*(звёздочка) – свидетельствует о том, что переменная с указанным идентификатором является указателем. Чтобы объявить несколько указателей, звёздочку ставят перед каждым идентификатором.
Пример объявления указателей
char* ps ; // указатель на символьную переменную
float *ptr ; // указатель на переменную с плавающей точкой
int *px, *py ; // указатели на целочисленые переменные
char* p, ch ;
// указатель p на символьную переменную и ch - символьная переменная.
Идентификатор переменной - указатель лучше начинать с символа р.
Пример инициализации указателей нулевым значением
char* ps = 0 ;
int *px = 0, *py = 0 ;
char *p = 0 ;
double* pD = 0 ;
При объявлении указателя на переменную (любого типа), оперативная память ещё не выделена под переменную, поэтому указатель не имеет определенного адреса.
& - Взять адрес.Получить адрес переменной.
Пример взятия адреса &
#include <iostream>
using namespace std ;
int main ( )
{
int x = 5 ;
int * px = & x ; // взятие адреса x
cout << "Value x\t\t" << x << endl ; // вывод значения x
cout << "Address x\t" << & x << endl ; // вывод адреса x