程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 初窺函數指針

初窺函數指針

編輯:C++入門知識

我們通常知道的都是用指針存儲一個變量的地址,這個變量具有跟指針類型相同的數據類型。除了這個功能,指針還可以指向一個函數的地址,進而來調用被指向的函數。

(1) 函數指針的聲明:

 int (*pfun)(double, int);

這樣就聲明了一個指向參數類型是double和int的返回值類型是int的函數指針了。


函數指針通常由三部分組成:

1. 指向函數的返回類型

2. 指針名稱

3. 指向函數的形參類型


(2) 如何指向一個函數:

long sum(long a, long b);

long (*pfun)(long, long) = sum;

這樣就用*pfun的函數指針指向了sum這個函數。


簡單實例:

[cpp]
#include <iostream> 
 
using std::cout; 
using std::endl; 
 
long sum(long a, long b); 
long product(long a, long b); 
 
int main() 

    long (*pdo_it)(long, long); 
    pdo_it = product; 
    cout << endl << "3*5 = " << pdo_it(3,5); 
 
    pdo_it = sum; 
    cout << endl << "3*(4*5)+6 = " << pdo_it(product(3,pdo_it(4,5)),6); 
    cout << endl; 
 
    system("pause"); 
    return 0; 

 
long product(long a, long b) 

    return a * b; 

 
long sum(long a, long b) 

    return a + b; 

結果是:

 

(3) 函數指針作為實參:
因為“指向函數的指針”是完全合理的類型,所以函數可以擁有類型為函數指針的形參。進而,由這樣的函數來調用實參指向的函數。

例子:

[cpp]
#include <iostream> 
 
using std::cout; 
using std::endl; 
 
double squared(double); 
double cubed(double); 
double sumarray(double array[], int len, double (*pfun)(double)); 
 
int main() 

    double array[] = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5}; 
    int len(sizeof array/sizeof array[0]); 
 
    cout << endl << "Sum of Squared = " << sumarray(array, len, squared); 
    cout << endl << "Sum of cubed = " << sumarray(array, len, cubed); 
    cout << endl; 
 
    system("pause"); 
    return 0; 

 
double squared(double x) 

    return x*x; 

 
double cubed(double x) 

    return x*x*x; 

 
double sumarray(double array[], int len, double (*pfun)(double) ) 

    double total(0.0); 
    for ( int i=0; i<len; ++i) 
    { 
        total += pfun(array[i]); 
    } 
    return total; 

結果是:


(4)函數指針數組:

假設有三個函數:

double add(double, double);

double mul(double, double);

double div(double, double);

double (*pfun[3])(double, double) = {add, mul, div};

你可以這樣調用:

pfun[1](1.5, 5.5);

 

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