【问题标题】:How do functions with a function pointer as an argument accept it if it is uninitialized?如果函数指针未初始化,函数指针作为参数的函数如何接受它?
【发布时间】:2019-02-26 00:49:39
【问题描述】:

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;
}

【问题讨论】:

标签: c function-pointers


【解决方案1】:

any_function 声明中的函数指针如何接收任何值?

因为函数调用指定了一个值。与任何其他参数相同。

例如当你写:

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

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

它会打印 6。但是 xmy_function 的声明中是如何收到任何值的?嗯,我们写my_function(5)的时候就指定了。

在主函数中,any_function 永远不会被赋予任何函数指针,只有函数本身。

如果你使用这样的函数,它会自动转换为指针。换句话说pf = sum;pf = &amp;sum;的缩写

这是否意味着函数指针 any_function 正在递归调用自身?

不,这个想法是从哪里来的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2017-05-22
    • 1970-01-01
    相关资源
    最近更新 更多