Управляющие инструкции. Указатели. Массивы. Лекция 6 презентация в формате PowerPoint - скачать бесплатно

Скачать презентацию на тему: "Управляющие инструкции. Указатели. Массивы. Лекция 6" с количеством слайдов в размере 37 страниц. У нас вы найдете презентацию на любую тему и для каждого класса школьной программы. Мы уверены, что наши слайды помогут найти вам свою аудиторию. Весь материал предоставлен бесплатно, в знак благодарности мы просим Вас поделиться ссылками в социальных сетях и по возможности добавьте наш сайт MirPpt.ru в закладки.

Содержание [Показать]

Нажмите для просмотра
Управляющие инструкции. Указатели. Массивы. Лекция 6

1: Управляющие инструкции. Указатели. Массивы. лекция 6

2: План лекции Управляющие инструкции Инструкции выбора if, switch Инструкции цикла for, while, do-while Инструкции перехода break, continue, goto и возврата return Указатели Понятие указателя Указатели в языке Си Операции над указателями Передача параметров функции по указателю Массивы Массивы в языке Си Связь массивов и указателей – генерация указателя Описание массива в языке Си Многомерные массивы Массивы и строковые константы

3: Классификация инструкций языка Си ::

4: Инструкции выбора if, switch :: if ( ) if ( ) else switch ( )

5: Инструкции выбора -- switch Инструкция switch имеет следующий вид switch (выражение) case константное-выражение : инструкции case константное-выражение : инструкции . . . default: инструкции Текст default: инструкции может отсутствовать Порядок работы Вычисляется выражение в скобках, результат приводится к int Если значение совпадает со значением одного из выражений после case, то управление передаётся на первую инструкцию после соотв. двоеточия. Дальнейшая работа зависит от этих инструкций Иначе управление передается на первую инструкцию после default:

6: Операторы цикла (for, while, do-while) :: while ( ) do while ( ) for ( ; ; ) В цикле for любое из выражений может отсутствовать

7: Оператор цикла while Цикл while исполняет инструкцию до тех пор, пока выражение не станет равно 0 while ( выражение ) инструкция выражение называется условием продолжения цикла инструкция называется телом цикла Значение выражение должно быть приводимым к типу int с помощью автоматических преобразований

8: Оператор цикла for Цикл for (в1; в2; в3) инструкция эквивалентен следующей последовательности инструкций с циклом while в1; while (в2) инструкция в3;

9: Оператор цикла do-while Цикл do инструкция while (в2); эквивалентен следующим инструкциям инструкция while (в2) инструкция

10: Duffs Device send(to, from, count) // Tom Duff in November 1983 register short to, from; register count; register n (count 7) / 8; switch(count 8) case 0:do to from; // вариант: to from; case 7:to from; case 6:to from; case 5:to from; case 4:to from; case 3:to from; case 2:to from; case 1:to from; while(--n 0);

11: Операторы перехода и возврата break, continue, goto, return :: goto ; continue ; break ; return ;

12: Операторы перехода и возврата break, continue, return continue ; Передаёт управление на проверку условия в while и do-while и на вычисление третьего выражения в for Разрешено только в операторах цикла break ; Передаёт управление на первый оператор после цикла или после оператора выбора Разрешено в циклах и в операторе выбора switch return выражение ; и return ; Завершает работу текущей функции и возвращает управление вызывающей функции выражение должно быть приводимым к типу результата функции с помощью стандартных преобразований

13: Операторы перехода и возврата goto goto идентификатор ; Передаёт управление на оператор, помеченный меткой идентификатор Рекомендуется передавать управление только вперёд про тексту программы Разрешено передавать управление из блока наружу за исключением выхода из функции Нет смысла (но не запрещено) передавать управление внутрь блока После такой передачи управления значения переменных, описанных внутри , неопределены идентификатор должен быть меткой инструкции

14: Управляющие инструкции Инструкции выбора if, switch Инструкции цикла for, while, do-while Инструкции перехода goto, break, continue и возврата return Указатели Понятие указателя Указатели в языке Си Операции над указателями Передача параметров функции по указателю Массивы Массивы в языке Си Связь массивов и указателей – генерация указателя Описание массива в языке Си Многомерные массивы Массивы и строковые константы

