1.函数指针
函数的指针(地址):一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。在C++中可定义一个指针变量,用它指向函数,然后通过改指针调用此函数。这种变量称为函数指针变量,简称函数指针。定义格式如下:
<数据类型> (*<函数指针名>(<参数类型表>); //注意括号的位置!区别于指针函数的定义。
注意:①“数据类型”:函数返回值类型;
②要求函数指针所指向的函数的返回值类型和<参数类型表>与函数指针一致。
③给函数指针赋值时,只需给出函数名,而不用给出参数。
④用函数指针调用函数时,有两种形式:1.(*p)(实参列表) 2.p(实参列表)。
⑤<类型参数列表>只有类型。
eg1:用函数指针作为函数的参数,实现加法和乘法的调用,函数原型为“void op(int x,int y,int (*f)(int,int));”。
#include<iostream.h>
int Add(int a,int b)
{
return a+b;
}
int Mult(int a, int b)
{
return a*b;
}
int Op(int x,int y,int(*f)(int,int))
{
return (*f)(x,y);
}
int main()
{
int a=0,b=0;
cout<<"请输入两个数:";
cin>>a>>b;
int (*p)(int, int);
p=Add;
cout<<"a+b="<<Op(a,b,Add)<<endl;
p=Mult;
cout<<"a*b="<<Op(a,b,Mult)<<endl;
return 0;
}
运行结果为:
2.指针函数
定义:返回值为指针值(地址)的函数称为指针函数。
定义形式为:<数据类型>*<函数名>(<参数类型表>)
eg2:用指针函数编写一个求字符串逆向的函数。
#include<iostream>
#include<string>
using namespace std;
char *tail(char *p,int *length)
{
while(*p!='\0')
{
++p;
++(*length);//记录字符串的长度
}
return p;//指向'\0'位置
}
int main()
{
char *s="Hello world!";
int length=0;
char *p=tail(s,&length);
for(int i=1;i<=length;i++)
cout<<*(p-i)<<" ";
cout<<endl;
return 0;
}
运行结果为:
3.总结
注意指针函数和函数指针的定义形式的区别。