5、函数指针
函数指针与数组指针:
数组指针 -> 指向数组的指针就是数组指针
函数指针 -> 指向函数的指针就是函数指针
首先看一段代码:
#include <stdio.h>
void test()
{
printf("hehe\n");
}
int main()
{
printf("%p\n", test);
printf("%p\n", &test);
return 0;
}
输出的结果:
输出的是两个地址,这两个地址是test
函数的地址。
那我们的函数的地址要想保存起来,怎么保存?
我们看代码:
void test()
{
printf("hehe\n");
}
//下面pfun1和pfun2哪个有能力存放test函数的地址?
void (*pfun1)();
void* pfun2();
首先,能存储地址,就要求是指针,pfun1和pfun2哪个是指针?
答案是:
pfun1可以存放。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。
举一个例子:
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int (*pf)(int, int) = &Add;//函数指针两种写法均可
int (*pf)(int, int) = Add;
int ret = pf(2, 3);//两种写法均可,若加*号,必须写在()内
int ret = (*pf)(2, 3);
return 0;
}