深入理解C语言指针——挑战C指针笔试题(6)

105 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

指向函数指针数组的指针

看到这个指针是不是感觉头都大了,没事我们慢慢分析!

int* arr[3]; //整型指针数组
int*(*parr)[3]=&arr; //整型指针数组的地址放入parr
//parr就是指向整型指针数组的指针
//而我们只需要将整型指针换成函数指针就ok了
int(*pf)(int,int);//函数指针
int(*pfarr[3])(int,int);//函数指针数组
int(*(*ppfarr)[3])(int,int)=&pfarr; //&pfarr
//ppfarr是指针,指针指向一个数组,数组的类型为函数指针
//元素个数为3,函数的返回值为int,参数为int

博主就不带大家套娃了,就学到这里了!

回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

刚刚的计算器优化后就是回调函数,依赖于函数指针。 我们把加减乘除函数的函数指针,传参的形式,传给另一方调用,回调该加减乘除的函数,所以为回调函数!

qsort函数的使用:

在这里插入图片描述 这是MSDN中对qsort函数的解释! 我给大家介绍一下! qsort 作用

Performs a quick sort.

qsort是快速排序函数库<stdlib.h> and <search.h>中,我们可以通过qsort函数实现任意类型数据的排序! 函数声明

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

返回值

void

参数

void *base 待排序的内容的首地址 size_t num 待排序元素的个数 size_t width 待排序元素的大小 int (__cdecl *compare )(const void *elem1, const void *elem2 ) 自己定义一个排序的方式,例如一个结构体数组,结构体元素,按照结构体里的什么类型的数据的类型排序,所以需要自己定义一个campare排序方式! 然后将函数指针传参到qsot中!

//qsort函数使用实例
#include<stdio.h>
struct peo 
{
	 char name[10];
	 char numb[12];

};
//自己定义一个排序的方式
int compare_char(const void* e1, const void* e2)
{
	return strcmp(((struct peo*)e1)->numb, ((struct peo*)e2)->numb); 
	//按照peo中numb排序
}

int main()
{
	//创建一个结构体数组
	struct peo peo1[3] = { {"张三","15779770910"},{"李四","17370126640"},{"王五","12669781134"} };
	int sz = sizeof(peo1) / sizeof(peo1[1]);
	qsort(peo1, sz, sizeof(peo1[1]), compare_char);
	for (int i = 0; i < sz; i++)
	{
		printf("%s\t%s\n",peo1[i].name,peo1[i].numb);
	}
	return 0;
}

在这里插入图片描述看完qsort函数使用演示,是不是学会了。