Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


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

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

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

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

Презентация на тему Указатели. Иллюстративный материал к лекциям по алгоритмизации и программированию

Содержание

ОглавлениеОписание указателейИнициализация указателейДействия с указателямиСвязь массивов и указателейДинамические массивы (одномерные)Динамические матрицы24.04.2016
Указатели  Лекция 10Иллюстративный материал к лекциям по алгоритмизации и программированию ОглавлениеОписание указателейИнициализация указателейДействия с указателямиСвязь массивов и указателейДинамические массивы (одномерные)Динамические матрицы24.04.2016 Описание указателя Указатели - переменные для хранения адресов областей памяти.В С++ различают Указатель на функциюСодержит адрес в сегменте кода, по которому располагается исполняемый код Указатель на объектСодержит адрес области памяти, в которой хранятся данные определенного типа Указатель на voidПрименяется, когда тип объекта не определен.Указателю на void можноприсвоить значение Использование указателей (1 из 3)при работе с динамической памятью, называемой кучей (heap). Использование указателей (2 из 3)Перед использованием указателя его надо инициализировать, т. е. Инициализация указателей (1 из 3)Способы инициализации указателя: Присваивание указателю адреса существующего объектаПрисваивание Присваивание указателю адреса существующего объектас помощью операции получения адреса:int а=5; 		// целая Присваивание указателю адреса области памяти в явном видеchar* vp = (char *) Присваивание указателю адреса области памяти в явном виде (доп)Пример.char * const key_byte Присваивание указателю пустого значенияМожно использовать константу NULL, определенную как указатель, равный нулю, Выделение участка памяти (1)А) c помощью операции new, синтаксис: new имя_типа (иницииализатор)Б) Выделение участка памяти (2)Примеры:int* n = new int; 		//1int* b = new Действия с указателямиС указателями можно выполнять следующие операции:разыменование, или косвенное обращение к Операции: разадресации, или разыменованияРазыменование - доступ к величине, адрес которой хранится в Приведение типов для указателей (1)Пример:#include void main(){ unsigned long L=0x12345678; char *cp=(char Приведение типов для указателей (2)На экран возможен следующий вывод:Адрес L=0x8fe10ffccp= 0x8fe10ffc 		*cp= Схема размещения в памяти переменной L типа unsigned long Арифметические операции с указателями (1)Инкрементchar * р = new char [5]: p++; Арифметические операции с указателями (2)ВычитаниеРазность двух указателей — это разность их значений, Связь массивов и указателейИмя массива – указатель на его началоint A[8]={12, 0, Динамическое создание массивов#include void main(){ int n; //размерность массиваint *mm; cout n;// Динамическое создание матрицы (1)Способ 1. Использование одномерного динамического массива int n,m; //размерность Динамическое создание матрицы (2)Способ 2. Использование вспомогательного динамического массива указателейСхема. Одномерный массив указателей012Указатели типа int *0123n одномерных массивовЭлементы типа intСхема имитации двумерного План создания динамической матрицы Описать двойной указательЗадать размерность матрицыВыделить память под вспомогательный Динамическое создание матрицы (2)Способ 2. Использование вспомогательного динамического массива указателейint n,m; 			//размерность Динамическое создание матрицы (2)//заполнение массива указателей, //выделение памяти для каждой строки матрицыfor (int i=0; i Удаление матрицы//обработка элементов матрицы в соответствии // с условием задачи….		//удаление строк матрицыfor (i=0; i Итоги Рассмотренные вопросы:		УказателиПонятие , способы описания и инициализации  действия с указателями 24.04.2016    Библиографический список   Подбельский В.В. Язык СИ++.
Слайды презентации

Слайд 2 Оглавление
Описание указателей
Инициализация указателей
Действия с указателями
Связь массивов и указателей
Динамические

ОглавлениеОписание указателейИнициализация указателейДействия с указателямиСвязь массивов и указателейДинамические массивы (одномерные)Динамические матрицы24.04.2016

массивы (одномерные)
Динамические матрицы
24.04.2016






Слайд 3 Описание указателя
Указатели - переменные для хранения адресов

Описание указателя Указатели - переменные для хранения адресов областей памяти.В С++

областей памяти.

В С++ различают три вида указателей:
на объект;
на функцию;
на

тип void.






