zoukankan      html  css  js  c++  java
  • 【编程开发】 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 调试记录 张朋艺

  • 相关阅读:
    【坑】提答题
    Google Code Jam 2014 Round2
    湖北省队互测Week1
    [xyz模拟题]动态维护树的直径
    音乐会的等待【单调栈】
    51nod1202【DP-树状数组维护】
    51nod1113【矩阵快速幂】
    51nod1255【贪心-栈的应用】
    Lightoj1059【最小生成树】
    SPOJ IAPCR2F 【并查集】
  • 原文地址:https://www.cnblogs.com/huty/p/8518941.html
Copyright © 2011-2022 走看看