Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по С++.doc
Скачиваний:
27
Добавлен:
20.08.2019
Размер:
2.26 Mб
Скачать

Указатели

Все рассмотренные ранее примеры организации переменных, называется организация статических переменных. Для таких переменных память выделяется автоматически при запуске программы и так же автоматически освобождается при завершении программы. В этом случае обращение к переменной происходит по её идентификатору. Но существует и другой способ обращения к переменной – по ее адресу, по которому записано значение. Для этого необходима переменная для хранения адреса, которая называется указателем.

Указатель – это переменная, значением которой является адрес памяти, по которому хранится объект определённого типа.

Значение указателя –это без знаковое целое представляющее собой адрес переменной любого типа.

Формат объявления указателя:

Тип [ модификатор] * имя_указателя;

Тип * имя_указателя;

Тип – идентификатор типа переменной, адрес которой будет содержать переменная-указатель.

[модификатор] – необязателен, предназначен для объявления размера ОП, отведенной под указатель. По умолчанию размер ОП установлен 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

cout << "Pointer px\t" << px << endl ; // вывод значения px

return 0 ;

}

*(звёздочка) – Разыменование. Получить значение переменной по её адресу

Пример разыменовывания указателя *

#include <iostream>

using namespace std ;

int main ( )

{

double v1 = 0.05, v2 = 2.5e32 ;

double * pv ; // объявление указателя

pv = & v1 ; // взятие адреса v1

cout << "pv =\t" << pv << endl ; // вывод адреса v1

cout << "v1 =\t" << v1 << endl ; // вывод значения v1

cout << "*pv = \t" ;

cout << * pv << endl ; // вывод значения v1 по адресу который хранится в указателе pv

pv = & v2 ; // взятие адреса v2

cout << "pv =\t" << pv << endl ; // вывод адреса v2

cout << "v2 =\t" << v2 << endl ; // вывод значения v2

cout << "*pv = \t" ;

cout << * pv << endl ; // вывод значения v2 по адресу который хранится в указателе pv

return 0 ;

}

= - Присваивание. Присвоить указателю адрес переменной или 0.

Пример выполнения операции присвоения

int *px = 0, *py = 0 ;

double v1 = 0.05 ;

double * pv = & v1 ;