Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Климов. Лекции / Алг_яз_Лекция_32.pptx
Скачиваний:
24
Добавлен:
14.05.2015
Размер:
983.91 Кб
Скачать

ПЕРЕДАЧА ИМЕН ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ.

Указатели на функции передаются в подпрограмму таким же образом, как и параметры других типов.

Тип указателя и тип функции, которая вызывается посредством этого указателя, должны совпадать в точности.

31

#include <iostream.h> typedef void (*PF)(int); void f1(PF pf){

// функция f1 получает в качестве параметра указатель типа PF pf(5); // вызов функции, переданной через указатель

}

void f(int i){cout << i;} int main(){

f1(f); return 0;

}

Передача имен функций в качестве параметров

32

Чтобы упростить вызов функции, в ее заголовке можно указать значения параметров по умолчанию

Параметры со значениями по умолчанию

33

Пример:

int f(int a, int b = 0);

void f1(int, int = 100, char* = 0);

//обратите внимание на пробел между * и =

//без него получилась бы операция сложного присваивания *=

void err(int errValue = errno); // errno - глобальная переменная

. . . . . . .

 

f(100); f(a, 1);

// варианты вызова функции f

f1(a); f1(a, 10); f1(a, 10, "Vasia"); // варианты вызова функции f1

f1(a,,"Vasia") // неверно!

Параметры со значениями по умолчанию

34

Функции с переменным числом параметров

Если список формальных параметров функции заканчивается многоточием, это означает, что при ее вызове на этом месте можно указать еще несколько параметров.

ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.

Проверка соответствия типов для параметров обозначенных многоточием не выполняется!

char и short передаются как int

float — как double

36

В качестве примера можно привести

функцию printf, прототип которой

имеет вид: int printf(const char*, ...);

Это означает, что вызов функции должен содержать по крайней мере один параметр типа char* и может либо содержать, либо

не содержать другие параметры

printf("Введите исходные данные");

printf("Сумма: %5.2f рублей", sum);

//один параметр

//два параметра

printf ("%d %d %d %d", а, Ь, с, d); // пять параметров

Функции с переменным числом параметров 37

ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.

Все аргументы, заданные в вызове функции с переменным числом параметров, размещаются в стеке.

Количество формальных параметров, объявленных для функции, определяется числом аргументов, которые берутся из стека и присваиваются формальным параметрам.

38

За правильность выбора дополнительных аргументов из

стека и определение числа аргументов, находящихся в стеке

отвечает программист!

39

ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.

Для обеспечения удобного способа доступа к аргументам функции с переменным числом параметров имеются три макроопределения

(макросы) va_start, va_arg, va_end,

находящиеся в заголовочном файле stdarg.h.

Эти макросы указывают на то, что функция, разработанная пользователем, имеет некоторое число обязательных аргументов, за которыми следует переменное число необязательных аргументов.

Обязательные аргументы доступны через свои имена как при вызове обычной функции.

40

Соседние файлы в папке Климов. Лекции