- •Лекция 8
- •Основные понятия и определения
- •Основные понятия и определения
- •Основные понятия и определения
- •Виды функций
- •Описание функций
- •Прототип функции
- •Параметры функции
- •Прототип функции
- •Заголовок функции
- •Заголовок функции
- •Тело функции
- •Пример
- •Пример
- •Пример
- •Пример
- •Структура программы
- •Пример
- •Пример
- •Функциональная схема программы
- •Пример
- •Возвращаемое значение функции
- •Пример
- •Пример
- •Возврат значений сложных типов
- •Параметры функции
- •Передача параметров по значению и по ссылке
- •Передача по значению
- •Передача по ссылке
- •Передача по ссылке
- •Пример
- •Пример
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Строки как параметры функции
- •Строки как параметры функции
- •Передача параметров
- •Нижний уровень передачи параметров
Пример
main
division
max min
Возвращаемое значение функции
Для реализации возврата значения и завершения выполнения функции используется оператор завершения функции,
который относится к группе операторов управления, не рассматривался ранее. Синтаксис использования оператора завершения функции:
return выражение;
Если функция не возвращает никакого значения (в заголовке указан тип void), то оператор возврата указывается без какого-либо выражения:
return;
Пример
Функция, определяющую количество корней квадратного уравнения (целочисленное значение), заданного коэффициентами a, b и c (формальные параметры функции):
int NumberOfRoots(double a, double b, double c)
{
double descr = b*b – 4.0*a*c; if(descr < 0) return 0;
else if(descr > 0) return 2; else return 1;
}
Пример
double descr=b*b–4.0*a*c; if(descr<0) return 0;
else if(descr>0) return 2; return 1;
double descr=b*b–4.0*a*c; int num = 1;
if(descr<0) num = 0;
else if(descr>0) num = 2; return num;
Возврат значений сложных типов
Возврат значений сложных типов (структур и объединений) возможен только в стандарте С99.
В более ранних версиях языка возврат в качестве значений структур или объединений невозможен.
Возвращать в качестве значений массивы в языке С нельзя. Для этого можно использовать возврат указателя на массив.
Параметры функции
Параметры функции могут быть константными: их невозможно изменить. Для описания такого параметра перед его типом указывается ключевое слово const.
Пример:
int Length(const char *str)
{
int len = 0;
for(char *ptr = str;*ptr!=0;ptr++) len++; return len;
}
Передача параметров по значению и по ссылке
Вязыках программирования высокого уровня реализованы два механизма передачи параметров:
по значению;
по ссылке.
Передача по значению
Механизм передачи параметра по значению заключается в следующем: в вызываемую функцию передается значение фактического параметра.
void Inc(int a) { a++; }
int main (int argc, char *argv[])
{
int val = 0; printf(“Значение: %d\n”,val); Inc(val);
printf(“Значение: %d\n”,val); return 0;
}
Передача по ссылке
В языке С механизм передачи параметра по ссылке реализован посредством указателей.
void Inc(int *a) { (*a)++; }
int main (int argc, char *argv[])
{
int val = 0; printf(“Значение: %d\n”,val); Inc(&val);
printf(“Значение: %d\n”,val); return 0;
}
Передача по ссылке
Механизм передачи параметров по ссылке используется для реализации возможностей:
изменение значения переменной, описанной внутри вызывающей функции, вызываемой функцией;
реализации функций, возвращающих несколько значений.