... > C > Указатели на функции...

Указатели на функции в C

НАВИГАЦИЯ ПО СТРАНИЦЕ

Объявление указателя Присвоение указателю адреса Вызов функции через указатель Передача указателей на функции

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

Вот основы использования указателей на функции в C:

Объявление указателя на функцию:

returnType (*functionPointer)(parameterType1, parameterType2, ...);

Где:

  • returnType — тип значения, возвращаемого функцией.

  • functionPointer — имя указателя на функцию.

  • parameterType1, parameterType2, и так далее — типы параметров функции.

Пример объявления указателя на функцию:

int (*add)(int, int); // Указатель на функцию, принимающую два целых числа и возвращающую целое число.

Присвоение указателю адреса функции:

Чтобы присвоить указателю на функцию адрес конкретной функции, вы можете сделать следующее:

int sum(int a, int b) {
    return a + b;
}

add = sum; // Присвоение указателю адреса функции sum

Вызов функции через указатель:

Чтобы вызвать функцию через указатель на функцию, используйте указатель как обычную функцию:

int result = add(3, 4); // Вызов функции через указатель

Передача указателей на функции в функции:

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

Пример передачи указателя на функцию в функцию:

int operate(int x, int y, int (*operation)(int, int)) {
    return operation(x, y);
}

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int result1 = operate(5, 3, add); // Вызывается функция add
int result2 = operate(5, 3, subtract); // Вызывается функция subtract

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