C語言中的函式指標

2021-07-12 04:01:23 字數 3341 閱讀 3671

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...