Разделы презентаций


Технологии программирования

Содержание

Лекция 10. Указатели в С++.Каждая переменная программы имеет свой адрес, для хранения которого можно использовать указатель на эту переменную.Указатель - это переменная, значением которой является адрес другой переменной. Так как указатель

Слайды и текст этой презентации

Слайд 1Технологии программирования
Доц. каф. «Медиаменеджмента и медиапроизводства» Евич Л.Н.

Технологии программированияДоц. каф. «Медиаменеджмента и медиапроизводства» Евич Л.Н.

Слайд 2Лекция 10. Указатели в С++.
Каждая переменная программы имеет свой адрес,

для хранения которого можно использовать указатель на эту переменную.

Указатель -

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

Для описания указателей используется операция косвенной адресации *.

Лекция 10. Указатели в С++.Каждая переменная программы имеет свой адрес, для хранения которого можно использовать указатель на

Слайд 3Лекция 10. Указатели в С++.
Допустим, что переменная var1 имеет тип

int. Чтобы объявить указатель для хранения адреса этой переменной нужно

объявить переменную, например, pVar, которая будет содержать адрес значения типа int.

Это описывается так :

int *pVar.

Унарная операция &, примененная к некоторой переменной, показывает, что нам нужен адрес этой переменной, а не ее текущее значение. Если указателю нужно присвоить пустое значение, что уму присваивается значение 0.
Лекция 10. Указатели в С++.Допустим, что переменная var1 имеет тип int. Чтобы объявить указатель для хранения адреса

Слайд 4Лекция 10. Указатели в С++.
Пример 1.
int var1=-15;
int *pVar=0;
pVar=&var1;

Лекция 10. Указатели в С++.Пример 1.int var1=-15;int *pVar=0;pVar=&var1;

Слайд 5Лекция 10. Указатели в С++.
Оператор разименования (*) перед именем переменной

pVar может рассматриваться как «значение, хранящееся по адресу».
*pVar=12;
cout

Лекция 10. Указатели в С++.Оператор разименования (*) перед именем переменной pVar может рассматриваться как «значение, хранящееся по

Слайд 6Лекция 10. Указатели в С++.
Если переменная pVar объявлена как указатель,

то оператор присваивания pVar=&var1 означает: "взять адресс переменной var1 и

присвоить его значение переменной-указателю pVar ".
Заметим, что если pVar — некоторый указатель, то pVar ++ увеличивает его значение и он теперь указывает на следующий, соседний адресуемый объект. Значение pVar используется в выражении, а затем увеличивается. Аналогично определяются операции pVar --, ++ pVar, -- pVar. В общем случае указатель pVar можно скаладывать с целым числом i. Оператор pVar +=i передвигает ссылку на i элементов относительно текущего значения. Эти конструкции подчиняются правилам адресной арифметики.

Лекция 10. Указатели в С++.Если переменная pVar объявлена как указатель, то оператор присваивания pVar=&var1 означает:

Слайд 7Лекция 10. Указатели в С++.
Вернемся к массивам. Пусть имеется описание



short a[5];

Оно определяет массив размером 5 элементов, т.е. пять

последовательно расположенных ячеек памяти a[0], a[1], a[2], a[3], a[4].
short a[5];
Лекция 10. Указатели в С++.Вернемся к массивам. Пусть имеется описание short a[5]; Оно определяет массив размером 5

Слайд 8Лекция 10. Указатели в С++.
Адрес i-го элемента массива равен сумме

адреса начального элемента массива и смещения этого элемента на i

единиц от начала массива. Это достигается индексированием: a[i] — i -й элемент массива. Но доступ к любому элементу массива может быть выполнен и с помощью указателей, причем, более эффективно.
Лекция 10. Указатели в С++.Адрес i-го элемента массива равен сумме адреса начального элемента массива и смещения этого

Слайд 9Лекция 10. Указатели в С++.
Если pVar — указатель на short,

описанный как short * pVar, то pVar после выполнения операции

pVar =&a[0] содержит адрес a[0], а pVar +i  указывает на i -й элемент массива. Таким образом, pVar +i является адресом элемента a[i], а *( pVar +i) — содержимым i- го элемента
Лекция 10. Указатели в С++.Если pVar — указатель на short, описанный как  short * pVar, то

Слайд 10Лекция 10. Указатели в С++.
(операции * и & более приоритетны,

чем арифметические операции). Так как имя массива в программе отождествляется

с адресом его первого элемента, то выражение pVar =&a[0] эквивалентно такому: pVar =a. Поэтому значение a[i] можно записать как *(a+i). Применив к этим двум элементам операцию взятия адреса, получим, что &a[i] и a+i идентичны.
Лекция 10. Указатели в С++.(операции * и & более приоритетны, чем арифметические операции). Так как имя массива

