Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
19 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
95.03 kB
Просмотров:
55
Скачиваний:
1
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Указатели Лекция](/documents_6/503891baa2d57280a0c99b368ed020f6/img0.jpg)
Содержание слайда: Указатели
Лекция №7
№2 слайд![Общие сведениях об указателях](/documents_6/503891baa2d57280a0c99b368ed020f6/img1.jpg)
Содержание слайда: Общие сведениях об указателях
указатель - переменная, которая содержит адрес другой переменной
Указуемая переменная – переменная, адрес которой хранится в указателе
№3 слайд![Исходные предпосылки](/documents_6/503891baa2d57280a0c99b368ed020f6/img2.jpg)
Содержание слайда: Исходные предпосылки
Физическая память компьютера – одномерный массив
Необходимость гибкой работы с адресами оперативной памяти
Си находится между Паскалем и Ассемблером
Широкое применение Си для специализированных ЭВМ с ограниченными ресурсами
Необходимость управления памятью – резервирование и освобождение в процессе работы программы
№4 слайд![Формат описания указателя тип](/documents_6/503891baa2d57280a0c99b368ed020f6/img3.jpg)
Содержание слайда: Формат описания указателя
тип *имя;
* в описании – признак указателя
тип относится к указуемой переменной
Примеры
int *p;
float *q;
char *s;
№5 слайд![Свойства указателей](/documents_6/503891baa2d57280a0c99b368ed020f6/img4.jpg)
Содержание слайда: Свойства указателей
освобождают от необходимости помнить адреса ячеек памяти
поддерживают операции адресной арифметики
перемещение от одной ячейки памяти к другой
сравнение указателей
№6 слайд![Инициализация указателей int](/documents_6/503891baa2d57280a0c99b368ed020f6/img5.jpg)
Содержание слайда: Инициализация указателей
int A[5]={2,1,5,3,4};
int *p=&A[0];//или int *p=A;
№7 слайд![Обращение к содержимому a p в](/documents_6/503891baa2d57280a0c99b368ed020f6/img6.jpg)
Содержание слайда: Обращение к содержимому
a=*p
* в выражении означает доступ к указуемому содержимому
№8 слайд![Этапы работы с указателем](/documents_6/503891baa2d57280a0c99b368ed020f6/img7.jpg)
Содержание слайда: Этапы работы с указателем
Определение указателя
Присваивание указателю адреса другой переменной
Работа с переменной через указатель
int a=5, *p,b=0;
p=&a;//обязательно присвоить адрес!!!
b=*p;
!!! Использование указателя со случайным адресом ведет к непредсказуемым результатам
№9 слайд![Пустой указатель int t NULL](/documents_6/503891baa2d57280a0c99b368ed020f6/img8.jpg)
Содержание слайда: Пустой указатель
int *t=NULL;
Пустой указатель – нулевой адрес
При обращении к нему формируется системное сообщение об ошибке
№10 слайд![Работа с массивами с помощью](/documents_6/503891baa2d57280a0c99b368ed020f6/img9.jpg)
Содержание слайда: Работа с массивами с помощью указателей
№11 слайд![Операции адресной арифметики](/documents_6/503891baa2d57280a0c99b368ed020f6/img10.jpg)
Содержание слайда: Операции адресной арифметики
Обращение к содержимому со смещением
*(p+i) – содержимое ячейки на i элементов вперед
*(p-i) – содержимое ячейки на i элементов назад
смещение должно быть целым
размер содержимого учитывается автоматически
указатель не изменяется
«Перемещение» вдоль памяти
p++ - на 1 элемент вперед
p-- - на 1 элемент назад
p+i – на i элементов вперед
p-i – на i элементов назад
указатель изменяется
№12 слайд![Операции адресной арифметики](/documents_6/503891baa2d57280a0c99b368ed020f6/img11.jpg)
Содержание слайда: Операции адресной арифметики
Cравнение указателей
p<q ;адрес в указателе p ближе к началу, чем адрес в указателе q?
p==q; указатели указывают на одну и ту же ячейку?
Вычитание указателей
k=p-q;
результат – целое число, показывающее, на сколько элементов адрес в указателе p дальше от начала памяти относительно адреса в указателе q
№13 слайд![Примеры операций над](/documents_6/503891baa2d57280a0c99b368ed020f6/img12.jpg)
Содержание слайда: Примеры операций над указателями
int X[]={5,1,4,2,3}, *p,*q, i=0, k=0,j=0;
p=&X[2];
q=&X[4];
p--;
k=*(p-1);//k=?
if(p<q)
j=q-p;//j=?
if(*p>*q)
i=(*p)-(*q);//i=?
№14 слайд![Сравнение массивов и](/documents_6/503891baa2d57280a0c99b368ed020f6/img13.jpg)
Содержание слайда: Сравнение массивов и указателей
Сходства
Обеспечивают доступ к элементам по номеру
Тип данных учитывает размер элементов
Различия
Адрес массива изменить нельзя- массив привязан к конкретной области памяти
Адрес, записанный в указателе, можно изменить с помощью операций адресной арифметики
№15 слайд![Эквивалентность операций над](/documents_6/503891baa2d57280a0c99b368ed020f6/img14.jpg)
Содержание слайда: Эквивалентность операций над указателями и массивами
int X[5],*p,k=2;
p=X;
X ~ &X[0]
X+k ~ &X[0]
p+k ~ &p[k]
*(p+k) ~ p[k]
Работу с указателями можно сделать почти неотличимой от работы с массивами
№16 слайд![Обработка массива с помощью](/documents_6/503891baa2d57280a0c99b368ed020f6/img15.jpg)
Содержание слайда: Обработка массива с помощью указателя
int X[]={5,1,4,2,3}, *p,*q, i=0, n=5,s=0;
//Способ 1
p=X;
for(i=0;i<n,i++)
s=s+p[i];// указатель на месте, индекс двигается
//Способ 2
for(p=X;p<X+n,p++)
s=s+(*p);// указатель двигается
№17 слайд![Поиск элемента с помощью](/documents_6/503891baa2d57280a0c99b368ed020f6/img16.jpg)
Содержание слайда: Поиск элемента с помощью указателей
int X[]={5,1,4,2,3}, *p,*q, i=0, n=5,s=0;
for(p=X;p<X+n;p++)//что делает фрагмент?
if(*p==4)
q=p;
s=*q;
q=X;
for(p=X+1;p<X+n;p++)//что делает фрагмент?
if(*p<*q)
q=p;
s=*q;
№18 слайд![Перестановки элементов с](/documents_6/503891baa2d57280a0c99b368ed020f6/img17.jpg)
Содержание слайда: Перестановки элементов с помощью указателей
int X[]={5,1,4,2,3}, *p,*q, i=0, n=5,s=0;
p=X;
q=p+4;
s=*p;
*p=*q;
*q=s;
for(q=p;q<p+n;q++)
printf(“%d”,*q);
№19 слайд![Выводы Указатели позволяют](/documents_6/503891baa2d57280a0c99b368ed020f6/img18.jpg)
Содержание слайда: Выводы
Указатели позволяют гибко работать с оперативной памятью
Указатель позволяет работать с памятью как с массивом с помощью адресной арифметики
Указатель позволяет «перемещаться» вдоль памяти, массив жестко привязан к участку памяти
Тип данных при работе с указателями учитывается автоматически
Указатели позволяют динамически работать с памятью во время работы программы