zoukankan      html  css  js  c++  java
  • c 指针函数 vs 函数指针

    指针函数,函数指针

    #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
    ", i);
    
      i = fun(23,34, max);
      printf("%d
    ", i);
    
      int *j;
      j = fun2(43,56,max);
      printf("j = %d
    ", *j);
    
      pfun = fun1(23,44,max);
      i = (*pfun)(45,67);
      printf("pfun %d
    ", i);
    
      pfun = fun3(23,44,max);
      i = (*pfun)(451,267);
      printf("pfun %d
    ", i);
    }
    
  • 相关阅读:
    MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》
    Mybatis 在 insert 之后想获取自增的主键 id
    MyBatis动态SQL foreach标签实现批量插入
    PowerDesigner设置表字段唯一约束
    Hadoop基本介绍
    oracle的行级触发器使用
    RFID-RC522、FM1702SL、M1卡初探
    PHP处理海量样本相似度聚类算法
    RFID(Radio Frequency Identification 射频识别)基本概念
    USB Keyboard Recorder
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9164587.html
Copyright © 2011-2022 走看看