pointers to functions 乍听之下好像有点奇怪,
但一个 function 跟资料同样都是要放在 main memory 里的,
这麽想的话,可以有个 pointer 指到一个 function 的 memory address,也就不是很奇怪的事情了
double foo(int, int);
以上面的例子来说:
foo
是一个 pointer to function,需要两个 int
的参数
并且会回传一个 double
的回传值
下面是一个把 pointer to function 当成 function 参数的例子:
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
/* 参数 op 是一个 pointer to function
* op 需要两个 int 的参数
* 并且会回传一个 int 的 return value
* do_op 的 body 里可以使用这个参数 op */
int do_op(int a, int b, int c, int op(int, int))
{
int result;
result = op(a, b);
result = op(result, c);
return result;
}
int main()
{
int a, b, c, result1, result2;
a = 2;
b = 3;
c = 4;
/* func_ptr 是一个
* 1. pointer to
* 2. function with two int arguments
* 3. returning int */
int (*func_ptr)(int, int);
func_ptr = &mul; // 跟 &mul 的型别相同,所以可以 assign 过去
/* add 这个 function 被当成参数传进去了 */
result1 = do_op(a, b, c, add);
/* *func_ptr (也就等同 mul) 被当成参数传进去了 */
result2 = do_op(a, b, c, *func_ptr);
// result1 = 2 + 3 + 4 = 9
printf("result1 = %d\n", result1);
// result1 = 2 * 3 * 4 = 24
printf("result2 = %d\n", result2);
}
C Programming: A Modern Approach, 2/e
<<: 那些被忽略但很好用的 Web API / Selection
>>: 【Side Project】 菜单内容(建立资料库)
背景知识 首先必须先知道网站的运作分为client(客户端)和server(服器端)两者比次运作 从...
挑战目标: MockNative Camp前端 今天到101取I13 pro替换我的I10,不知道是...
请问PYTHON的CKIPtagger套件 如何断句? 上网找了都没有看到 ...
昨天介绍了框架,今天要来介绍冰箱,ㄟ不是啦是要介绍资料库 所以今天的重点就是资料库 何谓资料库呢?顾...
Golang 基本介绍: 是 Google 开发的静态编译程序语言,支援垃圾回收与并发,跟 C 的撰...