码迷,mamicode.com
首页 > 其他好文 > 详细

c 指针函数 vs 函数指针

时间:2018-06-10 23:10:06      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:\n   include   函数   函数名   函数指针   print   int   ati   完全   

指针函数,函数指针

#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 函数指针

标签:\n   include   函数   函数名   函数指针   print   int   ati   完全   

原文地址:https://www.cnblogs.com/xiaoshiwang/p/9164587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!