- •Управление esc – последовательность (с примерами)
- •4. Определение констант и их характеристика (const,define,enum)
- •5. Форматные потоки в с. Функции fPrintf(), Fscanf(), и модификации (с примерами). Спецификаторы
- •7. Перегруженные операции.
- •8. Инструкция ветвления. (пример)
- •9. Инструкция switch()
- •10. Применение инструкции switch() для создания текстового меню.
- •11. Инструкция цикла.
- •12. Инструкция перехода.
- •13. Указатели. Операции над указателями. Косвенная адресация.
- •14. Ссылки (пример)
- •15. Статические числовые одномерные
- •16. Статические числовые двумерные массивы.
- •17. Динамическая память.
- •18. Выделение памяти под динамический одномерный и двумерный массив.
- •19. Алгоритм удаления и добавления данных в массив.
- •20. Глобальные, локальные, статические, внешние переменные.
- •21. Классы памяти.
- •22. Формальные и фактические параметры.
- •23. Функции.
- •24. Виды передачи параметров в функцию.
- •25.Функции и массивы
- •26. Функции с переменным числом параметров.
- •27. Шаблоны функции.
- •28.Рекурсии. Фреймы.
- •29. Функция Main()
- •30. Стеки.
- •31. Очереди.
- •33. Строки, как массив символов.
- •34. Функции ввода строковых переменных.
- •35.Основные функции обработки строковых переменных.
- •37. Функции преобразования типов.
- •38. Строки типа string.
- •40. Функции работы с памятью. Memcmp - сравнивает две области памяти
- •41. Структуры
- •42. Вложенные структуры.
- •43. Объединения (union)
- •44.Передача переменных определенных пользователем в функцию.
- •50. Функция определения конца файла.
- •51. Файловый поток.
- •52. Функции tellg и ftell
- •53. Установка файлового указателя
- •55. Обработка текстовых файлов.
- •56. Бинарный файл.
12. Инструкция перехода.
При выполнении оператор перехода происходит безусловная передача управления в некоторую точку программы. Существует четыре таких оператора: break, continue, goto и return.
Операторы break Синтаксис следующий:break;
Оператор break можно использовать только внутри операторов итерации (while, do и for - циклы) или с оператором switch. Он прекращает выполнение итерации или оператора switch. Поскольку операторы итерации и оператор switch могут комбинироваться и иметь любую глубину вложенности, следует обращать особое внимание на то, чтобы оператр break выполнял выход именно из нужного цикла или оператора switch. Правило состоит в том, что оператор break заканчивает выполнение ближайшего к нему объемлющего цикла итерации или оператора switch.
Операторы continue
Синтаксис следующий:
continue;
Оператор continue может быть использован только внутри оператора итерации; он передает управление на проверку условия циклов while и do, либо на выражение инкремента цикла for.
При вложенности циклов итерации оператор continue считается принадлежащим ближайшей объемлющей итерации
Операторы goto Синтаксис следующий:
goto метка;
Оператор goto передает управление оператору, имеющему указанную "метку" (См. Операторы-с-метками), который должен находиться в пределах той же функции.
С++: В С++ допустимо обойти объявление с явным или неявным инициализатором, если это объявление не находится во внутреннем блоке, который также обходится.
Операторы return
Если тип возврата функции не равен void, то тело функции должно содержать как минимум один оператор return следующего формата:
return выражение-возврата;
где выражение-возвратадолжно быть типа type или типа, преобразуемого к типу, заданному type, при присвоении. Значение выражениявозврата и есть значение, возвращаемое данной функцией. Выражение, вызывающее функцию, вида func(список-действительных-аргументов) является значением rvalue типа type, а не именующим (lvalue) значением.
Выполнение вызова функции заканчивается, когда встретился оператор return; если оператор return отсутствует, то выполнение "проваливается" к последней закрыващей фигурной скобке тела функции.
Если тип возврата void, то оператор return можно записать как:
{...return;}
13. Указатели. Операции над указателями. Косвенная адресация.
Указатели — это те же переменные. Разница в том, что вместо того, чтобы хранить определенные данные, они хранят адрес (указатель), где данные могут быть найдены.
Код, который вы ввели, объявляет три целых переменных:
int iNum1;
int iNum2 ;
int iResult;
Затем объявляются еще две переменные:
int* pNum1;
int* pNum2;
Обратите внимание, что в объявлении использована запись int*. К какому же типу относится переменная pNum1? Можете ли вы сохранить целое значение в pNum1? Нет. В pNum1 вы можете сохранить адрес переменной типа int. Вы должны сохранить в переменной pNum1 число 1000, поскольку 1000 является адресом iNum1. Точно так же вы должны сохранять адрес целого значения и в переменной pNum2. После этого вы присваиваете значения переменным iNum1 и iNum2:
iNum1 = 2;
iNum2 = 2;
Затем вы присваиваете значения переменным pNumI и pNum2:
pNum1 = &iNum1;
pNum2 = &iNum2;
Эти два оператора сохраняют адрес переменной iNum1 в pNum1 и адрес iNum2 в pNum2. Далее вам нужно вычислить результат сложения iNum1 с iNum2. Вы могли бы бы просто написать оператор
iResult = iNum1 + iNum2;
Однако попробуем выполнить вычисления, применив указатели, а не переменные. Например, чтобы вычислить результат сложения iNuml и iNum2, вы пишете следующий оператор:
iResult = *pNum1 + *pNum2;
Операции над указателями
|ptr1= =ptr2 |Сравнение на "равенство"
| ptr1 != ptr2 |Сравнение на "неравенство"
| Ptr1< ptr2 |Сравнение на "меньше"
|рtr1<= ptr2 |Сравнение на "меньше или равно" |
| Рtr1> ptr2|Сравнение на "больше"
|ptr1>= ptr2 | Сравнение на "больше или равно" |
|ptr1 - ptr2 |Вычисление числа элементов массива между ptr1 и ptr2. |
|ptr1+ int_val |Вычисление указателя , отстоящего от ptr1на "вверх”
|ptr1 - int_val |Вычисление указателя , отстоящего от ptr1 на int_val вниз |
|ptr1++ (++ptr1) |Увеличение значения указателя на единицу |
|ptr1-- (--ptr1) |Уменьшение значения указателя на единицу
Косвенная адресация
int x=*y;
Для того чтобы обратиться к объекту, имея его адрес, нужно применить операцию разыменования, или косвенную адресацию , обозначаемую звездочкой (*). Имея следующие определения переменных:
int ival = 1024;, ival2 = 2048;
int *pi = &ival;
мы можем читать и сохранять значение ival, применяя операцию разыменования к указателю pi:
// косвенное присваивание переменной ival значения ival2
*pi = ival2;
// косвенное использование переменной ival как rvalue и lvalue
*pi = abs(*pi); // ival = abs(ival);
*pi = *pi + 1; // ival = ival + 1;
Когда мы применяем операцию взятия адреса (&) к объекту типа int, то получаем результат типа int*
int *pi = &ival;