第七章 - C++的编程模块

一,函数指针

与数据项类似,函数也有地址,函数的地址是存储其二进制代码的起始位置。假设我们设计一个名为processArray()的函数,可以使用不同的方式来处理给定的数组。要实现这种目标,processArray()函数的第二个参数设置为函数指针。要使用函数指针,为此必须完成下面的工作:

1.1,获取函数地址

函数的地址就是函数名。

1.2,声明函数指针

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

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

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

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

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

1.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;
}

猜你喜欢

转载自blog.csdn.net/cloud323/article/details/80895773