- •Конспект лекций Часть 2 Оглавление
- •Часть 2 1
- •8. Указатели
- •8.1. Указатели Понятие указателя
- •Работа с указателями
- •Арифметика указателей
- •Ошибки при работе с указателями
- •If (p1) // Если указатель не равен 0, то все в порядке
- •8.2. Указатели и массивы
- •9. Функции и структура программы
- •9.1. Создание и использование функций Процедурный подход к разработке программ
- •Int Максимум_строки (int Строка)
- •Int Минимум_строки (int Строка)
- •Int Максимум_столбца (int Столбец)
- •Int Минимум_столбца (int Столбец)
- •Определение функций в программе
- •Завершение работы функции (инструкция return)
- •If ( Ошибка )
- •Список параметров функций
- •Обращение к функциям в программе
- •Передача данных по значению
- •Передача данных с помощью указателей
- •Передача данных по ссылке
- •Перегружаемые функции
- •Параметры по умолчанию
- •Функции с переменным числом параметров
- •Рекурсивное использование функций
- •Передача функций в качестве параметров
- •Встраиваемые функции (inline - функции)
- •Прототипы функций
- •9.2. Структура программы. Глобальные и локальные данные (области видимости и время жизни) Структура программы
- •Глобальные и локальные данные
- •Классы памяти
- •Многофайловые проекты
- •10. Структуры, объединения, перечисления
- •10.1. Структуры Определение структур
- •Доступ к полям структур
- •Указатели на структуры
- •Структурные параметры функций
- •Битовые поля структур
- •10.2. Объединения Обычные объединения
- •Анонимные объединения
- •10.3. Перечисления
- •Void WriteColor (тип_Спектр c )
- •11. Организация работы с файлами
- •11.1. Потоки для работы с файлами Общие сведения
- •Пример работы с файлом
- •11.2. Работа с файлами Создание потока, открытие и закрытие файла
- •Запись и чтение данных в текстовых файлах
- •Запись и чтение данных в двоичном режиме
- •If ( !File ) // Проверили удалось ли открыть файл
- •Как обнаружить конец файла?
- •Прямой доступ при работе с файлами
- •If ( !File ) // Проверили удалось ли открыть файл
- •Статус потоков ввода-вывода
- •Некоторые другие функции управления потоками ввода-вывода
- •Примеры по работе с файлами
- •12. Работа с динамической памятью Распределение памяти при работе программы
- •Динамическое выделение и освобождение памяти в стиле c
- •Возможные ошибки при работе с динамической памятью
- •Динамические массивы
- •Одномерные однонаправленные списки
- •Одномерные двунаправленные списки
- •Многомерные списки
Определение функций в программе
Любая функция состоит из двух основных элементов: заголовка и тела функции.
Заголовок функции имеет следующий формат:
<Тип возвращаемого значения> <Идентификатор – имя функции> (<Параметры>)
Тело функции представляет собой блок инструкций языка программирования, разделенных символами “точка с запятой”:
{
<Инструкция 1>;
<Инструкция 2>;
………………….
<Инструкция N>;
}
Например:
double Example (double d, int k)
{
double r;
r = d * k;
return r;
}
Внутри тела функции могут использоваться любые инструкции языка программирования. Количество инструкций не ограничено (но лучше разрабатывать небольшие по размеру функции – их легче отлаживать, меньше вероятность допустить ошибку).
Функция может возвращать одно, сформированное внутри функции, значение через свое имя. Тип данных этого значения определяется элементом заголовка <Тип возвращаемого значения>. Тип возвращаемого значения может быть любым, за исключением типа массива (но указателем он может быть).
Не все функции должны возвращать значения. В этом случае <Тип возвращаемого значения> задается ключевым словомvoid, которое означает – “пусто” – возвращаемое значение отсутствует:
void ErrMessage (int N)
{
cout << “\nВнимание! Ошибка номер ” << N << “\n\n”;
}
Завершение работы функции (инструкция return)
Если функция не возвращает через свое имя никакого значения, то она завершается после выполнения последней инструкции тела функции. При необходимости досрочного завершения работы функции необходимо использовать инструкцию return. Например:
void Proc ()
{
……..
If ( Ошибка )
return;
……..
cout << “\nНормальное завершение функции\n ” ;
}
Если произошла ошибка, то выполняется инструкция return, и выполнение функции немедленно прекращается (осуществляется выход из функции). Если ошибки не было, то функция продолжит свою работу до последней инструкции и нормально завершит свою работу, когда достигнет конца блока тела функции.
Таким образом, инструкция returnприводит к немедленному завершению работы функции.
В одной и той же функции могут быть использованы несколько инструкций return.
Если функция возвращает через свое имя некоторое значение, то выход из функции обязательно должен осуществляться с помощью инструкции return. В этом случае эта инструкция не только вызывает окончание работы функции, но и осуществляет передачу возвращаемого функцией значения. Например:
double Calc(double Op1, double Op2, char Oper)
{
switch (Oper)
{
case '+': return Op1 + Op2;
case '-': return Op1 - Op2;
case '/':
if (!Op2)
return Op1 / Op2;
else
{
cout << "Деление на 0!\n";
return 0;
}
case '*': return Op1 * Op2;
default:
{
cout << "Неверная операция!\n";
return 0;
}
}
}
Значение, которое возвращает инструкция return, по типу должно соответствовать типу возвращаемого функцией значения.