C语言之函数指针以及应用实例

函数指针的定义

一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,与数组名类似。

我们可以将这个函数的首地址赋值给一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。

函数指针的定义形式
// returnType:函数返回值类型
// pointerName:指针名称
// param list:函数的参数列表。参数可以同时指定类型和名称,也可以只指定类型,省略名称。跟函数声明类似
returnType(*pointerName)(param list);

函数指针的基本使用

// 定义基本函数
void message() {}
// 定义函数指针并初始化
void(*func_p)() = &message;
// 调用函数指针,与message()调用等价
func_p(); 
函数指针的应用实例

实例1:将函数指针作为形参来接受外部函数

#include <stdio.h>

int add(int num1, int num2) {
	return num1 + num2;
}

int minus(int num1, int num2) {
	return num1 - num2;
}

// 将函数指针直接定义到函数形参中,类似java中的多态
// 可以将函数指针作为函数参数传入
void showMsg(int(*c)(int, int), int a, int b) {
	int r = c(a, b);
	printf("calculate result: %d\n", r);
}

int main() {
	showMsg(add, 10, 10); // 20
	showMsg(minus, 30, 2); // 28

    return 0;
}

实例2:利用函数指针实现回调函数

#include <stdio.h>

//模拟网络请求回调
void requestNet(char *url, void(*callBack)(char *)) {
	printf("request url: %s, request...\n", url);
	//模拟网络请求耗时
	char *str = "response data: hello world!";
	callBack(str);
}

//回调函数
void netCallBack(char *str) {
	printf("net request callBack\n");
	printf("callBack data: %s\n", str);
}

int main(void) {
	char *url = "www.baidu.com";
	requestNet(url, netCallBack);

    return 0;
}

// 打印结果:
// request url: www.baidu.com, request...
// net request callBack
// callBack data: response data: hello world!
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值