🗊Презентация Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11)

Нажмите для полного просмотра!
Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №1Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №2Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №3Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №4Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №5Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №6Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №7Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №8Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №9Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №10Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №11Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №12Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №13Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №14Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №15Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №16Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №17Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №18Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №19Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №20Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №21Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №22Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №23Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №24Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №25Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №26Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №27Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №28Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №29Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №30Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №31Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №32Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №33Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №34Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №35Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №36Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №37Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №38Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №39Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №40Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №41Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №42Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11), слайд №43

Содержание

Вы можете ознакомиться и скачать презентацию на тему Указатели и массивы. Указатели и параметры функций. Сложные описания с указателями. (Лекция 11). Доклад-сообщение содержит 43 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Указатели
Алтайский государственный университет
Факультет математики и ИТ 
Кафедра информатики
Барнаул 2014
Описание слайда:
Указатели Алтайский государственный университет Факультет математики и ИТ Кафедра информатики Барнаул 2014

Слайд 2





Лекция 11	
План
Указатели 
Указатели и массивы
Динамические массивы Указатели на функции 
Указатели и 
параметры функций
Сложные описания 
с указателями
Описание слайда:
Лекция 11 План Указатели Указатели и массивы Динамические массивы Указатели на функции Указатели и параметры функций Сложные описания с указателями

Слайд 3





Несколько заданий 
для самопроверки
Описание слайда:
Несколько заданий для самопроверки

Слайд 4





Задание 1
Что выведет программа?
Описание слайда:
Задание 1 Что выведет программа?

Слайд 5





Задание 2
Какие из следующих описаний массивов являются корректными?
Описание слайда:
Задание 2 Какие из следующих описаний массивов являются корректными?

Слайд 6





Задание 3
В каком порядке в памяти располагаются элементы описанного следующим образом массива?
Описание слайда:
Задание 3 В каком порядке в памяти располагаются элементы описанного следующим образом массива?

Слайд 7





Указатели
Адреса переменных
Что такое указатель?
Значение NULL
Операции над указателями
Нетипизированные указатели
Указатели и const
Описание слайда:
Указатели Адреса переменных Что такое указатель? Значение NULL Операции над указателями Нетипизированные указатели Указатели и const

Слайд 8





Что такое адрес переменной?
Оперативная память организована как последовательность ячеек (байт)
Каждая ячейка имеет собственный адрес 
(порядковый номер)
Адрес – целое число, чаще записываемое в шестнадцатеричной системе счисления
Описание слайда:
Что такое адрес переменной? Оперативная память организована как последовательность ячеек (байт) Каждая ячейка имеет собственный адрес (порядковый номер) Адрес – целое число, чаще записываемое в шестнадцатеричной системе счисления

Слайд 9





Что такое адрес переменной?
Каждая переменная размещается в последовательных ячейках (количество ячеек зависит от типа переменной)
Адрес переменной – адрес  первой из этих ячеек
Описание слайда:
Что такое адрес переменной? Каждая переменная размещается в последовательных ячейках (количество ячеек зависит от типа переменной) Адрес переменной – адрес первой из этих ячеек

Слайд 10





Как получить адрес переменной?
Адрес переменной можно получить с помощью операции &
Например, &x даст адрес x:
Описание слайда:
Как получить адрес переменной? Адрес переменной можно получить с помощью операции & Например, &x даст адрес x:

Слайд 11





Что такое указатель?
Указатель – переменная, 
хранящая адрес
Описание слайда:
Что такое указатель? Указатель – переменная, хранящая адрес

Слайд 12





Значение NULL
Помимо адресов, указатель может принимать специальное значение NULL, обозначающее недействительный адрес
NULL – макроконстанта 
NULL чаще всего (но не всегда!) равен 0
Разадресовывать указатель со значением NULL небезопасно!
Описание слайда:
Значение NULL Помимо адресов, указатель может принимать специальное значение NULL, обозначающее недействительный адрес NULL – макроконстанта NULL чаще всего (но не всегда!) равен 0 Разадресовывать указатель со значением NULL небезопасно!

Слайд 13





Операции над указателями
Указатель может быть инициализирован
Указателю можно присваивать значение
Указатель можно сравнивать: < > <= >= == !=
(т.е. вычислять отношения адресов)
Описание слайда:
Операции над указателями Указатель может быть инициализирован Указателю можно присваивать значение Указатель можно сравнивать: < > <= >= == != (т.е. вычислять отношения адресов)

Слайд 14





Операции над указателями
Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного
Описание слайда:
Операции над указателями Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного

Слайд 15





Операции над указателями
Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного
Описание слайда:
Операции над указателями Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного

Слайд 16





Операции над указателями
Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного
Описание слайда:
Операции над указателями Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного

Слайд 17





Операции над указателями
Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного
Описание слайда:
Операции над указателями Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного

Слайд 18





Операции над указателями
Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного
Описание слайда:
Операции над указателями Указатель может складываться с целым числом N. Результат сложения – адрес, смещенный на N компонент соответствующего типа относительно исходного

Слайд 19





