C++指针详解请参考:C++指针详细讲解
目录
一、为何存在函数指针
与数据项相似的是函数也有地址,一般情况下对用户来说没什么用,但是对于程序来说,用处比较大,例如:将另一个函数的地址作为一个函数的参数,这样第一个函数就能找到第二个函数并且运行它。虽然这种方式比起直接调用的方式比更加的笨拙,但是其允许在不同的时间传递不同函数的地址,这意味着可以在不同的时间使用不同的函数。
二、函数地址
函数名就是函数的地址,例如:函数get_sum(),该函数的地址是get_sum而不是get_sum(),get_sum()为函数的返回值。
三、声明函数指针
函数指针的声明:表明指定的函数返回类型、表明函数的特征标(参数列表)
注意:只有当一个函数的返回类型和参数列表和声明的函数指针的返回类型和参数列表一致的时候才可以进行传递,编译器拒绝这种赋值。
int get_sum(int a, int b);
int (*ptr)(int, int); // 声明函数指针ptr
四、使用指针来调用函数
// 第一种方式
(*ptr)(4, 5);
// 第二种方式C++可用
ptr(4, 5);
五、使用typedef进行简化
例如:typedef double real; 则表示real是double的一个别名也就是说real就相当于double。
#include<iostream>
#include<cstdio>
using namespace std;
int get_sum(int a, int b)
{
return a+b;
}
int get_mul(int a, int b)
{
return a*b;
}
int main()
{
typedef int (*ptr)(int, int);
ptr p1 = get_sum;
cout<< p1(4, 5)<< endl;
p1 = get_mul;
cout<< p1(4, 5)<< endl;
return 0;
}
附录
/*
code_1
定义一个函数指针,然后调用,输出结果
*/
#include<iostream>
#include<cstdio>
using namespace std;
int get_sum(int a, int b)
{
return a+b;
}
int get_mul(int a, int b)
{
return a*b;
}
int main()
{
int (*ptr)(int, int);
ptr = get_sum;
cout<< ptr(4, 5)<< endl;
ptr = get_mul;
cout<< ptr(4, 5)<< endl;
return 0;
}
/*
code_2
将函数指针作为一个函数的形参然后输出,并且说明两种输出方式表达的结果一致
*/
#include<iostream>
#include<cstdio>
using namespace std;
int get_sum(int a, int b)
{
return a+b;
}
int get_mul(int a, int b)
{
return a*b;
}
void show_result(int a, int b, int (*ptr)(int,
int))
{
cout<< ptr(a, b)<< endl;
cout<< (*ptr)(a, b)<< endl;
}
int main()
{
show_result(4, 5, get_sum);
show_result(4, 5, get_mul);
return 0;
}