目录
一、函数指针
0X01 函数指针概念
函数中指针:指向函数的指针,存放函数地址的指针
函数的地址是什么呢?
0X02 函数指针的定义方式
上代码:
int Add(int x,int y)
{}
int main()
{
printf("%p\n", Add);
printf("%p", &Add);
int (*pf)(int, int) = &Add;
return 0;
}
0X03 函数指针的使用
上代码:
分析下列代码:
代码一:
(*(void (*)()0))();
代码二:
void (*signal(int, void(*)(int)))(int);
二、函数指针数组
0X01函数指针数组的概念
如果要把函数的地址存放到一个数组中,那这个数组就叫做函数指针数组。
0X02函数指针数组的定义
0X03函数指针数组的使用
实现一个计算器,可以进行简单的加减乘除运算。
使用函数指针数组改进代码;
#include <stdio.h>
void menu()
{
printf("*************************\n");
printf(" 1:add 2:sub \n");
printf(" 3:mul 4:div \n");
printf("**** 0: exit ****\n");
printf("*************************\n");
}
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
int (*pf[5])(int, int) = { NULL,add,sub,mul,div };
do
{
menu();
printf("请选择:");
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器");
}
else if (input >= 1 && input <= 4)
{
printf("请输入两个操作数");
scanf("%d %d", &x, &y);
ret = pf[input](x,y);
printf("ret = %d\n", ret);
}
else
{
printf("选择错误,从新选择");
}
} while (input);
return 0;
三、指向函数指针数组的指针
0X01 函数指针数组指针的定义
定义:指向函数指针数组的指针,指针指向一个数组,数组的元素是函数指针
0X02 函数指针数组指针的使用
上代码:
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int (*pf[4])(int, int) = {add,sub,mul,div};
int (*(*pff)[4])(int, int) = &pf;//是整个数组的地址
int i = 0;
for (i = 0; i < 4; i++)
{
int ret = (*pff)[i](4, 2);
//int ret = pff[0][i](4, 2);//也可以
printf("%d\n", ret);
}
return 0;
}