C语言函数指针和指针函数的定义和调用

函数指针和指针函数的定义和调用

确实第一次听到函数指针和指针函数的时候感觉特别的绕。而且昨天要写函数指针的时候一下子想不起来,自己写篇文章和大家分享一下也让我增加印象。

指针函数

指针是函数的返回类型
int*  Fun(void);
int*是一个int类型的指针,作为函数的返回值
声明格式:类型说明符* 函数名(参数)
int* Fun1(int data1);
返回值类型一定要是个指针

函数指针

是代表函数入口地址的变量
函数本体: int Fun(int);
函数指针  in (*p)(int) = Fun;
声明格式:类型说明符 (*函数名) (参数)
int (*Fun1)(int);

注意:类型说明符和参数的类型数量是根据你要保存的函数的格式一样的

p保存了Fun函数的入口地址
函数调用上
int a = 5;
p(5)等价于Fun(5)

我先将函数Fun1的地址存入函数指针p中
然后分别调用Fun和p进行输出,结果下图这样。
大家可以去试试。代码我贴在下面
函数指针的调用

#include <iostream>
#include <Windows.h>

int Fun1(int data1) {
	static int i;
	i++;
	printf("第%d次:data1 = %d\n", i,data1);
	return data1;
}

void Fun_ALL(int (*p)(int), int a) {
	p(a);
}

int main() {
	int(*p)(int) = Fun1;
	Fun_ALL(Fun1, 3);
	Fun_ALL(p, 5);
	system("pause");
	return 0;
}

用途:
有人会问函数指针还要多开一个变量,还要去保存,写成这样干啥哦,浪费空间和时间,其实不然,函数指针在某一个函数中需要调用同类型的函数时很有用的,你只需要把你自己的函数名称传入即可,不然的话就是要做标志位参数去判断了,这样不仅更浪费空间而且代码会变得很冗余的。
抛砖引玉一下:
先上运行结果在这里插入图片描述

基础运算代码(就是简单的加减乘除)

//加法
int sum(int data1, int data2) {
	printf("sum: %d + %d = %d\n", data1, data2, data1 + data2);
	return data1 + data2;
}
//减法
int sub(int data1, int data2) {
	printf("sub: %d - %d = %d\n", data1, data2, data1 - data2);
	return data1 - data2;
}
//乘法
int mul(int data1, int data2) {
	printf("mul: %d * %d = %d\n", data1, data2, data1 * data2);
	return data1 * data2;
}
//除法
int division(int data1, int data2) {
	printf("div: %d / %d = %d\n", data1, data2, data1 / data2);
	return data1 / data2;
}

运算整合代码

int Fun(	
	int (*p1)(int, int),		//第一个运算
	int (*p2)(int, int),		//第二个运算
	int (*p3)(int, int),		//第三个运算
	int data1, int data2) {
	int res = 0;
	res = p3( p2( p1(data1, data2), data1), data1);
	printf("Res:%d\n", res);
	return res;
}

main函数

int main() {
	Fun(division, sum, mul, 20, 4);
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
函数指针还有很多的用途啦,指针用的话,大神跑不了,哈哈哈哈哈。

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘻嘻子的呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值