標簽: 【編程開發】 【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【摘自百度百科】.