一.前言
最近学了一点函数指针的东西 感觉还是比较有意思的 在某先方面用起来也确实会方便些 给大家在这里分享一下。
二.定义
函数指针就是指向代码段中函数入口地址的指针。 从上述这句话就可以看出 函数指针的本质是一个指针,只不过是指向函数的指针。
三.声明形式
类型说明符 (*函数名) (参数):
int (*p)(int x,int y);
这个的意思就是函数指针p的类型返回值是int 类型,参数列表为x和y且都为int型。 这个p被称为函数指针变量。
四.函数p获取地址
函数指针需要把一个函数的地址赋值给它,一般有两种写法:
p = &Function;
p = Function;
注意:取地址运算符&不是必需的。 因为C标准规定:函数名可以是其开始地址。
五.函数指针的初始化
在数组中,数组名即代表着该数组的首地址,函数也是类似这样的,函数名是该数组的入口地址,因此,函数名就是该函数的函数指针。
(编译器在编译期间对函数开辟了一块空间 而这块空间的开始地址就是他的指针)
函数指针变量=函数名;
六.调用函数指针的方式
调用的时候,既可以直接使用函数指针调用,也可以通过函数指针所指向的值去调用。
x = (*p)(形参);
x = p (形参);
七.应用
函数指针的应用这里举一个计算器的例子:写一个程序完成计算器的简单加减乘除。
代码如下:
#include<stdio.h>
#include<math.h>
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
int Div(int a, int b)
{
if (b == 0)
{
return -1;
}
return a / b;
}
int Computer(int a, int b, int(*p)(int, int))
{
return p(a, b);
}
int main()
{
printf("a+b=%d\n", Computer(10, 20, Add));
printf("a-b=%d\n", Computer(10, 20, Sub));
printf("a*b=%d\n", Computer(10, 20, Mul));
printf("a/b=%d\n", Computer(10, 20, Div));
运行结果:
八.学习感受
对于函数指针这块,初学的我第一时间接受这个知识点的时候感觉有点鸡肋:本来简单的函数调用为什么要变为函数指针,这样不是更麻烦么;实则不是,当我们的项目较大时就会知道函数指针很好用可以实现面向对象编程中的多态性和回调函数。
(本文是关于函数指针的一点浅显认识 因为是初学可能会有一些错误 欢迎大佬指针)
|