• 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系


    【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系

    标签: 【编程开发】 【VS开发】


    声明:引用请注明出处http://blog.csdn.net/lg1259156776/


    以qsort为例:

    int cmpa(const void *a, const void *b)
    {
      if ( *(double*)a < *(double*)b )
        return -1;
      if ( *(double*)a == *(double*)b )
        return 0;
      return 1;
    }
    
    int cmpb(const double*a, const double*b)
    {
      if (*a < *b )
        return -1;
      if ( *a == *b )
        return 0;
      return 1;
    }
    
    //调用测试
    {
      const sampleSize=5;
      double A[sampleSize] = {1,3,4,2,5};
    
      qsort(A, sampleSize, sizeof(double), cmpa); //标准型
    
      qsort(A, sampleSize, sizeof(double), 
        (int (__cdecl *)(const void *, const void *))cmpb); //强制转换型
    }
    

    函数指针的强制类型转换可以采用这样方式显式给出,包括函数的返回值与实参类型都可以显式指定:

    (int (__cdecl *)(const void *, const void *))cmpb
    

    这里再区分一个概念:函数指针与指针函数;函数指针指的是指向函数的指针,而指针函数指的是返回值是指针的函数,本质上一个是指针,一个是函数。类似下面的例程:

    //指针函数是指返回值是指针的函数,即本质是一个函数:
    #include<iostream>
    using namespace std;
    int main()
    {
        float*find(float(*p)[4],intm);//查询序号为m的学生的四门课程的成绩
        float score[][4]={{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定义成绩数组,第一维可以为变量
        float*pf=NULL;//定义一个指针时一定要初始化
        int i,m;
        cout<<"请输入您想查询的学生的序号:";
        cin>>m;
        pf=find(score,m);//返回为一维数组指针,指向一个学生成绩
        for(i=0;i<4;i++)
        cout<<*(pf+i)<<"";
        cout<<endl;
        return 0;
    }
    float *find(float(*p)[4],intm)
    {
        float *pf=NULL;
        pf=*(p+m);//p是指向二维数组的指针,加*取一维数组的指针
        return pf;
    }
    

    学生学号从0号算起,函数find()被定义为指针函数,其形参pointer是指针指向包含4个元素的一维数组的指针变量。pf是一个指针变量,它指向浮点型变量。main()函数中调用find()函数,将score数组的首地址传给pointer【摘自百度百科】.


    2015-11-11 调试记录 张朋艺

  • 相关阅读:
    REST接口设计规范总结
    Linux 下建立 Git 与 GitHub 的连接
    Linux centos修改防火墙为iptables
    一些开源软件的国内镜像源
    centOS7下安装GUI图形界面
    mysql使用锁的分析
    php后台添加默认图片
    php执行时间
    递归获取所有分类下面子分类的id
    php laravel左连接leftJoin多条where语句
  • 原文地址:https://www.cnblogs.com/huty/p/8518941.html
Copyright © 2020-2023  润新知