C++ 函数指针

来源:互联网 发布:淘宝网户外 编辑:程序博客网 时间:2024/04/30 03:49

函数指针:

      在程序运行中.函数代码是程序的算法指令部分,他们和数组一样也需要占用存储空间,都有相应的地址.可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针

1:函数指针定义

函数类型 (*指针变量名)(形参列表);

函数类型-------函数的返回类型,由于"()"的优先级高于"*"所以指针变量名外的括号必不可少,后面的"形参列表"表示指针变量指向的函数所带的参数列表

int (*f)(int x);

double (*ptr)(double x);

在定义函数指针时候要注意:

      a:函数指针和它所指向的函数的参数个数和类型都应该是一致的

      b:函数指针的类型和函数的返回值类型也是必须一致的

2:函数指针的赋值

      函数名和数组名一样代表了函数代码的首地址,因为在赋值时,直接将函数指针指向函数名就可以了;

例如: int func(int x);/*声明一个函数*/

        int (*f)(int x);/*声明一个函数指针*/

        f=func;/*将func函数的首地址赋给指针f*/

       赋值时候函数func不带括号,也不呆参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(X)的代码的首地址

3:通过函数指针调用函数

      函数指针是通过函数名和有关参数进行调用的

和其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于他所指向的变量i;

如果pf是指向浮点型变量f的指针,则*pf就等价于它所指向的变量f.同样的 *f是指向函数func(x)的指针,则*f就代表它所指向的函数func.所以在执行了f=func;以后(*f)和func代表同一个函数.

     由于函数指针指向了存储区域的某个函数,因此可以通过函数指针调用响应的函数.用函数指针调用函数它应该执行下面三步:

      1:要说明函数指针变量.int (*f)(int x);

      2:要对函数指针变量赋值 f=func;func(x)必须要先有定义

      3:要用(*指针变量)(参数表);调用函数 (*f)(x);(x必须先赋值)

例:

#include<iostream>
using namespace std;

 


int pos(int x)
{
 return(5*x);
}
void main()
{
 int i;
 int (*pf)(int);
 pf=pos;
 i=(*pf)(20);
 cout<<i<<endl
}

 

例子:

 

#include<iostream>
using namespace std;

 

functest(int x,int y)

    int z;
    z=(x>y)?x:y;
    return(z); 
}

void main()


 int a,b;
 
 int (*p)(int,int);    /* 定义函数指针 */
 
 p=functest;            /* 给函数指针p赋值,使它指向函数f */
 
 for(int i=1;i<9;i++)
 {
  cin>>b;
  
  a=(*p)(a,b);    /* 通过指针p调用函数f */
  
 }
 
 cout<<"The Max Number is:"<<a<<endl;
}

 

 

 理解的函数指针就是一个指向函数首地址的指针 和指向内存的数组字符是一样的,就是需要理解清楚地是 我们一般认为的函数名就是一个地址,这个地址是可以直接的赋值给指针的,因为指针就是保存地址的地方,这样就理解了

原创粉丝点击