zoukankan      html  css  js  c++  java
  • 通过函数指针调用函数

     1 #include "stdafx.h"
     2 #include <iostream>
     3 using namespace std;
     4 
     5 int Sum;
     6 
     7 void Function1(void);
     8 void Function2(void);
     9 
    10 //函数指针数组
    11 void (*Function[10])(void)=
    12 {
    13     Function1,
    14     Function2,
    15 };
    16 
    17 void Function1(void)
    18 {
    19     Sum=8;
    20 }
    21 
    22 void Function2(void)
    23 {
    24     Sum=3;
    25 }
    26 
    27 int main()
    28 {
    29     void (*p)();
    30     Function[1]();
    31     cout<<"Sum="<<Sum<<endl;
    32     cout<<"-------------------"<<endl;
    33     p=Function[0];
    34     p();
    35     cout<<"Sum="<<Sum<<endl;
    36     cout<<"-------------------"<<endl;
    37     p=Function[1];
    38     (*p)();
    39     cout<<"Sum="<<Sum<<endl;
    40     cout<<"-------------------"<<endl;
    41 
    42     system("pause");
    43     return 0;
    44 }

    执行结果为:

    首先看函数指针数组,拆开来看,Function[]表明是数组,前面再加‘ * ’,表明数组中元素都是指针,即是一个指针数组;

    而后面再加‘ ( ) ’,那么表示数组中的每一个指针指向都是函数;

    两个void表明,每一个函数形参都是void类型,返回值也是void类型。

    程序中,函数指针数组总共包括10个成员,不过暂时只定义了两个函数。

    我们需要了解的是如何通过函数指针调用函数。

    一个函数在编译的时候会被分配一个入口地址,这个函数入口地址称为函数的指针。可以用一个指针变量指向函数,然后通过指针变量调用此函数。

    main函数中,定义了一个函数指针,注意:定义的函数指针的结构应该与拟调用的函数原型相同。

    如void Function1(void),我们定义的函数指针为 void (*p)()

    那么我们完全可以令p=Function1,考虑到是函数指针数组,那么p=Function[0],即将Function1的函数入口地址赋给了指针p

    调用的时候可以写作p()即可。

    当然同样也可以写作(*p)(),具有相同效果。

    如果不希望使用额外的指针,直接调用也是可以的:

    如Function[0]();

    或者Function[1]();

  • 相关阅读:
    [Java基础] 深入jar包:从jar包中读取资源文件
    [Git] git merge和rebase的区别
    windows和linux中换行符的转换
    使用 scikit-learn 实现多类别及多标签分类算法
    python 特征缺失值填充
    多输出回归问题
    python DataFrame获取行数、列数、索引及第几行第几列的值
    Xgboost 模型保存和载入()
    pandas所占内存释放
    SSE,MSE,RMSE,R-square 指标讲解
  • 原文地址:https://www.cnblogs.com/may1016/p/5519044.html
Copyright © 2011-2022 走看看