Операции над указателями
Можно вычислять разность однотипных указателей, которая равна относительному смещению с учетом типа указателя
Описание слайда:
Операции над указателями Можно вычислять разность однотипных указателей, которая равна относительному смещению с учетом типа указателя

Слайд 20





Нетипизированный указатель
Типизированные указатели (int *, char *, double *, …) неявно задают длину фрагмента памяти (4,1,8, …), начинающегося с адреса, хранимого указателем
Длина важна при разадресации и адресной арифметике
Однако иногда приходится использовать указатели, не подразумевая длины адресуемого фрагмента памяти – void *
Разадресация указателя void * невозможна!
Указатель void * совместим по типу со всеми типизированными указателями
Описание слайда:
Нетипизированный указатель Типизированные указатели (int *, char *, double *, …) неявно задают длину фрагмента памяти (4,1,8, …), начинающегося с адреса, хранимого указателем Длина важна при разадресации и адресной арифметике Однако иногда приходится использовать указатели, не подразумевая длины адресуемого фрагмента памяти – void * Разадресация указателя void * невозможна! Указатель void * совместим по типу со всеми типизированными указателями

Слайд 21





Указатели и const
Два способа описания константного указателя
Неизменяемый указатель
Синтаксис: TYPE * const ptrName = &aTYPEVar;
Переменная-указатель – константа (не может изменяться)
Данные, адресуемые указателем – изменяемые
Описание слайда:
Указатели и const Два способа описания константного указателя Неизменяемый указатель Синтаксис: TYPE * const ptrName = &aTYPEVar; Переменная-указатель – константа (не может изменяться) Данные, адресуемые указателем – изменяемые

Слайд 22





Указатели и const
Два способа описания константного указателя
Указатель на неизменяемые данные
Синтаксис: const  TYPE * ptrName = &aTYPEVar;
Переменная-указатель – может изменяться
Данные, адресуемые указателем – неизменяемые
Описание слайда:
Указатели и const Два способа описания константного указателя Указатель на неизменяемые данные Синтаксис: const TYPE * ptrName = &aTYPEVar; Переменная-указатель – может изменяться Данные, адресуемые указателем – неизменяемые

Слайд 23





Указатели и массивы
Указатели и массивы
Массивы как параметры функций
Указатели на многомерные массивы
Описание слайда:
Указатели и массивы Указатели и массивы Массивы как параметры функций Указатели на многомерные массивы

Слайд 24





Указатели и массивы
Указатели и массивы очень тесно связаны в языке Си
Имя массива – константный указатель на 0-й элемент массива
a[i] == *(a+i)
Описание слайда:
Указатели и массивы Указатели и массивы очень тесно связаны в языке Си Имя массива – константный указатель на 0-й элемент массива a[i] == *(a+i)

Слайд 25





Указатели и массивы
a[i] == *(a+i) == *(i+a) == i[a]
a[2] == *(a+2) == *(2+a) == 2[a]
Описание слайда:
Указатели и массивы a[i] == *(a+i) == *(i+a) == i[a] a[2] == *(a+2) == *(2+a) == 2[a]

Слайд 26





Указатели и массивы
Синонимичные выражения
Передача массива в функцию как параметра
Описание слайда:
Указатели и массивы Синонимичные выражения Передача массива в функцию как параметра

Слайд 27





Указатели на многомерные массивы
Для вычисления адреса элемента двумерного массива компилятору нужно «знать» количество столбцов в матрице (т.е. мало знать начальный адрес масива)
Пусть нужно передать в функцию массив int array[3][15], чтобы ее вызов выглядел так: f(array)
Возможны следующие идентичные  варианты описания функции f:
f(int x[3][15]) { … }
f(int x[][15]) { … }
f(int (*x)[15]) { … }
Важно: в последнем случае нельзя опустить скобки!
f(int *x[15]) { … } – передается массив из 15 указателей
на int, а не указатель на массив из 15 int-ов
Описание слайда:
Указатели на многомерные массивы Для вычисления адреса элемента двумерного массива компилятору нужно «знать» количество столбцов в матрице (т.е. мало знать начальный адрес масива) Пусть нужно передать в функцию массив int array[3][15], чтобы ее вызов выглядел так: f(array) Возможны следующие идентичные варианты описания функции f: f(int x[3][15]) { … } f(int x[][15]) { … } f(int (*x)[15]) { … } Важно: в последнем случае нельзя опустить скобки! f(int *x[15]) { … } – передается массив из 15 указателей на int, а не указатель на массив из 15 int-ов

Слайд 28





Динамические массивы
Динамические массивы
Выделение памяти, malloc()
Освобождение памяти, free()
Описание слайда:
Динамические массивы Динамические массивы Выделение памяти, malloc() Освобождение памяти, free()

Слайд 29





Динамические массивы
Часто размер массива заранее не известен, а известен лишь в момент исполнения
Требуется динамически распределять массив в памяти
Стандартная функция malloc() позволяет запросить память у ОС
Для использования malloc() нужно подключать stdlib.h
Полный прототип функции:

                     void *malloc(size_t size);
