程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習019:函數指針,語言學習019

C語言學習019:函數指針,語言學習019

編輯:關於C語言

C語言學習019:函數指針,語言學習019


  在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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved