1. 程式人生 > >c 指針函數 vs 函數指針

c 指針函數 vs 函數指針

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 函數指針