您的位置:首页 > 编程语言 > C语言/C++

【C/C++】函数指针

2016-06-03 14:10 218 查看
首先必须要清楚如下:

【1】函数指针即函数的地址,也就是存储其机器语言代码的首地址。该地址用函数名表示。

【2】用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数参数表的个数及对应数据类型)相同

然后,相关语法如下:

(1)函数指针变量pf的声明格式:返回类型 (*pf)(形参表);

(2)函数指针赋值格式:pf=函数名;//赋值运算符两边的指针和函数应满足【2】

(3)通过函数指针调用其指向的函数的格式:pf(实参表);

[NOTE]:关于(3)的调用格式语法也可写成:(*pf)(实参表);//虽然与(3)的写法在逻辑上似乎是矛盾的,但是C++是允许的。就像《C++ Primer Plus》里

                           //讲这个矛盾时的一句话说的:容忍逻辑上无法自圆其说的观点正是人类思维的特点。

                           //我个人比较喜欢用(3)的写法,因为这样用与“函数名本身表示函数的地址”这一点是对应的。

如:

int max(int*,int);

int (*pf)(int*,int);

pf=max;

max(arr,10);//用函数名调用函数

pf(arr,10);//用函数指针调用函数

//[NOTE] arr是int数组名。

完整示例函数:

#include<iostream>
using namespace std;

int main()
{
int max(int*,int);
int min(int*,int);
void callfun(int (*pf)(int*,int),int*);//函数指针作为函数形参
int p[10]={1,2,1,0,8,5,3,4};
int (*pf)(int*,int);//声明函数指针
pf=max;
cout<<"max: "<<pf(p,10)<<endl;//通过函数指针pf调用函数max
pf=min;
cout<<"min: "<<pf(p,10)<<endl;

callfun(max,p);//函数名max为实参
callfun(min,p);

return 0;
}
//---------------------
void callfun(int (*pf)(int*,int),int *p)
{
cout<<pf(p,10)<<endl;
}
int max(int *pa,int n)
{
int m;
m=pa[0];
for(int i=0;i<n;i++)
if(pa[i]>m)
m=pa[i];
return m;
}

int min(int *pa,int n)
{
int m;
m=pa[0];
for(int i=0;i<n;i++)
if(pa[i]<m)
m=pa[i];
return m;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: