c - 函数指针与函数调用有什么区别?

标签 c function function-pointers

你好 friend ,
How can I use an array of function pointers?
如果我们看到上面的链接,它会告诉我们函数指针是如何工作的。
现在的问题是为什么要选择函数指针?
为什么我不能直接使用函数调用?
使用函数指针有什么好处?
例如

enum{a, b, c};
void A();
void B();
void C();
void (*fun[3])() = {A, B, C};

Now when I need to call a function I am doing like,
fun[a](); // This calls function A
// And so on...

同样可以在函数调用中完成

比如当我需要调用函数 A、B 或 C 时。 直接我就可以了

A();
B();
or 
C();

那为什么是函数指针呢?

最佳答案

使用函数指针的原因有很多,特别是在 C 语言中做一些通用的事情。

您将看到它们被使用的主要地方是作为函数的参数。例如函数 bsearch,它使用一个作为函数指针传递的比较函数来比较项目并对数据进行排序:

void *bsearch(const void *key, const void *base,
                     size_t nmemb, size_t size,
                     int (*compar)(const void *, const void *));

这使得 bsearch 成为通用的并且可以对任何类型的数据进行排序,因为只有那个比较函数必须知道数据的类型。


另一个与避免多次检查有关。即。

void makePizza(void) { }

void bakeCake(void) { }

iWantPizza = 1;
...
if (iWantPizza)
   makePizza();
else
   bakeCake();
/* want to call the same function again... */
if (iWantPizza)
   makePizza();
else
   bakeCake();

..

/* alternative */
void (*makeFood)(void) = iWantPizza ? makePizza : bakeCake;

makeFood();
/* want to call the same function again... */
makeFood();

关于c - 函数指针与函数调用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10877150/

相关文章:

function - F# 中的函数值是如何传递的?

c++ - 获取 const 方法的地址

c++ - winapi 函数的函数指针 (stdcall/cdecl)

c++ - 在 gcc 中的不兼容函数类型之间进行转换

c - MXML C 的问题

c - 当函数结束时,这些函数变量会保持它们的值吗?

c++ - 我怎样才能访问双向链表中的嵌套结构?

c++ - 为什么 c++ 有单独的新和删除语法?

c - 为什么我的accept()套接字函数返回 "Invalid argument"errno?

function - 如何将参数传递给 PowerShell 中的函数