1. 函式指標的定義
顧名思義,函式指標就是函式的指標。它是乙個指標,指向乙個函式。
2.函式指標的使用
我們定義了乙個函式指標,但如何來使用它呢?先看如下例:
#include
#include
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 個
指向函式的
指標。這些指標指向些返回值型別為指向字元的指標、引數為億個指向字元
的指標的函式
數。這念起來似乎有點拗口。不過不要緊,關鍵是你明這是乙個指標陣列,
是陣列。
函式指標陣列怎麼使用呢?也給出乙個非常簡單的例字,只要真正掌握了
使用方法,
再複雜的問題都可以應對。如下:
#include
#include
char * fun1(char * p)
printf( "%s\n", p);
return p;
char * fun2(char * p)
printf( "%s\n", p);
return p;
char * fun3(char * p)
printf( "%s\n", p);
return p;
int main()
char * (*pf[3])(char * p);
pf[0] = fun1; // 可以直接賦值函式名
pf[1] = &fun2; // 可以給函式名加上取位址符
pf[2] = &fun3;
pf[0]( "fun1");
pf[0]( "fun2");
pf[0]( "fun3");
return 0;
4.函式指標的陣列的應用(簡單計算器的實現):
#include
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 main()
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( "*************************\n" );
printf( "請選擇:" );
scanf( "%d", &input);
switch (input)
case 1:
printf( "輸入運算元:" );
scanf( "%d %d", &x, &y);
ret = add(x, y);
break;
case 2:
printf( "輸入運算元:" );
scanf( "%d %d", &x, &y);
ret = sub(x, y);
break;
case 3:
printf( "輸入運算元:" );
scanf( "%d %d", &x, &y);
ret = mul(x, y);
break;
case 4:
printf( "輸入運算元:" );
scanf( "%d %d", &x, &y);
ret = div(x, y);
break;
default:
printf( "選擇錯誤\n" );
break;
printf( "ret = %d\n", ret);
return 0;
使用函式指標陣列的實現:
#include
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 main()
int x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = ; //轉移表
while (input)
printf( "*************************\n" );
printf( " 1:add 2:sub \n" );
printf( " 3:mul 4:div \n" );
printf( "*************************\n" );
printf( "請選擇:" );
scanf( "%d", &input);
if ((input < 4 && input > 1))
printf( "輸運算元:" );
scanf( "%d %d", &x, &y);
ret = (*p[input])(x, y);
else
printf( "輸入有誤\n" );
printf( "ret = %d\n", ret);
return 0;
本文出自 「pawnsir的it之路」 部落格,請務必保留此出處
C語言中的函式指標
開啟去年6月的乙個test.cpp檔案,發現對裡面測試的函式指標幾乎沒有印象了。溫故而知新,於是重新找到ansi c 裡面的說明 除了宣告指向整型數字 雙精度型數字和c語言其他資料型別的指標外,指標也能夠被宣告指向乙個函式 包含乙個函式的位址 指向函式的指標是可能的,因為函式名像陣列名一樣,它們本身...
C語言中的函式指標 指向函式的指標
函式指標是什麼?在定義乙個函式之後,在編譯後,系統會為函式分配一段儲存空間。指標用來儲存位址的,而函式指標也是一樣,只不過儲存的是函式儲存空間的起始位址.如何在c語言中使用函式指標int p int int int代表的是指標變數名,兩個int代表,函式引數有兩個,且都為int型,當然以上定義只為示...
C語言中的函式與指標
1.為什麼需要函式?2.函式優點 3.怎麼定義乙個函式 4.函式呼叫 5.函式的分類 庫函式和自定義函式 6.函式引數,7.在函式中,可以通過return語句結束函式的執行,也可以通過return語句返回乙個值 8.函式的遞迴呼叫,指標int a,b,c scanf d d d a,b,c prin...