文章出處

  在C語言中,函數名也是指針變量,比如創建了一個add(int n,int m)的函數的同時也創建了一個名為add的指針變量,因此我們可以把函數指針當作一種類型為它賦值、當作參數傳遞等操作

  C語言創建函數指針的公式:

    返回類型 (*指針變量)(參數類型)

 1 #include <stdio.h>
 2 
 3 int add(int n,int m){
 4     return n+m;
 5 }
 6 
 7 int sub(int n,int m){
 8     return n-m;
 9 }
10 
11 int main(){
12     int n=10;
13     int m=5;
14     int (*calculate)(int,int);//創建一個名為calculate的變量
15     calculate=add;
16     int result=calculate(n,m);//相當于add(n,m);
17     printf("%i\n",result);
18     calculate=sub;
19     result=calculate(n,m);//相當于sub(n,m);
20     printf("%i\n",result);
21     return 0;
22 }

   雖然函數指針是指針,但是在使用的時候我們可以省略"*"的寫法比如上面的calculate(n,m),我們不必寫成(*calculate)(n,m);需要注意的是函數指針只接受和它的返回值和參數都相同的函數地址

函數指針數組

 1 #include <stdio.h>
 2 
 3 enum response_type{DUMP,SECOND_CHANCE,MARRIAGE};
 4 typedef struct{
 5     char *name;
 6     enum response_type type;
 7 } response;
 8 
 9 void dump(response r){
10     printf("dump %s\n",r.name);
11 }
12 
13 void second_chance(response r){
14     printf("second_chance %s\n",r.name);
15 }
16 
17 void marriage(response r){
18     printf("marriage %s\n",r.name);
19 }
20 
21 int main(){
22     response r[]={{"Mike",DUMP},{"Luis",SECOND_CHANCE},{"Matt",SECOND_CHANCE},{"William",MARRIAGE}};
23     void (*replies[])(response)={dump,second_chance,marriage};//創建函數指針數組
24     int i;
25     for(i=0;i<4;i++){
26         replies[r[i].type](r[i]);
27     }
28     return 0;
29 }

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()