Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Указатели на функции.doc
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
45.89 Кб
Скачать

Void table ( func ptrA [ ] , int n, float xn , float xk , float dx )

{ float x = xn;

while ( x<= xk )

{ cout << "\n";

for (int i=0; i< n; i++)

{ cout. width(10); cout << (* ptrA[i] ) (x);}

x+=dx ;

}

system("pause");

}

Int main () {

table ( S, 3, 0., 2., 0.1 );

return 0;

}

Указатель на функцию – результат работы функции

Указатель на функцию может быть результатом работы функции, то есть функция может возвращать указатель на функцию с помощью оператора return и с помощью формального параметра (например, передача параметра по ссылке).

Ниже приведен пример программы, в которой используются функции возвращающие указатели на функции с помощью return и с помощью формального параметра (например, передача параметра по ссылке).

. . .typedef void ( * menu) ( )

menu act [4] = { act1, act2 , act3 , act 4};

menu V (int i) { return act [i] }

// функция возвращает указатель на

// функцию как результат работы функции

void W (int i , menu & f) { f = act [i] }

// функция возвращает указатель на

// функцию , используя формальный параметр

Void main ( )

{ int i ;

menu nf , ff;

while(1)

{ cin >> i ;

if ( i>=1 && i<=4 )

{ nf = V ( i-1);

nf( ) ; // вызов функции

act [i-1] ( ) ; // вызов функции

W( i-1, ff) ;

ff ( ) ; // вызов функции

}

else exit ( 0) ;

}

}

Ссылка на функцию Определение:

<тип функции> (& имя_ссылки) ( спецификация параметров)

<инициализирующее выражение>;

<инициализирующее выражение> - имя уже известной функции, имеющей тот же тип и ту же сигнатуру параметров, что и ссылка.

Инициализация обязательна!

Ссылка на функцию – синоним функции, обладает всеми правами основного имени функции

. . .

void func (char c) { cout <<c <<endl ;}

Void main ( )

{ void (*pf) (char) = func;

void (& rf)(char) = func ;

(*pf) (‘A’) ; func ( ‘B’) ; rf (‘C’) ;

}

A

B

C

Инициализация может быть и в круглых скобках

Void (*pf) (char) (func) ;

Void (& rf)(char)( func ); Ссылка - возвращаемый результат функции

Ссылки не являются настоящими объектами, ссылка связана с участком памяти инициализирующего ее выражения.

Если функция возвращает ссылку, это означает, что функция должна возвращать не значение, а идентификатор для обращения к некоторомуучастку памяти, в простейшем случае имя переменной. Таким образом, в функции должен быть, например, такой оператор:

Return имя переменной;

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

Вызов такой функции представляет собой частный случай l-значения (l-value), которое представляет в программе некоторый участок памяти. Этот участок памяти может иметь некоторое значение и это значение можно изменять, например, в операторе присваивания.

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

Пример: определить функцию, возвращающую ссылку на элемент массива c максимальным значением. Массив передается в функцию из главной функции посредством параметра.