鱼C论坛

 找回密码
 立即注册
查看: 3422|回复: 19

函数指针有什么用

[复制链接]
发表于 2016-5-3 10:15:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 夜雨de街灯 于 2016-5-6 11:07 编辑

书上说函数指针有两个用途:调用函数和做函数的参数。

我有点不明白调用函数还不如直接使用它
例如:

  1. #include<stdio.h>
  2. void main(void)
  3. {
  4.       int one(int a , int b);   //声明函数one,形参为整形的a和b
  5.       int (*two)( );              //声明函数指针two
  6.       two=one;                   //one函数的地址赋值给函数指针two
  7.       (*two)(1 , 2);             //调用函数指针two,实参为1和2
  8. }
  9. int one(int a , int b)          //定义函数one,形参为整形的a和b
  10. {
  11.      ......                             //内容
  12. }
复制代码


那还不如直接

  1. #include<stdio.h>
  2. void main(void)
  3. {
  4.       int one(int a , int b);     //声明函数one,形参为整形的a和b
  5.       one(1 , 2);                   //调用函数one,实参为1和2
  6. }
  7. int one(int a , int b)            //定义函数one,形参为整形的a和b
  8. {
  9.      ......                              //内容
  10. }
复制代码


还有就是函数做函数参数
例如:
  1. #include<stdio.h>
  2. void main(void)
  3. {
  4.       int one(int a ,int (*three)( ));       //声明函数one,形参为整形的a和一个函数
  5.       int two(int b ,int c);                     //声明函数two,形参为整形的b和c
  6.       int (*three)( );                             //声明函数指针three
  7.       three=two;                                  //two函数的地址赋值给函数指针three
  8.       one(1 ,three(2,3));                      //调用函数one,实参为1和函数two的指针
  9. }
  10. int one(int a , int (*three)())               //定义函数one,形参为整形的a和一个函数
  11. {
  12.      ......                                                //内容
  13. }
复制代码

作为参数其实是为了它的返回值吧,那直接放在one函数里引用two函数不就行了吗,为什么要通过指针这么麻烦

  1. #include<stdio.h>
  2. void main(void)
  3. {
  4.       int one(int a);               //声明函数one,形参为整形的a和一个函数
  5.       one(1);                        //调用函数one,实参为1
  6. }
  7. int one(int a )                     //定义函数one,形参为整形的a
  8. {
  9.      int two(int b ,int c);       //声明函数two,形参为整形的b和c
  10.      two(2,3);                      //调用two函数,实参为2和3
  11.      ............                        //还有内容
  12. }
复制代码


能告诉我函数指针有什么作用吗,这样做的好处或者说意义,现在想想有点蒙了,之前用指针变量指向整型变量、字符型、数组。用指针有什么用吗?
汗死


钻牛角尖了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-3 15:38:35 | 显示全部楼层
不要沉,来高手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-4 15:39:02 | 显示全部楼层
顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-4 18:57:37 | 显示全部楼层
实在看不懂 你在写什么  函数返回指针 和函数指针是不同的    函数指针  一般都是放到需要回调函数的函数里。  例如我有一个自己写的多线程函数 , 我需要让别人调用时传入函数,哪你就得自己定义一个函数指针做形参,让别人调用的时候用改形参格式传入,  如果不是做底层  函数指针的确很少用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 08:40:39 | 显示全部楼层
好多好多鱼 发表于 2016-5-4 18:57
实在看不懂 你在写什么  函数返回指针 和函数指针是不同的    函数指针  一般都是放到需要回调函数的函数里 ...

刚学到函数指针,有点不明白,函数指针的作用,如果说在主函数里调用一个函数,定义一个指针,然后用指针指向它,为什么不直接引用它;还有就是函数指针做另一个函数的参数,为什么不直接在另一个函数的函数体里引用,应该没问题的,因为函数名是一个地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 08:53:19 | 显示全部楼层
夜雨de街灯 发表于 2016-5-5 08:40
刚学到函数指针,有点不明白,函数指针的作用,如果说在主函数里调用一个函数,定义一个指针,然后用指针 ...

