2008年10月27日 星期一

function pointer

範例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函式
else
printf("= =||\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或b2
printf("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;
}

沒有留言: