定義形式:型別 (*指標變數名)(引數串列);
例如:int (*p)(int i,int j);
在這里 int是函式的回傳型別,*p是指向函式的指標,(int i,int j);是函式的引數
注意 : int f(int i, int j);
int (p)(int i, int j);
前者是回傳值是指標的函式;后者是一個指向函式的指標,
示例1
#include <stdio.h>
#define GET_MAX 0
#define GET_MIN 1
int get_max(int i,int j)
{
return i>j?i:j;
}
int get_min(int i,int j)
{
return i>j?j:i;
}
int compare(int i,int j,int flag)
{
int ret;
//這里定義了一個函式指標,就可以根據傳入的flag,靈活地決定其是指向求大數或求小數的函式
//便于方便靈活地呼叫各類函式
int (*p)(int,int);
if(flag == GET_MAX)
{
p = get_max;
}else{
p = get_min;
}
ret = p(i,j);//或者ret = (*p)(i,j);
return ret;
}
int main()
{
int i = 5,j = 10,ret;
ret = compare(i,j,GET_MAX);
printf("The MAX is %d\n",ret);
ret = compare(i,j,GET_MIN);
printf("The MIN is %d\n",ret);
return 0 ;
}
示例2 函式指標作為引數
/**
比較兩個字串,相等回傳Equal,不相等回傳Not Equal
**/
#include <stdio.h>
#include <string.h>
void check(char *a,char *b,int (*cmp)(const char *,const char *));
int main()
{
char s1[80],s2[80];
int (*p)(const char *,const char *);
//將庫函式strcmp的地址賦值給函式指標p
p=strcmp;
printf("請輸入兩個字串.\n");
gets(s1);
gets(s2);
check(s1,s2,p);
return 0;
}
void check(char *a,char *b,int (*cmp)(const char *,const char *))
{
printf("Testing for equality.\n");
//運算式(*cmp)(a,b)呼叫strcmp,由cmp指向庫函式strcmp(),由a和b作呼叫strcmp()的引數,
//呼叫時,與宣告的情況類似,必須在*cmp周圍使用一對括號,使編譯程式正確操作
if((*cmp)(a,b)==0)
printf("Equal\n");
else
printf("Not Equal\n");
}
示例3
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
//check()函式的第3個函式是函式指標,就可以根據具體情況傳入不同的處理函式
void check(char *a,char *b,int (*cmp)(const char *,const char *));
//自定義的比較兩個字串的函式
int compvalues(const char *a,const char *b);
int main()
{
char s1[80],s2[80];
printf("輸入兩個數字或自婦產\n");
gets(s1);
gets(s2);
if(isdigit(*s1)){ //如果是數字,則用函式指標傳入數字比較函式進行處理
printf("Testing values for equality.\n");
check(s1,s2,compvalues);
}else{//如果是字串,則用函式指標傳入庫函式strcmp進行處理
printf("Testing strings for equality.\n");
check(s1,s2,strcmp);
}
}
void check(char *a,char *b,int (*cmp)(const char *,const char *))
{
if((*cmp)(a,b)==0)
printf("Equal.\n");
else
printf("Not Equal.\n");
}
int compvalues(const char *a,const char *b)
{
if(atoi(a) == atoi(b))
return 0;
else
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71537.html
標籤:C
上一篇:C語言實作封裝、繼承和多型
