第一点:函数指针分析
所谓函数指针,就是一种指向函数的指针。
其本质,还是一个指针。所以其定义方式类似于指针,但是仍旧有一些不一样。
当以方式如下:
void (*a)(int m,int n);
上述代码,意思是定义了一个函数指针,无返回值,即返回值为void,有两个形式参数,分别为int m,int n。
函数指针,只能指向与定义形式一致的函数。
例如有个函数如下:
void function1(int a1,int a2)
{
}
那么,函数指针a,就可以赋值了,如下代码所示:
a = function1;
假如有一下函数定义:
void f3()
{
}
那么,函数指针a就不可以赋值操作:a = f3;代码就是错误的。因为指针a的形式,与函数f3的形式不一致,即可以认为是数据类型不一致。
第二点:函数指针数组的定义
所谓函数指针数组,其本质,如字面意思,就是一个数组,但里边存储的确实指向函数的指针。
定义方式如下:
void (* f[3])(int a,int b);
其中,void 表示返回值的类型。f表示函数指针数组的变量名。3表示数组的大小。最后的(int a,int b),表示形式参数列表。其他类型的定义方法可以参照此格式。
示例如下:
void (* f[3])();
上述代码,定义了一个函数指针数组,大小为3,没有返回值,没有形式参数。
现定义函数原型:
void f1()
{
}
void f2()
{
}
void f3()
{
}
下面,进行函数指针数组的赋值操作:
即用函数的函数名,给函数指针赋值。其实,函数的函数名,就是该函数的入口地址。
操作的时候,就可以像正常函数一样操作。如下提示:
while(1)
注意一点,就是,操作的时候,毕竟是个函数指针,所以,有时候,很容易把()这个括号忘掉,这样的话,调用的就不是函数了。另外,还要注意不要越界。否则,容易操作内存操作错误。造成程序终止。