兄弟 你自己好好想想,你是做底层的,例如你需要别人传入一个 int (int int)型的函数指针,你难道直接写个void*,然后什么都不写  然后告诉别人这是一个回调函数的入口,直接叫别人把函数地址传进去就行吗?你这样谁用你的底层库?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 09:07:17 | 显示全部楼层
好多好多鱼 发表于 2016-5-5 08:53
兄弟 你自己好好想想,你是做底层的,例如你需要别人传入一个 int (int int)型的函数指针,你难道直接写 ...

初学不懂,底层库是什么,跟着小甲鱼的就这么学,求大神科普一下
还有回调函数又是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 20:08:06 | 显示全部楼层
回调函数
http://baike.baidu.com/link?url=XnbYVWkVTB6t99Yfrr3SJC53BPqYjr32vFd4YlJ88Vt1aE_4xN1B1hdZMAGFeICVOHtVXsUnsCQiosv-d84nEK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 21:03:19 | 显示全部楼层
夜雨de街灯 发表于 2016-5-5 09:07
初学不懂,底层库是什么,跟着小甲鱼的就这么学,求大神科普一下
还有回调函数又是什么{:10_2 ...

以你的知识层面,我越解释你就越多不懂,慢慢学吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 21:22:02 | 显示全部楼层
兄弟,好乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 23:27:57 | 显示全部楼层
好多好多鱼 发表于 2016-5-5 21:03
以你的知识层面,我越解释你就越多不懂,慢慢学吧

嗯,好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 23:28:54 | 显示全部楼层

我也知道,我自己领悟一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-6 07:59:08 | 显示全部楼层
看了楼主开始发的帖子,我觉得楼主是把函数指针和返回指针的函数给搞混了。应该再多看看书上的例题。例题里函数指针做形参是在其他函数里做形参,然后通过main函数把需要调用的函数的入口通过函数指针传递给需要调用这个函数的其他函数,让其他函数能知道main函数想让他调用的是哪个函数。另一个作用就可以方便的调用不同的函数,更换函数指针指向的函数名即可,避免调用不同函数时重复写入的代码,精简代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-6 09:43:53 | 显示全部楼层
永远健康 发表于 2016-5-6 07:59
看了楼主开始发的帖子,我觉得楼主是把函数指针和返回指针的函数给搞混了。应该再多看看书上的例题。例题里 ...

脑子混乱中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-6 09:46:28 | 显示全部楼层
人造人 发表于 2016-5-5 20:08
回调函数
http://baike.baidu.com/link?url=XnbYVWkVTB6t99Yfrr3SJC53BPqYjr32vFd4YlJ88Vt1aE_4xN1B1hdZMA ...

谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-6 11:13:41 | 显示全部楼层
好多好多鱼 发表于 2016-5-4 18:57
实在看不懂 你在写什么  函数返回指针 和函数指针是不同的    函数指针  一般都是放到需要回调函数的函数里 ...

我写错了忘了加括号,变成返回指针了,新手没办法,现在问题写得更详细了,不过也不知道有没有写错,就这么看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-6 11:14:24 | 显示全部楼层
永远健康 发表于 2016-5-6 07:59
看了楼主开始发的帖子,我觉得楼主是把函数指针和返回指针的函数给搞混了。应该再多看看书上的例题。例题里 ...

我写错了忘了加括号,变成返回指针了,新手没办法,现在问题写得更详细了,不过也不知道有没有写错,就这么看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-10 22:54:33 | 显示全部楼层
因为变量有地址 所以可以定义一个指针来指向这个变量  这个你要弄懂了 函数指针你也能懂,这个你要不懂后面就不用看了;;


---------------------------
函数也是有地址的 ,函数名字你就可以直接看成是地址 一个不用"&" 符号的地址;
函数指针  可以解释成:函数类型的指针     (就像整数类型的指针叫整型指针一个道理)
函数指针作用:一个函数如果有一个指针指向它,那么这个函数的功能可以被别的函数调用!!!!但是这个调用别的函数   的函数必须要有一个函数指针类型的形参!!!!;


这是最直白的解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-22 11:15:10 | 显示全部楼层
看了楼主的帖子我发现我也混乱了
不懂的太多了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-24 08:29:56 | 显示全部楼层
Whitehat_K 发表于 2016-5-22 11:15
看了楼主的帖子我发现我也混乱了
不懂的太多了。。。

叫你乱看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-6 09:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表