Как функции с указателем на функцию в качестве аргумента принимают его, если он не инициализирован? - PullRequest
0 голосов
/ 26 февраля 2019

Как указатель функции в объявлении any_function получает любое значение?В основной функции для any_function никогда не указываются какие-либо указатели на функции, только сами функции.Означает ли это, что указатель на функцию any_function рекурсивно вызывает себя?

#include <stdio.h>

int sum(int, int);
int product(int, int);
int difference(int, int);
int any_function(int(*pfun)(int, int), int x, int y);

int main(void)
{
  int a = 10; /* Initial value for a */
  int b = 5; /* Initial value for b */
  int result = 0; /* Storage for results */
  int (*pf)(int, int) = sum; /* Pointer to function */

  /* Passing a pointer to a function */
  result = any_function(pf, a, b);
  printf("\nresult = %d", result );

  /* Passing the address of a function */
  result = any_function(product,a, b);
  printf("\nresult = %d", result );
  printf("\nresult = %d\n", any_function(difference, a, b));

  return 0;
}

/* Definition of a function to call a function */
int any_function(int(*pfun)(int, int), int x, int y)
{
  return pfun(x, y);
}
/* Definition of the function sum */
int sum(int x, int y)
{
  return x + y;
}

/* Definition of the function product */
int product(int x, int y)
{
  return x * y;
}

/*Defintion of the function product*/
int difference(int x, int y)
{
  return x - y;
}

1 Ответ

0 голосов
/ 26 февраля 2019

Как указатель функции в объявлении any_function получает какое-либо значение?

Поскольку в вызове функции указано значение.То же, что и любой другой параметр.

Например, когда вы пишете:

int my_function(int x) {
    return x + 1;
}

// in main
printf("%d\n", my_function(5));

, он печатает 6. Но как x в объявлении my_function получил какое-либо значение?Ну, это было указано, когда мы писали my_function(5).

В основной функции any_function никогда не получает никаких указателей на функции, только сами функции.

Если вы используетеподобная функция преобразуется в указатель автоматически.Другими словами pf = sum; - это сокращение от pf = &sum;

Означает ли это, что указатель функции any_function вызывает себя рекурсивно?

Нет, откуда взялась эта идея?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...