15: Понятие указателя Память ЭВМ делится на одинаковые ячейки -- байты Для обращения к ячейкам памяти процессор использует машинно-представимые целые числа без знака с максимальным числом битов – адреса Соответствие между адресами и ячейками памяти устанавливает ОС Программа, работающая под управлением ОС, не может изменить это соответствие, но может изменять значения в ячейках памяти Для программ память – линейный массив байтов Адреса, которым не соответствуют ячейки памяти, называются недоступными адресами или адресами недоступных ячеек памяти Адрес 0 является недоступным адресом по соглашению между программистами (в т. ч. авторами ОС) и разработчиками процессоров

16: Указатели в языке Си Указатель на (значения типа) T – это тип данных для работы с адресами значений типа Т "Указатель на Т" является составным типом от Т Составные типы получаются из простых типов char, int, и т. п. и других составных типов Тип "указатель на Т" записывается в как "Т"

17: Указатели в языке Си -- примеры int p; Указатель на int p 0 – ОК, p 0 – OK const int p; Указатель на const int p 0 – ошибка p 0 – OK int const p; Константа типа int p 0 – OK p 0 -- ошибка

18: Операции над указателями в Си NULL Константа NULL -- адрес 0, отличный от всех других адресов &myvar Результат – адрес первой из ячеек памяти, которые хранят значение переменной myvar ptrtomyval Результат – значение, на которое указывает ptrtomyval Разыменование указателя ptrtomystruct-myfield Результат – значение поля myfield структуры или объединения ptrtomystruct

19: Операции над указателями в Си ptr1 ptr2, ptr1 ! ptr2 Проверка равенства адресов ptr1 ptr2, ptr1 ptr2, ptr1 ptr2 Проверка взаимного расположения в памяти ячеек с адресами ptr1 и ptr2 ptrN, Nptr, ptr-N Результат -- адрес ячейки, находящейся справа () или слева (-) на расстоянии Nsizeof(ptr) байтов от ячейки по адресу ptr Если ptr имеет тип void, то ошибка компиляции

20: Операции над указателями в Си ptr1-ptr2 Результат -- расстояние между ячейками памяти по адресам ptr1 и ptr2, делённое на sizeof(ptr1) Если ptr1 и ptr2 имеют разны тип, то ошибка Если ptr1 и ptr2 указывают не на элементы одного массива, то неопределённое поведение ptrN, Nptr Сокращение для (ptrN) и (Nptr)

21: Операции над указателями в Си ptr1 ptr2, ptr1 N, ptr2 - N Результат – ptr2 Побочный эффект – запись ptr2 в ptr1 до ближайшей точки следования Результат доступа к памяти через ptr1 может неопределён, если ptr1 и ptr2 имеют разные типы ptr, ptr-- Результат равен ptr Побочный эффект ptr 1 или ptr - 1 до ближайшей точки следования ptr, --ptr Результат равен ptr1 или ptr-1 Побочный эффект ptr 1 или ptr - 1 до ближайшей точки следования

22: Передача параметров функции по указателю Пусть функция f вызывает функцию g и пусть varinf – переменная, описанная в f Поскольку тело g не пересекается с телом f, переменная varinf Либо невидима в теле функции g Либо скрыта одноимённой переменной, описанной в g Функция g не может ни прочитать, ни изменить значение переменной varinf в стековом кадре функции f используя идентификатор varinf, НО Функция g имеет возможность изменить значение varinf в стековом кадре f, если f передаст g в качестве параметра указатель &varinf на значение переменной varinf в стековом кадре f

23: Передача параметров функции по указателю -- пример void myswapint(int x, int y) int oldx x; // five, two невидимы x y; y oldx; int main(void) int five 5, two 2; myswapint(five, two); // чему равно five? two? return 0;

24: Передача параметров функции по указателю -- пример void myswapint(int x, int y) int oldx x; x y; y oldx; int main(void) int five 5, two 2; myswapint(&five, &two); return 0;

25: Передача параметров функции по указателю -- пример void myswapintptr(int px, int py) int oldpx px; px py; py oldpx; int main(void) int five5, two2, pfive&five, ptwo&two; myswapintptr(&pfive, &ptwo); // чему равно five? two? pfive? ptwo? return 0;

