C++之函数体——函数声明指针(指针指向函数)

  • 函数也有地址,函数的地址时存储机器语言代码的内存开始地址
  • 好处:可以在不同的时间使用不同的函数

函数的指针声明
注意:
1、下面这个语句声明了一个指针ptrSum,指向一个函数
2、double (*ptrSum)(double double)不是指针函数,而是声明了一个函数ptrSum,返回double *类型

//函数原型;
double sum(double, double);
//函数指针声明
double (*ptrSum)(double double)
ptrSum = sum//相当于直接将指针指向函数

//这里定义一个简单的函数pow(x,y)函数
//1.头文件constdemo.h

#ifndef CONSTDEMO_H_INCLUDED
#define CONSTDEMO_H_INCLUDED
#include <iostream>
using namespace std;
#endif // CONSTDEMO_H_INCLUDED

int power(int, int);//声明函数

int power(int input1, int input2)//定义函数
{
    int sum =  1;
    for(int i = 0 ; i < input2; i++)
    {
        sum *= input1;//相当于pow(input1,input2)
    }
    cout << sum << endl;
}

//2.主函数main.cpp

#include <iostream>
#include <cmath>
#include "headdemo.h"//自己写的头文件要通过双引号引用
#include "constdemo.h"
using namespace std;

int main()
{

    int (*ptr_power)(int, int);//声明一个函数指针
    ptr_power = power;
    ptr_power(2,10);//利用指针调用函数
    power(2,10);//直接调用函数
    return 0;
}

//程序输出

1024
1024

Process returned 0 (0x0)   execution time : 0.078 s
Press any key to continue.
  • 上面的指针是写在了main.cpp中了,如果函数的数量很多,这样每次通过指针调用函数就很麻烦,可以将这种指针调用函数的方式进行封装,定义一个指针调用函数,每次调用这个指针调用函数就可以直接调用函数
    //constdemo.h头文件
#ifndef CONSTDEMO_H_INCLUDED
#define CONSTDEMO_H_INCLUDED
#include <iostream>
using namespace std;
#endif // CONSTDEMO_H_INCLUDED

/** 定义两个阶乘函数的乘积n!*m! */
int factorial(int, int );//声明函数
int factorial(int input_num1, int input_num2)//这里没通过递归方法进行计算,构思不够完美,就是简单测试一下
{
    int result = 1;
    for(int i = 1; i <= input_num1; i++)
        {
            result *= i;
        }
    for(int j = 1; j <= input_num2; j++)
        {
            result *= j;
        }
    return result;

/** 定义pow函数 */
int power(int, int);//声明函数
int power(int input1, int input2)//定义函数
{
    int sum =  1;
    for(int i = 0 ; i < input2; i++)
    {
        sum *= input1;
    }
    //cout << sum << endl
    return sum;
}
/** 定义指针指向函数的封装函数 */
//下面这个是加入了指针调用函数的函数
void print_result(int (*)(int, int) ,int , int );//声明函数,形参是1、函数的指针2、两个int类型的数值
void print_result(int (*ptr_calc)(int, int),int num1, int num2)//定义封装函数
{
    int result = ptr_calc(num1,num2);//因为ptr_calc已经指向了函数,这里可以直接调用指针,传进形参进行函数的运算
    cout << result << endl;
}
//封装函数的作用其实就是下面代码的作用
//int (*ptr_power)(int, int);//声明一个函数指针
//ptr_power = power;

//2、main.cpp函数

#include <iostream>
#include <cmath>
#include "headdemo.h"//自己写的头文件要通过双引号引用
#include "constdemo.h"
using namespace std;

int main()
{
    print_result(factorial, 5, 2);//调用函数一5!*2!
    print_result(power, 2, 10);//调用函数二pow(2,10)
	
    return 0;
}

//程序输出

240
1024

Process returned 0 (0x0)   execution time : 0.032 s
Press any key to continue.
  • 最后实现指针指向函数的封装方法除了上面的函数封装的方法以外,还有autotypedef的方法,这里没有再往下深入的研究,等毕业设计做完了,再接着往下研究。
    在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值