Слайд 11Лекция 10. Указатели в С++.
Указатели применяются для:

Размещения данных в

свободных областях памяти и доступа к ним;

Доступа к переменным

и функциям классов;

Передачи параметров в функции по ссылке.
Лекция 10. Указатели в С++.Указатели применяются для: Размещения данных в свободных областях памяти и доступа к ним;

Слайд 12Лекция 10. Указатели в С++.
Память условно разделена на пять областей:

Область глобальных переменных
Свободная, или динамически распределенная память;
Регистровая память

(регистры);
Сегменты программы;
Стековая память.
Лекция 10. Указатели в С++.Память условно разделена на пять областей: Область глобальных переменных Свободная, или динамически распределенная

Слайд 13Лекция 10. Указатели в С++.
Локальные переменные и параметры функций размещаются

в стековой памяти.

Программный код хранится в сегментах, глобальные переменные

— в области глобальных переменных.

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

Остальная память составляет так называемую свободную память — область памяти, динамически распределяемую между объектами.
Лекция 10. Указатели в С++.Локальные переменные и параметры функций размещаются в стековой памяти. Программный код хранится в

Слайд 14Лекция 10. Указатели в С++.
Особенностью локальных переменных является то, что

после выхода из функции, в которой они были объявлены, память,

выделенная для их хранения, освобождается, а значения переменных уничтожается.

Глобальные переменные позволяют частично решить эту проблему ценой неограниченного доступа к ним из любой точки программы. Использование динамической памяти решает обе проблемы.
Лекция 10. Указатели в С++.Особенностью локальных переменных является то, что после выхода из функции, в которой они

Слайд 15Лекция 10. Указатели в С++.
В отличие от стека переменных, ячейкам

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

указателя, хранящего адрес нужной ячейки.

В отличие от стековой памяти, динамическая память не очищается до завершения работы программы, поэтому освобождением памяти должен заниматься программист.
Лекция 10. Указатели в С++.В отличие от стека переменных, ячейкам свободной памяти нельзя присвоить имя. Доступ к

Слайд 16Лекция 10. Указатели в С++.
Оператор new.

Для выделения памяти в области

динамического распределения используется ключевое слово new.

Пример

int *pVar = new int;
float

* pVar2 = new float;

В каждом случае указатели pVar и pVar1 будут указывать на ячейку памяти в области динамической памяти, содержащую значение int и float соответственно.
Лекция 10. Указатели в С++.Оператор new.Для выделения памяти в области динамического распределения используется ключевое слово new.Примерint *pVar

Слайд 17Лекция 10. Указатели в С++.
Оператор delete.
Если память, выделенная под переменную

больше не нужна, ее следует освободить с помощью оператора delete.

Пример
int

*pVar = new int;
delete pVar;
 
При этом происходит не удаление указателя, а освобождение области памяти по адресу, записанному в нем.
Лекция 10. Указатели в С++.Оператор delete.Если память, выделенная под переменную больше не нужна, ее следует освободить с

Слайд 18Лекция 10. Указатели в С++.
Утечка памяти.


При невнимательной работе с указателями

может происходить «утечка памяти».

Это происходит в том случае, если

указателю присваивается новое значение, а память, на которую он ссылался не освобождается.
Лекция 10. Указатели в С++.Утечка памяти.При невнимательной работе с указателями может происходить «утечка памяти». Это происходит в

Слайд 19Лекция 10. Указатели в С++.
Доступ к членам классов.

struct data {  

  int p;     int c; }
data * Var1;
data Var2;

Доступ

к членам класса data:
Var2.p=2;
Var2.c=3;
(* Var1).p=5; // Var1->p=5;
(*Var1).c=12; // Var1->c=12;
Лекция 10. Указатели в С++.Доступ к членам классов.struct data {     int p;     int

Слайд 20Лекция 10. Указатели в С++.
Динамические структуры.
 
struct data {     int

p;    data * next; };  

data * var1;
var1 = new data;
var1->p=5;
var1->next=

new data;
var1=var1->next;
Лекция 10. Указатели в С++.Динамические структуры. struct data {     int p;    data * next; };

Слайд 21Лекция 10. Указатели в С++.
Задания для самостоятельной работы.

75. Составьте программу,

которая:
создает список из 10-ти элеменов;
удаляет 1-й элемент списка.
удаляет последний

элемент списка
вставляет после третьего элемента новый
удаляет элемент равный 4-м (если такой имеется)
меняет местами 3-й и 6-й ‘элементы.
Лекция 10. Указатели в С++.Задания для самостоятельной работы.75. Составьте программу, которая: создает список из 10-ти элеменов;удаляет 1-й

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика