函數指針是一種在C、C++、D語言、其他類 C 語言和Fortran 2003中的指針。函數指針可以像一般函數一樣,用於調用函數、傳遞參數。在如 C 這樣的語言中,通過提供一個簡單的選取、執行函數的方法,函數指針可以簡化代碼。
函數指針只能指向具有特定特征的函數。因而所有被同一指針運用的函數必須具有相同的參數和返回類型。
本文地址:http://www.cnblogs.com/archimedes/p/3669872.html,轉載請注明源地址。
下面的代碼說明了一種初始化函數指針的方法:
f( (*fp)() = & = f(= (*pf)(= pf();
以下為函數指針在C中的簡單運用:
#include <stdio.h> max( x, x > y ? main( (* p)(, ) = & max; , & a, & b, &= (* p)(( *
Node* search_list(Node* node, (node !=(node->value === node->
一種更加通用的方法就是使該函數能用任何類型值的鏈表,必須修改函數,使它與類型無關。解決的方案就是使用函數指針。
#include <stdio.h>*search_list( Node *node, * (*compare)( *, *( node !=( compare( &node->value, value ) == = node->
在特定的鏈表中進行比較的時候,用戶需要編寫適當的比較函數,並把指向該函數的指針和指向需要查找的值的指針傳遞給查找函數,下面是一個整型鏈表中查找的比較函數:
compare_ints( *a, *( *( *)a == *( * desired_node = search_list(root, &desired_value, compare_ints);
如果你希望在一個字符串鏈表中進行查找,下面的代碼可以完成任務:
#include<.h>= search_list(root, , strcmp);
再看一個完整的例子:
#include<stdio.h> object_compare( * a, * a->data < z->data ? : *maximum( * begin, * end, (* compare)( *, * * result =(begin !==++ main( data[] = {{}, {}, {}, {}, {}, {}, {}, { *= maximum(data + , data + , &, (*
下面的程序是一個簡化的根據運算符轉到相應運算的例子:
#include<stdio.h> _add(, _sub(, _mul(, _div(, _add( a, a + _sub( a, a - _mul( a, a * _div( a, a / main(= = , &= (====
使用可以使用轉換表來實現相同的任務,轉換表就是一個函數指針數組,代碼如下:
#include<stdio.h> _add(, _sub(, _mul(, _div(, _add( a, a + _sub( a, a - _mul( a, a * _div( a, a / main(= = , & (*oper_func[])(, ) ==