Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Указатели.






Указатель — это переменная, в которой записан адрес ячейки памяти.

Так как указатель это обычная переменная, то имена им даются такие же, иногда программисты добавляют к ним букву «р». (pNumber).

Что бы объявить указатель, запишите тип переменной на которую будет указывать указатель, затем символ *, а за ним имя указателя.

Что бы присвоить указателю адрес переменной необходимо использовать символ &.

Что бы получить результат по адресу, куда ссылается указатель (разименовать) перед именем указателя ставиться *.

int *a, b, c=0;

b=5;

a=& b;

c=(*a)+1;

*a=7;

результат:

b=7;

c=6;

ошибка:

c=*(a+1);

 

Наиболее часто указатели используются для:

§ Размещения данных в свободных областях памяти и доступа к ним.

§ Доступам к переменным и функциям классов.

§ Передачи параметров функции по ссылке и получении более, чем одного результата.

§ Работы с массивами.

Существует условное разделение памяти с которой работает программа на несколько областей:

§ Область глобальных переменных.

§ Свободная или динамически распределённая память.

§ Регистровая память.

§ Сегменты программы.

§ Стековая память.

Локальные переменные и параметры функций располагаются в стековой памяти, программный код храниться в сегментах, глобальные переменные в области глобальных переменных. Локальные переменные — это переменные которые «видит» только часть программы, глобальные — доступны из любой точки программы. Свободная память распределяется между динамическими объектами. Ячейкам динамической памяти нельзя присвоить имя (если это произойдёт, то это уже стековая память), к ним можно обратиться по адресу, к тому же адрес можно передать в любую область программы, следовательно данные, хранящиеся по этому адресу доступны везде.

Использование указателей в языке С может привести в ситуации, когда оператор изменяет адрес в указателе и таким образом значение будет потеряно. С++ предлагает альтернативу указателям, путём использования ссылок. Чтобы сделать переменную ссылкой, после типа надо поставить &.

Int I;

Int & ri=I; — это ссылка на I, ссылка обязательно должна быть инициализирована, то есть иметь значение, то есть куда-то ссылаться, однажды инициализировав ссылку ей нельзя присвоить другое значение. Нельзя ri=j; так как ri — это синоним i.

Ссылку можно рассматривать как постоянный указатель, который всегда разадресован, то есть его не надо разадресовывать, для того чтобы получить значения по адресу.

 

Для выделения памяти в области динамического распределения используется оператор new. Для этого подходит строка (тип данных — int):

Int *page = new int;

Когда память, выделенная под динамическую переменную больше не нужна, то её следует освободить оператором delete имя переменной. При этом переменная указатель сохраняется, но она больше не указывает ни на какой сегмент памяти. Двойное применение delete к одному и тому же указателю приводит к зависанию программы. Поэтому рекомендуется после оператора delet e, удалённому указателю присваивать значение 0. С указателями можно производить арифметические действия.

Int *a, b, *c;

*a=b;

c=a++;

с будет указывать на область памяти, следующую за а на 2 байта, так как тип переменной указателя занимает 2 байта.


Лекция № 3. Функции. Объявление и определение функции. выполнение функции. Локальные и глобальные переменные. Аргументы функции — фактические и формальные. Перегрузка функций. возвращаемые значения. Массивы.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.