мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

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