【编程开发】 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 调试记录 张朋艺

posted @ 2015-11-11 10:28  ZhangPYi  阅读(1329)  评论(0编辑  收藏  举报