今天在研究 C Function Pointer(函数指针) 的部分,原本有些误解,后来查了一些数据后,终于厘清 Function Pointer 的概念了!
Function Pointer 顾名思义,就是指向 函数的指针
在 C 语言中,不论是 variable、array、struct、或是 function(一段源程序),都有所属的启始内存位置
由此可知,main function 也是有其启始内存位置。
而 function pointer 的声明跟使用 function 时所要注意的地方是相同的,有以下几点必须注意:
返回值型态(return type)
参数数量(augument count)
参数型态(argument type)
以下直接用一个简单范例来说明 function pointer 的使用:
- #include <stdio.h>
- //function声明
- int doAdd(int, int);
- int doMinus(int, int);
- int main(void) {
- //声明 function pointer
- //注意所设置的参数数量与型态
- int (*my_func_ptr)(int, int);
- //function pointer 指向 doAdd
- my_func_ptr = doAdd;
- printf("function pointer 指向 doAdd => %d\n", (*my_func_ptr)(5, 3)); //结果:8
- //function pointer 指向 doMinus
- my_func_ptr = doMinus;
- printf("function pointer 指向 doMinus => %d\n", (*my_func_ptr)(5, 3)); //结果:2
- return 0;
- } //end main
- int doAdd(int a, int b) {
- return a + b;
- } //end doAdd
- int doMinus(int a, int b) {
- return a - b;
- } //end doMinus
从上面的范例可以看出,doAdd() 与 doMinus() 两个 函数的返回值型态、参数数量、参数型态都是相同的,只是名称不同而已。
而名称不同,却不影响 function pointer 的使用,因为我们所用的是 函数的启始内存位置
而 function pointer 的使用,有一点相当重要,即是 function pointer 的声明;而 function pointer 的声明,即是要注意到‘返回值型态’、‘参数数量’、‘参数型态’这三个部分。
当 function pointer 的声明完成后,另外一个需要注意的就是每个 函数的启始内存位置;而每个函数的启始内存位置,即为 函数的名称。
在程序中,就是通过将 function pointer 指向不同 函数的启始内存位置,来执行不同的 function。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
