範例1#include void shit(int c,int d){printf("c+d=%d\n",c+d);}struct bbb{int evnetid;int (*func)(int,int);}aaa;int main(){aaa.func=shit;aaa.func(3,4);}範例2#include int a(int,int);int (*function_pointer)(int,int); //宣告一個function pointer,為傳整數,參數為兩個整數,名子是function_pointer.. PS:因*的運算優先權較括號低,所以必須括號起來(* xxx),不然會變成宣告一個指標函數,而不是指向另一個函數的指標int b(int *,int *,int (*)(int *,int *)); //宣告函數b,第三個參數為function pointer的原型int b1(int *,int *);int b2(int *,int *);void main(void){//例一int x=10,y=20;function_pointer=&a;function_pointer(10,20);//例二 使用者輸入兩值 先印大值或先印小值int input1,input2,decision;printf("plz input 2 value,we will compare it.\n");scanf("%d",&input1);scanf("%d",&input2);printf("printf \"input1> input2?\"(enter 0) or \"input2> input1?\"(enter 1)\n");scanf("%d",&decision); //0:先印大值 1:先印小值if(decision==0)b(&input1,&input2,b1); //將函式b1傳入b函式else if(decision==1)b(&input1,&input2,b2); //將函式b2傳入b函式elseprintf("= =||\n");}int a(int c,int d){printf("x+y=%d\n",c+d);}int b(int *in_ptr1,int *in_ptr2,int (*f)(int *,int *)) // *f為指向函式b1或b2之function pointer{printf("input1=%d\n",*in_ptr1);printf("input2=%d\n",*in_ptr2);(*f)(in_ptr1,in_ptr2); //呼叫函式b1或b2printf("input1=%d\n",*in_ptr1);printf("input2=%d\n",*in_ptr2);}int b1(int *ptr1,int *ptr2){printf("%d\n %d\n",*ptr1,*ptr2);int *temp[10];if (*ptr1 < *ptr2) { *temp=*ptr1; *ptr1=*ptr2; *ptr2=*temp; } //return *ptr1 > *ptr2;}int b2(int *ptr1,int *ptr2){int *temp[10];if (*ptr2 < *ptr1) { *temp=*ptr1; *ptr1=*ptr2; *ptr2=*temp; } //return *ptr2 > *ptr1;}
2008年10月27日 星期一
function pointer
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言