c 指針函數 vs 函數指針
阿新 • • 發佈:2018-06-11
stat 不能 spa 美的 返回函數 c 指針 n) 類型 code
指針函數,函數指針
#include <stdio.h>
int max(int a, int b){
return a > b ? a : b;
}
//函數指針,2個int參數,int返回值
int(*pfun)(int, int);
//函數的第三個參數是函數指針,int返回值
int fun(int a, int b, int(*f)(int, int)){
return (*f)(a,b);
}
//這是指針(返回值是指針)函數,函數的第三個參數是函數指針,int*返回值
int* fun2(int a, int b, int(*f)(int, int)){
static int i;
i = (*f)(a,b);
return &i;
}
//這是指針函數,返回函數指針,返回的函數指針,指向的函數為返回值為int, 2個int參數。這個函數有3個參數,前2個是int參數,第三個參數是函數指針,指向的函數為int返回值,2個int參數。
//完全理解不了
int(*fun1(int a, int b, int(*f)(int, int)))(int, int){
return f;
}
//下面的是很容理解的,但是編譯不過,返回值是函數指針,指向的函數為返回值為int, 2個int參數。函數名為fun1,有3個參數,第三個參數是函數指針,指向的函數為返回值為int, 2個int參數。
//int(*)(int, int) fun4(int a, int b, int(*f)(int, int)){
// return f;
//}
//下面的typedef含義是用,聲明了一個新的類型叫pf,它是函數指針,所指向的函數為int返回值,2個int參數。
typedef int(*pf)(int,int);
//pf為fun3的返回值,第三個參數的類型為pf,完美的解決了上面的fun4不能編譯通過的問題
pf fun3 (int a, int b, pf f){
return f;
}
int main(){
pfun = &max;
int i;
i = (*pfun)(3 ,2);
printf("%d\n", i);
i = fun(23,34, max);
printf("%d\n", i);
int *j;
j = fun2(43,56,max);
printf("j = %d\n", *j);
pfun = fun1(23,44,max);
i = (*pfun)(45,67);
printf("pfun %d\n", i);
pfun = fun3(23,44,max);
i = (*pfun)(451,267);
printf("pfun %d\n", i);
}
c 指針函數 vs 函數指針