- 函数也有地址,函数的地址时存储机器语言代码的内存开始地址
- 好处:可以在不同的时间使用不同的函数
函数的指针声明
注意:
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.
- 最后实现指针指向函数的封装方法除了上面的函数封装的方法以外,还有
auto
和typedef
的方法,这里没有再往下深入的研究,等毕业设计做完了,再接着往下研究。