C++ 函数指针

来源:互联网 发布:诺基亚n9deb的软件 编辑:程序博客网 时间:2024/06/03 20:45

一,函数指针的基础知识

与数据项类似,函数也有地址,函数的地址是存储其二进制代码的起始位置。


二,函数指针

假设我们设计一个名为processArray()的函数,可以使用不同的方式来处理给定的数组。要实现这种目标,processArray()函数的第二个参数设置为函数指针。要使用函数指针,为此必须完成下面的工作:

1,获取函数的地址

函数的地址就是函数名。


2,声明函数指针

声明指向函数的指针时,也必须指定指针指向的函数类型。这意味着声明必须指定函数的返回值类型以及函数的特征标。为提供正确的运算符优先级,必须在声明中使用括号将*pf括起来。不然,*pf(int)意味着pf是返回指针的函数,而(*pf)(int)意味着pf是一个指向函数的指针。

double (*pf)(int);double cube(int);pf = cube;


3,使用函数指针来调用函数

(*pf)扮演的角色与函数名相同

double (*pf)(int);double cube(int);pf = cube;(*pf)(5);


4,可以使用typedef进行简化

typedef void (*p_fun)(int nums[], int n);void reverseOrder(int nums[], int n);p_fun p;

下面是完整的实例

#include <iostream>using namespace std;typedef void (*p_fun)(int nums[], int n);void processArray(int nums[], int n, p_fun p);void reverseOrder(int nums[], int n);  //逆序输出函数中的元素void positiveOrder(int nums[], int n);  //正序输出函数中的元素 int main(){    int nums[5] = {1, 2, 3, 4, 5};    int n = 5;    processArray(nums, n, reverseOrder);    processArray(nums, n, positiveOrder);    return 0;}void processArray(int nums[], int n, p_fun p){    p(nums, n);}void reverseOrder(int nums[], int n){    for(int i = n - 1; i >= 0; i --){        cout<<nums[i]<<"  ";    }    cout<<endl;}void positiveOrder(int nums[], int n){    for(int i = 0; i < n; i ++){        cout<<nums[i]<<"  ";    }    cout<<endl;}
0 0
原创粉丝点击