编程开发-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【摘自百度百科】.
?