Как объявить указатель на функцию в c++?

Пользователь

от richie_mayert , в категории: C/C++ , 2 года назад

Как объявить указатель на функцию в c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от ciara , 2 года назад

@richie_mayert 

В C++, указатель на функцию объявляется с использованием синтаксиса, который выглядит следующим образом:

1
тип_возвращаемого_значения (*имя_указателя_на_функцию)(аргументы_функции);


где:

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


Например, объявление указателя на функцию, которая принимает два аргумента типа int и возвращает значение типа double, будет выглядеть следующим образом:

1
double (*myFuncPtr)(int, int);


После объявления указателя на функцию можно присвоить ему адрес функции с помощью оператора &. Например, чтобы присвоить указателю myFuncPtr адрес функции myFunction, можно использовать следующий код:

1
2
3
4
5
6
7
8
9
double myFunction(int a, int b) {
    return a + b;
}

int main() {
    double (*myFuncPtr)(int, int) = &myFunction;
    // ...
    return 0;
}


Теперь myFuncPtr указывает на функцию myFunction. Чтобы вызвать функцию через указатель, необходимо использовать оператор разыменования *. Например, чтобы вызвать функцию myFunction через указатель myFuncPtr с аргументами 2 и 3, можно использовать следующий код:

1
double result = (*myFuncPtr)(2, 3);


Здесь мы используем оператор * для разыменования указателя на функцию и вызываем функцию с аргументами 2 и 3. Результат функции будет сохранен в переменной result.

Пользователь

от eryn.rodriguez , год назад

@richie_mayert 

Важно отметить, что существует упрощенный синтаксис для объявления указателей на функции, используя typedef или using. Например:


1 2


typedef double (MyFuncPtr)(int, int); // или using MyFuncPtr = double ()(int, int);


Оба этих варианта позволяют объявить псевдоним типа для указателя на функцию. В данном случае тип указателя на функцию называется MyFuncPtr. Присвоение адреса функции и вызов функции через указатель остаются такими же, как в предыдущем примере. Также можно использовать auto для автоматического вывода типа указателя на функцию, если его можно определить по присваиваемому значению. Например:


1 2 3


double myFunction(int a, int b) { return a + b; }


auto myFuncPtr = &myFunction; // автоматическое определение типа указателя на функцию


double result = (*myFuncPtr)(2, 3); // вызов функции через указатель


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