OK,书接上回,咱们继续:
一 . 函数指针变量
(1)函数指针变量的创建
首先我们得明白,什么是函数指针变量呢?从我们之前学习过的整型指针,数组指针的相关知识当中,通过类比推理,我们不难得出:函数指针变量就是用来存放函数地址的,而未来当我们需要时,就可以通过存放的这个地址我们就可以调用该函数
那么函数的地址是什么呢?我们多说无益,直接实践得出结论:
由此可见,我们的函数是的的确确有地址的,并且其性质可以说跟我们的数组一样,函数的地址也就等同于函数名
既然函数也有地址,那我们怎样将它的地址存起来呢?当然是指针咯,这就是我们函数指针变量的意义,函数指针变量的写法跟数组指针非常类似,格式如下:
(2)函数指针变量的使用
我们明白了函数指针变量是用来存放函数地址的,那么函数指针的使用就很明了了嘛,就是通过函数指针调用指针指向的函数:
二 . typedef 关键字
typedef 是用来对类型重命名的,诸君可以想一想,我们什么时候需要对类型进行重命名呢?当我们的一个函数指针类型非常冗长、复杂,且我们还需要反复调用时,我们是不是就可以对这个函数指针类型进行一个重命名,将其简化呢?这就是 typedef 的作用及意义,格式如下:
上图是普通类型的重命名,指针类型同样适用:
那我们对于数组指针类型的重命名呢?
有图可知,我们经过上面的几个例子,习惯性的将新类型名放在最后,其实我们仔细观察可以发现,新名字应该是紧接着 * 后面的,VS 也报错并给我们提示了,正确格式是:
三 . 函数指针数组
之前我们了解过指针数组,例如:
那么函数指针数组又是什么呢?就是把函数的地址储存到这个数组当中,其格式如下:
四 . 转移表
我们这里先写一个一般情况下实现加、减、乘、除的计算器:
这样子简单,但是很低端,不够高级昂,太繁琐,我们的 case 语句所占篇幅太多且重复,那我们怎么办呢?相信聪明的诸君已经想到了解决方案,学以致用昂,运用我们刚刚学习到的函数指针数组,将每个分支的函数以数组的形式放在我们的一个指针当中,需要调用的时候就通过地址直接调用:
这就是我们函数指针数组的灵活运用,诸君看懂了么?
OKK,今天有关指针的部分咱们就说到这儿,欲知后事如何,且听下回分解,咱们下期再见咯,加油加油,与诸君共勉!!!