【电子资讯】函数指针变量
在c语言中,一个函数总是占用一段连续的内存区.而函数名就是该函数所占内存区的首地址。函数在编译时分配一个人口,地址(函数首地址),这个人口地址赋予一个指针变量,使该指针变量指向改函数,然后通过指针变量就可以调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
类型说明符 (*指针变量名)();
其中,“类型说明符”表示被指函数的返回值的类型。“(*指针变量名)”表示定义的指针变量名。
最后的空括号表示该指针是一个指向函数的指针。例如:int(*pointer)();
表示pointer是一个指向返回值为int类型的函数的指针变量。
下面用实例来说明指向函数指针的用法.程序清单如下:
#include
#include
#include
void init_devices(void) ,//设备初始化
{
CLI();
XDIV =Ox00:
xmcra=Ox00:
MCUCR=Ox00:
EIlsk=Ox00;
TIMSK=Ox00;
SEI();
)
int max(int a,int b)
{
if(a>b)return a:
else return b;
)
void mein()
{
init—devices();
int max(int a,int b);
int(*pointer)();
int x=5,y=6,z;
pointer=max;
z=(*pointer)(x,y);
printf(”max=%d”,z);
}
这个买例中首先定义一个指向函数的指针pointer,然后把max函数的入口地址赋给指针pointer,即pointer=max。用函数指针变量形式调用函数.即“z一(*pointer)(x.y):”。调用函数的一般形式为:
(*指针变量名)(实参表)
使用函数指针变量还应注意:函数指针变量不能进行算术运算.即不能移动函数指针变量.这与数组指针变量是不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,丽函数指针的移动是毫无意义的,移动函数指针将出现不可预料的错误。
要注意区分“int(*p)();’’和“int*p();",其中,“int(*p)();”是一个变量声明.是指声明一个指向返回值为int类型变量的函数的指针变量;而“int*p();”是指一个函数,函数返回值是指向int类型的指针。
相关推荐