函数指针
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。
1. 函数指针定义
函数类型 (*指针变量名) (形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定义函数指针时请注意:
- 函数指针和它指向的函数的参数个数和类型都应该是—致的;
- 函数指针的类型和函数的返回值类型也必须是一致的。
2. 函数指针的赋值
函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。
例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
3. 通过函数指针调用函数
函数指针是通过函数名及有关参数进行调用的。
与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。
由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:
- 说明函数指针变量。 int (*f)(int x);
- 对函数指针变量赋值。 f=func;
- 调用函数。 (*f)(x);
4. 使用typedef使得函数指针更直观更方便
typedef 返回类型(*新类型)(参数表)
例如:
typedef char(*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a) {return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。第二行的代码便使用这个新类型定义了变量pFun,此时就可以使用这个变量了。
指针函数
一个函数不仅可以带回一个整型数据的值,还可以返回指针类型的数据,使其指向某个地址单元。指针函数就是返回指针的函数。
返回指针的函数,一般定义格式为:
类型标识符 *函数名(参数表)
例如:
int *f(x, y);
其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其返回值是指针。
总结:
函数指针是一个指向函数的指针,而指针函数只是说明它是一个返回值为指针的函数。
分享到:
相关推荐
本文叙述了函数指针和指针函数的区别,防止程序员混淆两者。
详解函数指针和指针函数 函数类型 (*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的...
函数指针和指针函数的区别,以及const的用法,指针常量,常量指针的用法
我知道函数指针是指向函数的指针,指针函数还是指一个函数的返回值是一个指针,但下面 的几道题还是感觉很迷惑。各位能否讲的详细点呢? (1)float(**def)[10] def是什么? (2)double*(*gh)[10] gh是什么? (3)double...
c语言函数指针和指针函数.pdf
函数指针和指针函数的说明 函数指针和指针函数的说明
学习c语言函数指针和指针函数.pdf
函数指针和指针函数[借鉴].pdf
函数指针和指针函数区别[参考].pdf
c语言函数指针和指针函数[收集].pdf
C语言再学习之函数指针和指针函数.pdf
学习C语言再学习之函数指针和指针函数.pdf
C语言再学习之函数指针和指针函数[文].pdf
指针函数和函数指针变量指针 函数和函数指针变量
彻底理解指针,指针数组和数组指针,指针函数和函数指针.doc
C语言指针函数和函数指针详细介绍.
声明格式:类型说明符(*函数名)(形参)函数赋值:(即函数指针需要把个函数的地址赋值给它)函数指针的调:(以下两种都可以,但都必须包含个圆括号括起来的参数列表)
C++中一般函数指针和类的成员函数指针的区别