
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
int func(int x); / 声明一个函数 /
int (f) (int x); / 声明一个函数指针 /
f=func; / 将func函数的首地址赋给指针f /
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
注2:函数括号中的形参可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
例一、
#include<stdioh>
int max(int x,int y){ return(x>yx:y); }
void main()
{
int (ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
其定义格式如下所示:
返回类型标识符返回名称(形式参数表)
{ 函数体}
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
其实还是指针,只是指向的内容和声明方法不同而已
#include <iostream>
using namespace std;
int Max(int x,int y){return x>yx:y;}
double Max(double x,double y){return x>yx:y;}
int(p)(int,int)=Max;
double(q)(double,double)=Max;
int main()
{
p(3,4);
cout<<(void)p<<endl<<(void)q<<endl;;
system("pause");
return 0;
}
int sum (int a, int b)
{
return a+b ;
}
main()
{
int (p)( );
p=sum;
printf("0x%x\n0x%X",p,sum);
}
p的值就是函数入口的地址;
以上就是关于C语言中的函数指针全部的内容,包括:C语言中的函数指针、如何获取 C++重载函数 指针 或 地址、获得一个函数指针自身的地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)