C++从入门到放弃之 函数指针

来源:互联网 发布:去除淘宝店铺模块缝隙 编辑:程序博客网 时间:2024/05/22 02:06

函数指针


指针是一个变量,是用来指向内存地址的。


函数是存放在内存代码区域内的,它们也有相应的地址,因此可以用指针来存取函数,这种指向函数入口地址的指针称为函数指针。


有了函数指针我们就可以很轻易的代替函数完成函数调用。


简单的写个小例子吧

--------------------------------------------------------------------

#include "stdafx.h"

#include<iostream>

using namespace std;


int  myfun(int a, int b) {

return a + b;

}

int main()

{

int (*fp)(int, int);    //定义函数指针,也可以用int (*fp)(int a,int b);

int s;

fp = myfun;         //将函数myfun地址赋给fp,也可以用fp=&myfun;

s=(*fp)(3, 4);       //通过指针调用函数,也可以用fp(3,4);

        cout << s<<endl;     //运行结果s=7;

        return 0;

}

--------------------------------------------------------------------


myfun与fp的类型关系类似于int 与int *的关系。

函数myfun好像是一个如int的变量(或常量),而fp则像一个如int *一样的指针变量。

int i,*pi;
pi=&i;    //与fp=&myfun比较


这也让我们联想到了指针与数组的关系。

其实数组名就是指针

例如  int *p;  

         int a[5];

         p=a; 

这就将数组中的第一个元素的地址赋给了指针p;


myfun的函数名与fp函数指针都是一样的,即都是函数指针。myfun函数名是一个函数指针常量,而fp是一个函数指针变量,这是它们的关系。


那 函数我们直接拿来调用不就好,为什么还要函数指针,其实指针就是一个工具,打个比方来说吧:你有了一只手,可以用来装备并切换武器打怪,比如可以装备刀子,或者装备棍子。当你的武器只有一种或者比较少的时候,可能这只手切换武器的功能不常用到。当到了后期,你的武器多了,那你因为有了这只能装备并切换武器的手,而可以更有效率的打怪。是不是美滋滋!!!

阅读全文
0 0
原创粉丝点击