С++ для начинающих

Вызов


Указатель на функцию применяется для вызова функции, которую он адресует. Включать оператор разыменования при этом необязательно. И прямой вызов функции по имени, и косвенный вызов по указателю записываются одинаково:

#include <iostream>

int min( int*, int );

int (*pf)( int*, int ) = min;

const int iaSize = 5;

int ia[ iaSize ] = { 7, 4, 9, 2, 5 };

int main() {

    cout << "Прямой вызов: min: "

         << min( ia, iaSize ) << endl;

    cout << "Косвенный вызов: min: "

         << pf( ia, iaSize ) << endl;

    return 0;

}

int min( int* ia, int sz ) {

    int minVal = ia[ 0 ];

    for ( int ix = 1; ix < sz; ++ix )

        if ( minVal > ia[ ix ] )

            minVal = ia[ ix ];

    return minVal;

}

Вызов

pf( ia, iaSize );

может быть записан также и с использованием явного синтаксиса указателя:

(*pf)( ia, iaSize );

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

Конечно, если такой указатель имеет нулевое значение, то любая форма вызова приведет к ошибке во время выполнения. Использовать можно только те указатели, которые адресуют какую-либо функцию или были проинициализированы таким значением.



Содержание раздела