今天主要是复习了下之前学习的东西,加深一些新的理解,以及一些新的认识.
不过看了视频,也学到了一个比较好用的东西--指向函数的指针
首先定义一个函数
int sum(int a , int b )
{
return a+b;
}
之后在main中定义一个函数指针,最简单的方法为复制函数的声明.然后把函数名换为*指针名,并且只保留数据类型不用变量.
定义如下.
int (*p)(int , int );
需要注意的是*p必须到括号的.
之后还需要把指针指向函数,实际上就等于指针名指向函数名.
p = sum;
之后调用这个指向指针的函数.
我直接输出
( *p)(5,6)
同下面效果一样.
printf("%d",p(5,6));
结果为11.
可是如果这样写不是反正不省事,更加复杂了吗?
指针函数到底有什么作用呢?
如果我们要计算的不仅仅是加法运算呢?
可不可以输入两个数,然后再输入一个运算类型来返回结果呢?
上面刚说过*p可以指向函数.那么我们可以用指针来指向函数来引用啊.
我们知道函数不仅可以传变量,常量,表达式外,指针也可以,就上道题而言,如果我们用传指针来计算呢?
那么我们再写一个函数 calculate
int calculate(int a, int b , int (*p)(int, int))
{
return p(a,b);
}
calculate函数是用来对a和b进行计算的,至于做什么运算.取决与p.
之后在输出看看
printf("%d",calculate(5, 6, sum));
结果也是11.
那么这里函数指针的作用就出来了.
我们要写其他运算的话,只需要在写几个方法就好了
int sum(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 divi(int a, int b)
{
return a/b;
}
int ram(int a, int b)
{
return a%b;
}
这样我们调用的时候,只需要在calculate里面改变指针p所指向的函数就可以进行不同的运算,
其实calculate里面的
int (*p)(int a, int b)
就等同于 p = sum or p = ram..... 等等.