мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| c:c_ultimate_guide:pointers [2025/10/10 15:44] – radi0dev | c:c_ultimate_guide:pointers [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in | ||
|---|---|---|---|
| Строка 145: | Строка 145: | ||
| {{: | {{: | ||
| + | |||
| + | ===== Указатели на функцию ===== | ||
| + | |||
| + | Указатель на функцию представляет собой выражение или переменную, | ||
| + | |||
| + | общий синтаксис: | ||
| + | '' | ||
| + | |||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | void hello() { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | void goodbye() { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | int sum(int x, int y) { | ||
| + | return x + y; | ||
| + | } | ||
| + | |||
| + | int subtract(int x, int y) { | ||
| + | return x - y; | ||
| + | } | ||
| + | |||
| + | int main(void) { | ||
| + | // определяем указатель на функцию | ||
| + | void (*message) (void); | ||
| + | | ||
| + | message=hello; | ||
| + | message(); // вызываем функцию, | ||
| + | message = goodbye; // указатель указывает на функцию goodbye | ||
| + | message(); // вызываем функцию, | ||
| + | | ||
| + | int a = 10; | ||
| + | int b = 5; | ||
| + | int result; | ||
| + | int (*operation)(int, | ||
| + | operation=sum; | ||
| + | result = operation(a, | ||
| + | printf(" | ||
| + | operation = subtract; | ||
| + | result = operation(a, | ||
| + | printf(" | ||
| + | | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Массивы указателей на функции ==== | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | void sum(int x, int y) { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | void subtract(int x, int y) { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | void multiply(int x, int y) { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | int main(void) { | ||
| + | int a = 10; | ||
| + | int b = 5; | ||
| + | void (*operations[3])(int, | ||
| + | |||
| + | // получаем длину массива | ||
| + | int length = sizeof(operations)/ | ||
| + | |||
| + | for(int i=0; i < length; i++) { | ||
| + | operations[i](a, | ||
| + | } | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||