设为首页 加入收藏

TOP

[编程开发]C与C++中的关于函数指针的强制类型转换与指针函数的关系
2015-11-21 02:57:32 来源: 作者: 【 】 浏览:27
Tags:编程 开发 关于 函数 指针 强制 类型 转换 关系

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

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


?


以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
   
     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<
    
   

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


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LeetCode -- Linked List cycle 下一篇PK赛 Fire Game(BFS)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: