本文重点

  • 5.函数指针
  • 6.函数指针数组
  • 7.指向函数指针数组的指针

反爬链接 本文将继续介绍有关函数指针的相关内容。

正文开始@边通书

5.函数指针

函数指针,顾名思义是存放函数地址的指针。

在大型工程里,函数指针应用还是挺普遍的。

首先看:

【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_c语言


【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_回调函数_02

阅读下面两段有趣的代码(出自《C语言陷阱与缺陷》)

看看他们是什么意思?

//代码1 
(*(void (*)())0)();
//代码2
void (*signal(int , void(*)(int)))(int);

【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_c语言_03


【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_c语言_04

6.函数指针数组

函数指针数组,即存放函数指针的数组

上代码感受一下:

【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_函数指针_05


那如何应用呢?

现在我们来实现一个计算器功能:

【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_c语言_06


函数指针数组的应用:

【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_函数指针数组_07


小注意:下篇文章将继续对此段代码进行改造(回调函数)。

再附上源代码:

#include<stdio.h>

int Add(int x, int y)
{
	return x + y;
}

int Sub(int x, int y)
{
	return  x - y;
}

int Mul(int x, int y)
{
	return x*y;
}

int Div(int x, int y)
{
	return x / y;
}

void menu()
{
	printf("**************************\n");
	printf("***** 1.Add    2.Sub *****\n");
	printf("***** 3.Mui    4.Div *****\n");
	printf("*****     0.exit     *****\n");
	printf("**************************\n");
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:>\n");
		scanf("%d", &input);
		int x = 0;
		int y = 0;
		int ret = 0;
		int(*pfArr[5])(int, int) = { 0, Add, Sub, Mul, Div };
		//                           0   1    2   3    4
		if (input == 0)
		{
			printf("退出计算器\n");
		}
		else if (input >= 1 && input <= 4)
		{
			printf("请输入两个操作数:>\n");
			scanf("%d %d", &x, &y);
			ret = pfArr[input](x, y);
			printf("%d\n", ret);
		}
		else
		{
			printf("输入错误,请重新输入\n");
		}
	} while (input);
	return 0;
}

7.指向函数指针数组的指针

【C】指针语法中篇@指针进阶 —— 函数指针 | 函数指针数组 | 指向函数指针数组的指针_函数指针数组_08


未完待续

三文读透指针语法【下篇】,将介绍回调函数及,使用回调函数实现,用冒泡排序模拟实现qsort