bloggerads

2011年8月7日 星期日

C 函數指標的用法

C++有class, 那 C 呢??
以下介紹兩種方式,

方法一是定義的結構裡有函數pointer,然後再將結構宣告成陣列形式,好處是多定義了資料欄位


方法二是直接用陣列紀錄函式的pointer


//

// Method 1
//

+  int func1(int x)
+  {
+      return (2*x);
+  }
+  
+  int func2(int x) 
+  {
+      return (4*x);
+  }
+  
+  typedef struct 
+  {
+          int prio;
+          int ( *funcType )(int); //Function pointer
+  } TEST;
+  
+  int main()
+  {
+      
+      TEST MyTask[] =  {
+           { 1 , func1 },
+           { 2 , func2 }
+      };
+      
+      printf("x=2\n");
+  
+      printf("function priority = %d, output 2x= %d\n", MyTask[0].prio, MyTask[0].funcType(2) );
+  
+      printf("function priority = %d, output 4x= %d\n", MyTask[1].prio, MyTask[1].funcType(2) );
+      return 0;

+  }

--------------------------------Result----------------------------------


  x=2

  function priority = 1, output 2x=4
  function priority = 2, output 2x=8


//

//  Method 2
//

+  

+     void  Plus() {
+         printf("Plus\n");
+     }
+
+     void  Sub() {
+         printf("Sub\n");
+     }
+  
+     void main()
+     {
+         void ( *FuncGroup[] ) (void) = {Plus, Sub}; // 函數指標陣列
+
+         FuncGroup[ 0 ] (); // 呼叫函數
+         FuncGroup[ 1 ] ();
+     }

-----------------------------Result--------------------------------

  Plus
  Sub

沒有留言:

張貼留言