26: Указатели и передача аргументов функциям void myswapintptr(const int px, const int py) // Почему не int const px и не int const px?? int oldpx px; px py; py oldpx; int main(void) int five5, two2, pfive&five, ptwo&two; myswapintptr(&pfive, &ptwo); return 0;

27: Управляющие инструкции Инструкции выбора if, switch Инструкции цикла for, while, do-while Инструкции перехода goto, break, continue и возврата return Указатели Понятие указателя Указатели в языке Си Операции над указателями Передача параметров функции по указателю Массивы Массивы в языке Си Связь массивов и указателей – генерация указателя Описание массива в языке Си Многомерные массивы Массивы и строковые константы

28: Массивы в языке Си Массив из (значений типа) T длины N – это тип данных для работы с набором из N значений типа Т N должно быть известно на момент компиляции (С89) N должно быть известно на момент входа в блок, где описан массив (С99/С11) Массивы из Т являются составными от типа Т Для разных N и одного Т – разные типы Переменная A типа "массив из Т длины N" описывается Т AN; Без упоминания переменной -- Т ()N

29: Массивы в языке Си Значения элементов массива хранятся в памяти последовательно по возрастанию адресов Для А массива, описанного как Т AN, верно sizeof(A)sizeof(T)Nsizeof(A0)N Элементы массива длины N нумеруются от 0 до N-1

30: Связь массивов и указателей -- генерация указателя "Массивов в языке Си нет" (с) Генерацией указателя называется замена выражения A типа "массив из Т" на неизменяемый указатель на A0 Компилятор Си выполняет генерацию указателя всюду, где выражение типа массив не является операндом следующих операций Унарные & и sizeof ОК, ожидаемый результат Унарные , --, левый операнд операций присваивания Ошибка компиляции – почему? Левый операнд операции . (точка) Ошибка компиляции – почему?

31: Операции над массивами Генерация указателя позволяет выполнять над массивами те же операции, что и над указателями, кроме операций с побочным эффектом по отношению к операнду типа массив Унарные , -- Операции присваивания, где массив -- левый операнд

32: Описание массива в языке Си T AN; Массив A из значений типа Т длины N T AN И0, И1, . . . , ИX ; Массив A из значений типа Т длины N X N-1 – ошибка компиляции T A И0, И1, . . . , ИX ; Массив A из значений типа Т длины X1 Ak инициализируется с помощью Иk, k0, …, X

33: Многомерные массивы Массив из T, где Т – массив, называется многомерным массивом Примеры описания многомерных массивов int A10100; Массив из 10 массивов из 100 int int A22 0, 1, 2, 3; Массив из 2 массивов из 2 int A00 0, A01 1, A10 2, A11 3

34: Многомерные массивы -- примеры int A23; A0 имеет тип int ()3 A00 имеет тип int sizeof(A) sizeof(A0)2 sizeof(A0) sizeof(A00)3

35: Массивы и строковые константы Значением строковой константы длины N является инициализированный безымянный массив из N1 char Для инициализации массива берутся последовательные символы из записи строковой константы После последнего символа из записи строковой константы берётся один символ 0 Значения строковых констант хранятся в памяти глобальных пременных Значение строковой константы может начинаться или заканчиваться в середине значения другой строковой конст.

36: Массивы и строковые константы -- пример char mystr "1234567890"; // sizeof(mystr) 11 // эквивалентно // char mystr // 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0; Чему равно "1234"0 ? "1234"4 ? char p "1234"; "1234"0 A; // значения строковых констант // могут занимать одни и те же ячейки памяти // p0 равно либо A, либо 1

37: Заключение Управляющие инструкции Инструкции выбора if, switch Инструкции цикла for, while, do-while Инструкции перехода goto, break, continue и возврата return Указатели Понятие указателя Указатели в языке Си Операции над указателями Передача параметров функции по указателю Массивы Массивы в языке Си Связь массивов и указателей – генерация указателя Описание массива в языке Си Многомерные массивы Массивы и строковые константы

Скачать презентацию


MirPpt.ru