Слайд 4 Указатель на функцию
Содержит адрес в сегменте кода, по

Указатель на функциюСодержит адрес в сегменте кода, по которому располагается исполняемый

которому располагается исполняемый код функции.
Указатель функции имеет тип

«указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»:
тип (*имя) ( список типов аргументов );






Слайд 5 Указатель на объект
Содержит адрес области памяти, в которой

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

хранятся данные определенного типа (основного или составного).
Объявление указателя

на объект :
тип *имя;






Слайд 6 Указатель на void
Применяется, когда тип объекта не определен.
Указателю

Указатель на voidПрименяется, когда тип объекта не определен.Указателю на void можноприсвоить

на void можно
присвоить значение указателя любого типа,
сравнивать его

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






Слайд 7 Использование указателей (1 из 3)
при работе с динамической

Использование указателей (1 из 3)при работе с динамической памятью, называемой кучей

памятью, называемой кучей (heap).
Куча - свободная память, в

которой можно во время выполнения программы выделять место в соответствии с потребностями программы.
Доступ к выделенным участкам динамической памяти производится только через указатели.
Время жизни динамических переменных - от создания до конца программы или до явного освобождения памяти.






Слайд 8 Использование указателей (2 из 3)
Перед использованием указателя его

Использование указателей (2 из 3)Перед использованием указателя его надо инициализировать, т.

надо инициализировать, т. е. присвоить значение.
Использование неинициализированных указателей

- источник ошибок в программах.
Инициализатор записывается после имени указателя либо в круглых скобках, либо после знака равенства.






Слайд 9 Инициализация указателей (1 из 3)
Способы инициализации указателя:
Присваивание

Инициализация указателей (1 из 3)Способы инициализации указателя: Присваивание указателю адреса существующего

указателю адреса существующего объекта
Присваивание указателю адреса области памяти в

явном виде
Присваивание пустого значения
Выделение участка памяти






Слайд 10 Присваивание указателю адреса существующего объекта
с помощью операции получения

Присваивание указателю адреса существующего объектас помощью операции получения адреса:int а=5; 		//

адреса:
int а=5; // целая переменная
int* p=&a // в

указатель записывается адрес а
int* р (&a); // то же самое другим способом
с помощью значения другого инициализированного указателя:
int* r = р:
помощью имени массива или функции, которые трактуются как адрес:
int B[10]:
int* t=B; // присваивание адреса начала массива
void f(int а ) {(/* ... */ } // определение функции
void (*pf)(int); // указатель на функцию
рf=f; // присваивание адреса функции






Слайд 11 Присваивание указателю адреса области памяти в явном виде

char*

Присваивание указателю адреса области памяти в явном видеchar* vp = (char

vp = (char *) 0xB8000000;
Здесь
0хВ8000000 - шестнадцатеричная

константа,
(cha r *) - операция приведения типа:
константа преобразуется к типу «указатель на char».









Слайд 12 Присваивание указателю адреса области памяти в явном виде

Присваивание указателю адреса области памяти в явном виде (доп)Пример.char * const

(доп)


Пример.
char * const key_byte =(char *)1047;
Значение указателя невозможно изменить,

он всегда показывает на байт с адресом 1047 (шестнадцатеричное представление 0х1047).
Это - байт состояния клавиатуры. Содержимое этого участка с помощью разыменования указателя-константы как для чтения, так и для изменений.
#include
void main()
{char *const key_b=(char *)1047;
cout<<"\n Байт состояния клавиатуры - "<< *key_b;
*key_b='Ё';
cout<<"\n Байт состояния клавиатуры - "<< *key_b;
}






Слайд 13 Присваивание указателю пустого значения
Можно использовать константу NULL, определенную

Присваивание указателю пустого значенияМожно использовать константу NULL, определенную как указатель, равный

как указатель, равный нулю,
Можно использовать и просто 0
int*

sx = NULL
int* rz = 0;






Слайд 14 Выделение участка памяти (1)
А) c помощью операции new,

Выделение участка памяти (1)А) c помощью операции new, синтаксис: new имя_типа

синтаксис:
new имя_типа (иницииализатор)
Б) с помощью функций malloc() и

calloc(). Синтаксис:
имя_указателя=(тип_указателя)malloc(объем_в_байтах);
имя_указателя=(тип_указателя)сalloc (число_элементов, размер_эл-та_в_байтах);
Освобождение динамично выделенной памяти delete, free.










