函数指针
在之前的博客中,我介绍了数组指针,它的定义是指向数组的指针
类似地:
函数指针是指向函数的指针
函数指针的声明
首先,看一段代码
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int arr[10] = { 0 };
printf("%p\n", &add);
printf("%p\n", add);
}
运行结果如下
由此可知,&函数名 和函数名都表示函数的地址
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int arr[10] = { 0 };
int (*pa)[10]=&arr;
int (*pf)(int,int)=&add;//pf是函数指针变量
return 0;
}
该段代码声明了pf函数指针变量指向的是int类型的函数add
(int (*)(int,int)是函数类型)
我们再举一例子,熟练一下函数指针的声明
#include <stdio.h>
void test(char* pc, int arr[10])
{
}
int main()
{
void (*pf)(char*,int [10]) = &test;
return 0;
}
在该代码中,我们声明了一个函数指针pf,它指向的是void类型的函数test,它有两个参数,第一个为char*和int [10]
调用函数指针
了解了如何声明一个函数指针之后,下面来看看如何运用函数指针
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int (*pf)(int, int) = &add;//定义了一个函数指针pf指向add函数
int r = add(3, 5);
printf("%d\n", r);
int m = (*pf)(4, 5);//利用函数指针pf调用add函数
printf("%d\n", m);
}
下面是上述代码的运行结果,成功调用了函数,实现了两个整形的加和
那么函数指针能不能存放在数组中呢?下篇博客更精彩!