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

Функцию можно вызвать через указатель па нее. Для этого объявляется указатель соответствующего типа и ему с помощью операции взятия адреса присваивается адрес функции:

void f(int а ){/*...*/ } // определение функции

void (*pf)(int); // указатель на функцию

pf = &f; // указателю присваивается адрес функции

// (можно написать pf = f;)

pf(10); // функция f вызывается через указатель pf

// (можно написать (*pf)(10) )

Для того чтобы сделать программу легко читаемой, при описании указателей на функции используют переименование типов (typedef). Можно объявлять массивы указателей на функции (это может быть полезно, например, при реализации меню):

// Описание типа PF как указателя

// на функцию с одним параметром типа int:

typedef void (*PF)(int);

// Описание и инициализация массива указателей:

PF menu[] = {&new, &open, &save};

menu[l](10); // Вызов функции open

Здесь new, open и save – имена функций, которые должны быть объявлены ранее.

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

#include <iostream.h>

typedef void (*PF)(int);

void fl(PF pf)

{

// функция fl получает в качестве параметра указатель типа PF

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

}

void f(int i )

{

cout << i;

}

int main()

{

fl(f);

return 0;

}

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








Дата добавления: 2015-10-09; просмотров: 996;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.