Слайд 15 Выделение участка памяти (2)
Примеры:
int* n = new int;

Выделение участка памяти (2)Примеры:int* n = new int; 		//1int* b =

//1
int* b = new int (10); //2
int* q =

new int [10]; //3

int* u = (int *) malloc (sizeof (int)); //4
int* u = (int *) сalloc (1, sizeof (int)); //5

Пример: delete n; delete [ ]b;
free (u);






Слайд 16 Действия с указателями
С указателями можно выполнять следующие операции:
разыменование,

Действия с указателямиС указателями можно выполнять следующие операции:разыменование, или косвенное обращение

или косвенное обращение к объекту (*),
присваивание,
приведение типов,
сложение с константой,
вычитание,
инкремент

(++),
декремент (--),
сравнение






Слайд 17 Операции: разадресации, или разыменования
Разыменование - доступ к величине,

Операции: разадресации, или разыменованияРазыменование - доступ к величине, адрес которой хранится

адрес которой хранится в указателе.
Можно использовать как для

получения значения, так и для изменения значения:
char а; // переменная типа char
char * р = new char; /* выделение памяти под указатель и под динамическую переменную типа char */
*р = 'Ю'; а = *р; // присваивание значения обеим переменным

Присваивание
int *t, *z, y=34;
t=&y; z=t;






Слайд 18 Приведение типов для указателей (1)
Пример:
#include
void main()
{ unsigned

Приведение типов для указателей (1)Пример:#include void main(){ unsigned long L=0x12345678; char

long L=0x12345678;
char *cp=(char *)&L;
int *ip=(int *)&L;
long

*lp=(long *)&L;
cout< cout<<"\n Адрес L=" <<&L;
cout <<"\n cp= "<<(void *)cp<<"\t*cp= 0x"<<(int)*cp;
cout <<"\n ip= "<<(void *)ip<<"\t*ip= 0x"<<*ip;
cout <<"\n lp= "<<(void *)lp<<"\t*lp= 0x"<<*lp;
}






Слайд 19 Приведение типов для указателей (2)
На экран возможен следующий

Приведение типов для указателей (2)На экран возможен следующий вывод:Адрес L=0x8fe10ffccp= 0x8fe10ffc

вывод:
Адрес L=0x8fe10ffc
cp= 0x8fe10ffc *cp= 0x78
ip= 0x8fe10ffc *ip= 0x5678
lp= 0x8fe10ffc

*lp= 0x12345678
Присваивание без явного приведения типов допускается в двух случаях:
указателям типа void*;
если тип указателей справа и слева от операции присваивания один и тот же.






Слайд 20 Схема размещения в памяти переменной L типа unsigned

Схема размещения в памяти переменной L типа unsigned long

long





Слайд 21 Арифметические операции с указателями (1)
Инкремент
char * р =

Арифметические операции с указателями (1)Инкрементchar * р = new char [5]:

new char [5]:
p++;
// значение р увеличивается на

1
long * q = new long [53]; q++ ;
// значение q увеличивается на 4
Декремент
сложение с константой
char * р = new char [5]:
int c=3; p=p+c;
// значение р увеличивается на 3
long * q = new long [53]; q=q+c;
// значение q увеличивается на 12






Слайд 22 Арифметические операции с указателями (2)
Вычитание
Разность двух указателей —

Арифметические операции с указателями (2)ВычитаниеРазность двух указателей — это разность их

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

байтах


Суммирование двух указателей не допускается.






Слайд 23 Связь массивов и указателей
Имя массива – указатель на

