可以类比数组指针:int(*p)[10]
方式1:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void fun1(int a, int b)
{
printf("%d+%d", a, b);
}
void test()
{
//函数指针定义的三种方式
//1.先定义出函数类型,再通过函数类型定义指针变量
typedef void(FUNC_TYPE)(int, int);
FUNC_TYPE* func = fun1;
func(10,20);
}
int main()
{
test();
return 0;
}
方式2:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void fun1(int a, int b)
{
printf("%d+%d", a, b);
}
void test()
{
//函数指针定义的三种方式
//2.先定义出函数的指针类型,再通过类型定义函数的指针变量
typedef void(*FUNC_TYPE)(int, int);
FUNC_TYPE func = fun1;
func(20, 30);
}
int main()
{
test();
return 0;
}
方式3:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void fun1(int a, int b)
{
printf("%d+%d", a, b);
}
void test()
{
//函数指针定义的三种方式
//3.直接定义函数指针变量
void(*func)(int, int) = fun1;
func(30,40);
}
int main()
{
test();
return 0;
}
以上三种方式:第三种的使用率最高
函数指针和指针函数的区别
- 函数指针:指向函数的指针—void(*p)(int,int)=fun1;
- 指针函数:函数返回值是指针—int * fun1(int *a){return a;}
函数指针数组-----》指针数组,数组里面每个元素类型都是函数指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void fun1()
{
printf("fun1\n");
}
void fun2()
{
printf("fun2\n");
}
void fun3()
{
printf("fun3\n");
}
void test()
{
//函数指针数组
//声明一个数组,里面存放着void(*)()类型的数据
void(*arr[3])() = {fun1,fun2,fun3};
for (int i = 0; i < 3; i++)
{
arr[i]();
}
}
int main()
{
test();
return 0;
}