malloc() возвращает нетипизированный указатель на начальный байт выделенного массива. Для дальнейшего использования обычно указатель преобразуют в типизированный
Описание слайда:
Динамические массивы Часто размер массива заранее не известен, а известен лишь в момент исполнения Требуется динамически распределять массив в памяти Стандартная функция malloc() позволяет запросить память у ОС Для использования malloc() нужно подключать stdlib.h Полный прототип функции: void *malloc(size_t size); malloc() возвращает нетипизированный указатель на начальный байт выделенного массива. Для дальнейшего использования обычно указатель преобразуют в типизированный

Слайд 30





Динамические массивы
Шаблон программы, использующей динамический массив
Описание слайда:
Динамические массивы Шаблон программы, использующей динамический массив

Слайд 31





Динамические массивы
Выделенную память необходимо освобождать
Стандартная функция free() позволяет освободить память , выделенную malloc()
Блоки памяти освобождаются целиком, т.е. невозможно частичное освобождение (см. также функцию realloc())
Полный прототип функции:

                     void free(void *ptr);
Описание слайда:
Динамические массивы Выделенную память необходимо освобождать Стандартная функция free() позволяет освободить память , выделенную malloc() Блоки памяти освобождаются целиком, т.е. невозможно частичное освобождение (см. также функцию realloc()) Полный прототип функции: void free(void *ptr);

Слайд 32





Указатели на функции
Указатели на функции
Пример
Описание слайда:
Указатели на функции Указатели на функции Пример

Слайд 33





Указатели на функции
Укaзатель на функцию содержит адрес тела функции
Как описывается указатель на функцию?
Описание слайда:
Указатели на функции Укaзатель на функцию содержит адрес тела функции Как описывается указатель на функцию?

Слайд 34





Указатели на функции: пример
Описание слайда:
Указатели на функции: пример

Слайд 35





Указатели и 
параметры функций 
Указатели в параметрах функций
Описание слайда:
Указатели и параметры функций Указатели в параметрах функций

Слайд 36





Как передаются параметры 
через указатель?
В функцию передается не значение, а адрес переменной
Описание слайда:
Как передаются параметры через указатель? В функцию передается не значение, а адрес переменной

Слайд 37





Как изменить переменную в вызывающей функции?
Описание слайда:
Как изменить переменную в вызывающей функции?

Слайд 38





Сложные описания 
с указателями 
Сложные объявления
Правила чтения сложных объявлений
Класс памяти typedef
Описание слайда:
Сложные описания с указателями Сложные объявления Правила чтения сложных объявлений Класс памяти typedef

Слайд 39





Сложные описания с указателями
char **argv
argv: указатель на указатель на char	
int (*x)[13]
x: указатель на массив из 13 int-ов
int *x[13]
x: массив из 13 указателей на int
void *comp()
comp: функция, возвращающая указатель на void
void (*comp)()
comp: указатель на функцию, возвращающую void
char (*(*x())())[5]
x: функция, возвращающая указатель на массив из 5 указателей на функцию, возвращающую char
char (*(*x[3])())[5]
x: массив из 3 указателей на функцию, возвращающую указатель на массив из 5 char-ов
Описание слайда:
Сложные описания с указателями char **argv argv: указатель на указатель на char int (*x)[13] x: указатель на массив из 13 int-ов int *x[13] x: массив из 13 указателей на int void *comp() comp: функция, возвращающая указатель на void void (*comp)() comp: указатель на функцию, возвращающую void char (*(*x())())[5] x: функция, возвращающая указатель на массив из 5 указателей на функцию, возвращающую char char (*(*x[3])())[5] x: массив из 3 указателей на функцию, возвращающую указатель на массив из 5 char-ов

Слайд 40





Сложные описания с указателями
Чтобы понять подобные сложные объявления используйте следующие три правила: 
Начинайте с имени переменной (d или foo в примерах выше)
Заканчивайте на имени типа (double или char выше)
Идите вправо пока можно, затем влево (влево необходимо идти при обнаружении закрывающейся скобки)
Например
Описание слайда:
Сложные описания с указателями Чтобы понять подобные сложные объявления используйте следующие три правила: Начинайте с имени переменной (d или foo в примерах выше) Заканчивайте на имени типа (double или char выше) Идите вправо пока можно, затем влево (влево необходимо идти при обнаружении закрывающейся скобки) Например

Слайд 41





Сложные описания с указателями
Еще пример
Описание слайда:
Сложные описания с указателями Еще пример

Слайд 42





Сложные описания с указателями
Как можно упростить понимание сложных объявлений?
Ответ: использовать оператор typedef
Описание слайда:
Сложные описания с указателями Как можно упростить понимание сложных объявлений? Ответ: использовать оператор typedef

Слайд 43





Вопросы?
Указатели 
Указатели и массивы
Динамические массивы Указатели на функции 
Указатели и 
параметры функций
Сложные описания 
с указателями
Описание слайда:
Вопросы? Указатели Указатели и массивы Динамические массивы Указатели на функции Указатели и параметры функций Сложные описания с указателями



Похожие презентации
Mypresentation.ru
Загрузить презентацию