Связь массивов и указателейИмя массива – указатель на его началоint A[8]={12,

его начало
int A[8]={12, 0, 2, 3, 4, 5, 65,

8, 3};
int *p;
p=A;
p=&A[0];
p=&A;
Обращение к отдельным элементам массива
int i=2, x=*p;
x=*(p+i);
x=p[i];






Слайд 24 Динамическое создание массивов
#include

void main()
{ int n; //размерность

Динамическое создание массивов#include void main(){ int n; //размерность массиваint *mm; cout

массива
int *mm;

cout

cin>> n;
// создание массива
mm= new int [n];

// заполнение массива
for (int i=0; i
// вывод массива на экран
cout<<"\n Массив \n";
for (i=0; i…….
delete [] mm; // delete mm;
}






Слайд 25 Динамическое создание матрицы (1)
Способ 1. Использование одномерного динамического

Динамическое создание матрицы (1)Способ 1. Использование одномерного динамического массива int n,m;

массива

int n,m; //размерность матрицы
cout

матрицы:"; cin>>n;
cout<<"\nВведите количество столбцов матрицы:"; cin>>m;
int *matr; //указатель на начало массива
matr=new int [n*m]; //выделение памяти для массива
//заполнение матрицы
for (int i=0; i for (int j=0; j *(matr+i*m+j)= random(15);






Слайд 26 Динамическое создание матрицы (2)
Способ 2. Использование вспомогательного динамического

Динамическое создание матрицы (2)Способ 2. Использование вспомогательного динамического массива указателейСхема.

массива указателей

Схема.





Слайд 27 Одномерный массив указателей



0
1
2
Указатели типа int *
0
1
2
3
n одномерных массивов
Элементы

Одномерный массив указателей012Указатели типа int *0123n одномерных массивовЭлементы типа intСхема имитации

типа int
Схема имитации двумерного массива с помощью массива указателей

и набора одномерных массивов






Слайд 28 План создания динамической матрицы
Описать двойной указатель
Задать размерность

План создания динамической матрицы Описать двойной указательЗадать размерность матрицыВыделить память под

матрицы
Выделить память под вспомогательный массив указателей
В цикле выделить память

под каждую из строк матрицы (заполнение массива указателей
Заполнить матрицу
Произвести необходимую обработку
Удалить строки матрицы
Удалить вспомогательный массив указателей






Слайд 29 Динамическое создание матрицы (2)
Способ 2. Использование вспомогательного динамического

Динамическое создание матрицы (2)Способ 2. Использование вспомогательного динамического массива указателейint n,m;

массива указателей
int n,m; //размерность матрицы
cout

cin>>n;
cout<<"\nВведите количество столбцов матрицы:"; cin>>m;

int **matr; //указатель на начало массива указателей
//выделение памяти для вспомогательного
//массива указателей
matr=new int *[n];






Слайд 30 Динамическое создание матрицы (2)
//заполнение массива указателей,
//выделение памяти

Динамическое создание матрицы (2)//заполнение массива указателей, //выделение памяти для каждой строки матрицыfor (int i=0; i

для каждой строки матрицы
for (int i=0; i

new int[m];
//заполнение матрицы
for ( i=0; i for (int j=0; j matr[i][j]= random(15);






Слайд 31 Удаление матрицы
//обработка элементов матрицы в соответствии
// с

Удаление матрицы//обработка элементов матрицы в соответствии // с условием задачи….		//удаление строк матрицыfor (i=0; i

условием задачи
….

//удаление строк матрицы
for (i=0; i


//удаление вспомогательного массива указателей
delete [] matr;






Слайд 32 Итоги Рассмотренные вопросы:
Указатели
Понятие , способы описания и инициализации

Итоги Рассмотренные вопросы:		УказателиПонятие , способы описания и инициализации действия с указателями

действия с указателями
Связь с массивами
Динамическое выделение памяти

под массивы

24.04.2016






Слайд 33 24.04.2016
Библиографический список
Подбельский В.В. Язык СИ++. Учебное пособие.

24.04.2016  Библиографический список  Подбельский В.В. Язык СИ++. Учебное пособие.

М.: Финансы и статистика, 2003. – 560 с.
Павловская Т.А.

C/C++. Программирование на языке высокого уровня: учебник для студентов вузов, обучающихся по направлению "Информатика и вычисл. техника" СПб.: Питер, 2005. - 461 с.
Березин Б.И. Начальный курс C и C++ / Б.И. Березин, С.Б. Березин. - М.: ДИАЛОГ-МИФИ, 2001. - 288 с
Каширин И.Ю., Новичков В.С. От С к С++. Учебное пособие для вузов. – М.: Горячая линия – Телеком, 2005. – 334 с.






  • Имя файла: ukazateli-illyustrativnyy-material-k-lektsiyam-po-algoritmizatsii-i-programmirovaniyu.pptx
  • Количество просмотров: 126
  • Количество скачиваний: 0