程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> [編程開發]C與C++中的關於函數指針的強制類型轉換與指針函數的關系

[編程開發]C與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【摘自百度百科】.


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved