c函数指针函数(指针函数的定义及用法)
函数指针
今天准备和大家讲解一下我们C语言编程的函数指针,为什么函数也需要指针呢?我是这样理解的函数指针方便我们对函数的调用,当我们需要把一个函数作为参数传给其他参数的时候就必须使用函数指针才能很好的完成。我希望今天能够很清楚很详细地和大家分享一下函数指针这一块的重点和难点。看完之后你会对函数指针的理解、定义、使用有一个比较全面的认识,废话不多说我们进入正题。
我们先来看下面的代码:
1 int * fun1 (int *ptr1, int *ptr2);
2 int * *fun2 (int *ptr1, int *ptr2);
3 int *(*fun3)(int *ptr1, int *ptr2);
在这里定义1、2、3个表达式,首先看到比较复杂的表达式不要慌,不要对它产生畏惧,我们先来一个一个分析。
第1个定义是什么意思?fun3是我们的函数名字没什么问题吧,括号里面是fun3的参数,类型都是int 行指针,和今天讲的没什么关系,括号都可以不用看,最后我们看最前面的int * 是什么意思?那不就是函数的返回值嘛,返回的是一个整型的指针。
第2个定义我们看看和第1个定义有什么区别?是不是比第1个定义多了一个 * 号那其他和第一个是一样的呀,只是返回值是一个指针的指针,是一个二级指针。
第3个定义就是我们今天的重点内容,打起精神了,精彩来啦!如果我们把第3个表达式的(*fun3)看作一个整体的话你发现他和第一表达式 int * fun1 (int *ptr1, int *ptr2);没有什么区别了?那它就是返回值为整型指针,参数为两个整型的指针对吧?好我们现在回过头来分析(*fun3)是什么东西,我们先看一个比较好理解的:*ptr 看到没有?是不是很类似,我们都知道ptr是一个指针对吧,那我们的 *fun3 和它一样也是一样指针,然后再看: int *ptr ; ptr是不是变成了一个整型指针?为什么是整型呢?原来他前面是int类型的对吧都理解那就对了我们来完整地分析第3个定义:
int *(*fun3)(int *ptr1, int *ptr2);
首先我们知道这是一个函数:
函数的返回值:int * 一个整型指针;
函数参数:int *ptr1,int*ptr2 两个整型指针;
(*fun3)是一指针;
总结:此时fun3不是一个普通的函数名了而是一个指针变量,是一个指向函数的指针;
函数指针的用法
#include
#include
int * fun(int a ,int b)
{
if(a>b)
printf("a比b大!!n");
else
printf("a比b小!!n");
}
void max(int * (fun1)(int a,int b),int c,int d)
{
printf("max函数里面调用的n");
fun1(c,d);
}
int main()
{
int a=10;
int b=20;
int *(*fun1)(int a, int b);
fun1=&fun;
printf("fun函数正常调用的n");
fun(a,b);
printf("函数指针调用的n");
(*fun1)(a,b);
max(fun1,a,b);
return 0;
}
代码和结果分析:
我们可以看一下三种fun函数的调用都成功了第一种的话是普通的调用给她传参数就可以了,第二个是函数指针的调用把fun的地址赋值给了函数指针fun1,然后调用也没问题,重点是第三个用法,我们把函数fun当做一个参数传到了函数max里面去了,也可以实现对函数fun的调用,这意义太大了,这也是函数指针的魅力所在。为什么呢?你想想如果我们有很多类似的函数十几个二十几个的时候我们怎么管理和使用,这时候我们可以用函数指针去管理和调用他们,把他们都装进一个函数指针数组,当然如果你够强你可以在定义一样指针指向这个数组。
在这里提一下我们的函数指针数组和函数指针数组指针:
函数指针数组:
int * (*fun[5])(int *p,int *p2)
函数指针数组指针
int * (*(fun)[5])(int *p,int *p2);
后期准写两篇专门来介绍这两种,想在评论区听一下各位对这两个知识点的看法总结一下理清楚思路再写,评论区交给大佬了!
感觉写的有些废头发,不知道你们看完知道什么是函数指针没有?
-
无相关信息
- 1bat的大数据(BAT的大数据来源)
- 2三星s8屏幕上端2(三星s8屏幕上端2个按键)
- 3三星屏幕坏了如何导出(三星屏幕摔坏了如何导出数据么)
- 4红米3x怎么关闭自动更新(红米k40s怎么关闭自动更新)
- 5微信上防止app自动下载软件怎么办(微信上防止app自动下载软件怎么办啊)
- 6押镖多少钱(押镖一个月有多少储备金)
- 7瑞星个人防火墙胡功能(瑞星个人防火墙协议类型有哪些)
- 8cf现在等级是多少(cf等级2020最新)
- 9老滑头多少条鱼(钓鱼老滑头有什么用)
- 10WPS自动调整语法(wps如何修改语法)
- 11dell控制面板防火墙(dell的防火墙怎么关闭)
- 12丑女技能升多少(丑女技能需要满级吗)
- 13智能家居系统怎么样(智能家居系统好吗)
- 14戴尔屏幕(戴尔屏幕闪烁)
- 15y85屏幕信息(vivoy85息屏显示时间怎么设置)
- 16魅蓝note3屏幕出现方格(魅蓝note屏幕竖条纹)
- 17v8手指按屏幕(触屏手指)
- 18金为液晶广告机(液晶广告机lb420)
- 19三星显示器怎么校色(三星显示器 调色)
- 20hkc显示器dvi音频(hkc显示器有音响么)
- 21康佳液晶智能电视机(康佳液晶智能电视机怎么样)
- 22做液晶画板电脑(做液晶画板电脑怎么操作)
- 23液晶屏极化现象原理(液晶屏极化现象原理是什么)
- 24企业网络安全防火墙(企业网络防护)
- 256splus黑屏屏幕不亮(苹果6s plus屏幕突然黑屏)
- 26充电导致屏幕失灵(充电导致屏幕失灵怎么办)
- 27超极本屏幕旋转(笔记本电脑屏幕旋转,怎么转过来?)
- 28igmp防火墙(防火墙配置ipv6)
- 29荣耀王者多少经验(王者荣耀经验多少一级)
- 30lol老将还剩多少(qg老将)