在通过学习之后,我对函数指针,函数指针数组,指向函数指针数组的指针进行自己的总结和理解
首先,函数指针,我们需要首先理解它的地址
void test()
{
printf("hehe\n");
}
int main()
{ printf("%p\n", test);
printf("%p\n", &test);
return 0; }
由这个可以知道,取地址函数名&test,和函数名本身test所代表的地址是同一个地址,这个和数组是不同的,取地址数组名&arr,和arr本身是不一样的,&arr是整个数组,但是arr代表的是数组的第一个元素。
那么,我们知道函数的地址之后,我们应该怎么利用这个函数的地址?
我们知道,指向一个地址的是指针,所以我们需要先确定,它是一个指针,接着在它才是一个函数。
int test(int x,int y)
{
return x+y;
}
这个函数,我们指向它,应该是这样
int (*pf)(int,int)=test;
接下来是函数指针数组的理解和使用
函数指针数组,顾名思义,就是这个数组中的每个元素都是一个函数指针
int (*p[10])() = {};
如何理解呢?首先p和[10]结合,形成一个数组,接着int (*)()表面函数指针的类型,类似的有char(*)(),void(*)(),....
这几个函数,我们可以利用函数指针来指向他们,
我们也可以利用函数指针数组,对他们全部进行指向;
接下来是指向函数指针数组的指针
我们先进行分析,它是一个指针,指向的内容是函数指针数组,一个指针可以指向数组,所以函数指针数组也是可以被指针指向的,
我们先创建一个函数指针数组
int (*pf[10])(int,int) = {};
接下来写出一个指向函数指针数组的指针
int (* (*p) [10])(int,int) = &pf;
如何理解?(*pf)结合,形成一个指针,而其他就相当于类型而已。
所以我们就得到了p,就是一个指向函数指针数组的指针