鱼C论坛

 找回密码
 立即注册
查看: 13011|回复: 151

[技术交流] 指针函数与函数指针,一看必通

  [复制链接]
发表于 2014-3-16 20:51:40 | 显示全部楼层 |阅读模式

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

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

x
函数指针

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的指针变量名) (指针变量名 )”中的括号不能省,若省略整体则成为一个函数说明,说明了一个返回的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
指针函数

指针函数,指针函数是指带指针的函数,即本质是一个函数。函数都有返回类型(如果不指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子:
  1. #include <stdio.h>
  2. float *find(float(*pionter)[4],int n);//函数声明
  3. int main(void)
  4. {
  5.      static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
  6.      float *p;
  7.      int i,m;
  8.      printf("Enter the number to be found:");
  9.      scanf("%d",&m);
  10.      printf("the score of NO.%d are:\n",m);
  11.      p=find(score,m-1);
  12.      for(i=0;i<4;i++)
  13.          printf("%5.2f\t",*(p+i));
  14.   
  15.      return 0;
  16. }

  17. float *find(float(*pionter)[4],int n)/*定义指针函数*/
  18. {
  19.      float *pt;
  20.      pt=*(pionter+n);
  21.      return(pt);
  22. }
复制代码
共有三个学生的成绩,函数find()被定义为指针函数,其指针变量。pointer+n指向score的第n+1行。*(pointer+1)指向第一行的第0个元素。pt是一个指针变量,它指向数组的首地址传给pointer.
游客,如果您要查看本帖隐藏内容请回复

  1. [hide]//指针函数是指返回值是指针的函数,即本质是一个函数
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6.     float *find(float (*p)[4],int m);//查询序号为m的学生的四门课程的成绩
  7.     float score[][4]={{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定义成绩数组,第一维可以为变量
  8.     float *pf=NULL;//定义一个指针时一定要初始化
  9.     int i,m;
  10.     cout<<"请输入您想查询的学生的序号:";
  11.     cin>>m;
  12.     pf=find(score,m);//返回为一维数组指针,指向一个学生成绩
  13.     for(i=0;i<4;i++)
  14.     cout<<*(pf+i)<<" ";
  15.     cout<<endl;
  16.     return 0;
  17. }
  18. float *find(float (*p)[4],int m)
  19. {
  20.     float *pf=NULL;
  21.     pf=*(p+m);//p是指向二维数组的指针,加*取一维数组的指针
  22.     return pf;
  23. }
  24. [/hide]
复制代码



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

使用道具 举报

发表于 2014-3-16 21:15:45 | 显示全部楼层
再过两天就学这个了{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-16 21:29:13 | 显示全部楼层
向大师好好学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-16 22:25:36 | 显示全部楼层
学无止境,咱来瞅瞅!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-16 22:35:10 | 显示全部楼层
我也要学!!!!:big:big:big:big:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-16 23:58:37 | 显示全部楼层
支持支持支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 00:43:46 | 显示全部楼层
支持一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 08:28:53 | 显示全部楼层
支持支持支持~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 08:55:48 | 显示全部楼层
学习一下 看看啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 09:02:52 | 显示全部楼层
学习一下{:1_1:}{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 09:05:44 | 显示全部楼层
更看不懂了    彻底懵了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 12:23:14 | 显示全部楼层
感谢楼主无私奉献!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 12:25:35 | 显示全部楼层
你看后面两个字就明白了   
指针函数函数
函数指针指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 13:44:43 | 显示全部楼层
学习了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-17 14:10:59 | 显示全部楼层
{:1_1:}指针不好懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-17 21:31:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-17 21:32:16 | 显示全部楼层
qaed 发表于 2014-3-16 22:35
我也要学!!!!

加油啊,指针刚开始确实不太好用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-17 21:33:45 | 显示全部楼层
蒲公英花开 发表于 2014-3-17 09:05
更看不懂了    彻底懵了

说白了就是指针函数是函数,这个函数返回的是指针,而函数指针是一个指针,它指向一个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-17 21:34:19 | 显示全部楼层
沉思的牛 发表于 2014-3-17 12:25
你看后面两个字就明白了   
指针函数是函数
函数指针是指针

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

使用道具 举报

发表于 2014-3-17 21:43:02 | 显示全部楼层
看的有点发晕。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 08:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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