1. 函數指針的定義
顧名思義,函數指針就是函數的指針。它是一個指針,指向一個函數。
2.函數指針的使用
我們定義了一個函數指針,但如何來使用它呢?先看如下例:
#include <stdio.h>
#include <string.h>
char * fun(char * p1, char * p2)
{
int i = 0;
i = strcmp( p1, p2 );
if (0 == i)
{
return p1 ;
}
else
return p2 ;
}
int main()
char * (*pf)(char * p1, char * p2);
pf = &fun;
(*pf) ( "aa", "bb" );
return 0;
3.函數指針數組
現在我們清楚表達式 “char * (*pf)( char * p) ”定義的是一個函數指針pf 。既然pf
是個指針,那就可以儲存在個數組。把上式修改下:
char * (*pf[3])(char * p);
這是定義一個函數指針數組。它是一個數組,數組名為pf ,數組記憶體儲了3 個
指向函數的
指針。這些指針指向些傳回值類型為指向字元的指針、參數為億個指向字元
的指針的函數
數。這念起來似乎有點拗口。不過不要緊,關鍵是你明這是一個指針數組,
是數組。
函數指針數組怎麼使用呢?也給出一個非常簡單的例字,隻要真正掌握了
使用方法,
再複雜的問題都可以應對。如下:
char * fun1(char * p)
printf( "%s\n", p);
return p;
char * fun2(char * p)
char * fun3(char * p)
char * (*pf[3])(char * p);
pf[0] = fun1; // 可以直接指派函數名
pf[1] = &fun2; // 可以給函數名加上取位址符
pf[2] = &fun3;
pf[0]( "fun1");
pf[0]( "fun2");
pf[0]( "fun3");
4.函數指針的數組的應用(簡單電腦的實作):
int add(int a, int b)
return a + b;
int sub(int a, int b)
return a - b;
int mul(int a, int b)
return a*b;
int div(int a, int b)
return a / b;
int x, y;
int input = 1;
int ret = 0;
while (input)
printf( "*************************\n" );
printf( " 1:add 2:sub \n" );
printf( " 3:mul 4:div \n" );
printf( "請選擇:" );
scanf( "%d", &input);
switch (input)
{
case 1:
printf( "輸入操作數:" );
scanf( "%d %d", &x, &y);
ret = add(x, y);
break;
case 2:
ret = sub(x, y);
case 3:
ret = mul(x, y);
case 4:
ret = div(x, y);
default:
printf( "選擇錯誤\n" );
}
printf( "ret = %d\n", ret);
使用函數指針數組的實作:
int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //轉移表
if ((input < 4 && input > 1))
printf( "輸操作數:" );
ret = (*p[input])(x, y);
else
printf( "輸入有誤\n" );