函数指针

本文深入解析了函数指针的基本概念,包括其定义、赋值与调用方式,并详细介绍了如何使用函数指针与C语言的qsort库函数进行数组排序。通过实例展示了比较函数的编写规则及其在快速排序中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

引用北大版ppt
 程序运行期间,每个函数都会占用一
段连续的内存空间。而函数名就是该函数所
占内存区域的起始地址(也称“入口地址”)。
我们可以将函数的入口地址赋给一个指针变
量,使该指针变量指向该函数。然后通过指
针变量就可以调用这个函数。这种指向函数
的指针变量称为“函数指针”。

定义形式

一般语法

数据类型(* 指针变量名)(形参表)
如:

int (*pf)(int ,char);

重复定义

由于对函数指针的定义在形式上比较复杂,如果在程序中出现多个这样的定义,多次重复会比较繁琐,可以使用typedef解决。
如:

typedef int (* DIFunction)(double);
DIFunction funcptr;

赋值与调用

函数指针在使用之前也要进行赋值,是指针指向一个已经存在的函数代码的起始地址,一般语法为:
            函数指针名=函数名
 此函数名必须是一个已经声明过、和指针函数具有相同返回值类型和相同形参表的函数。
 赋值后可以通过函数指针名来直接引用这个函数指针指向的函数。
 例:通过输入Max,输出4与5中较大的值,输入其他字符串输出较小的值。
在这里插入图片描述

函数指针与qsort库函数

C语言快速排序库函数:
void qsort(void *base, int nelem, unsigned int width,
int ( * pfCompare)( const void *, const void *));

base: 待排序数组的起始地址,
nelem: 待排序数组的元素个数,
width: 待排序数组的每个元素的大小(以字节为单位 )
pfCompare :比较函数的地址

pfCompare: 函数指针,它指向一个“比较函数”。
该比较函数应为以下形式:
int 函数名(const void * elem1, const void * elem2);

比较函数编写规则:
(1) 如果 * elem1应该排在 * elem2前面,则函数返回值是负整数
(2) 如果 * elem1和* elem2哪个排在前面都行,那么函数返回0
(3) 如果 * elem1应该排在 * elem2后面,则函数返回值是正整数

如图所示,实现8,123,11,10,4通过比较个位数大小实现的数组排序。(由小到大)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值