| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 423 人关注过本帖
标题:问下有关指针函数的问题啊?
只看楼主 加入收藏
apiqqz
Rank: 2
等 级:论坛游民
威 望:2
帖 子:56
专家分:25
注 册:2011-9-2
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:7 
问下有关指针函数的问题啊?
今天见到了这样的一段代码
      double avg(double a,double b)
      main()
      {  double x,y,(*p)();
          scanf("%lf%lf",&x,&y);
          p=avg
           printf(%f\n",(*p)(x,y)
       }
         double avg(double a,double b)
         {return((a+b)/2);}
 在这里面我有两个疑问  1. 在程序的第三行的(*p)()的语句能不能写成  *p(),  这是定义了一个指针数组吗?
                       2. 程序将指针P指向函数avg,这样用(*p)(x,y)方式来调用函数,应该怎么样理解
         
搜索更多相关主题的帖子: double return double return 
2011-09-04 15:08
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
不可以写成 *p(),后面的优先级高,就成了返回指针的函数了,不是指向函数的指针了;第二, (*p)(x,y)=p(x,y),前者是实际含义,后者是简化处理了而已。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-04 15:14
apiqqz
Rank: 2
等 级:论坛游民
威 望:2
帖 子:56
专家分:25
注 册:2011-9-2
收藏
得分:0 
回复 2楼 pauljames
那如果在定义的时候,这样定义 double   x,y,*p ;
然后在后面也将avg 的地址赋给  p ,   p=avg ;  那么程序还能通过编译吗?

2011-09-04 15:22
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
test.c: In function ‘main’:
test.c:6: warning: assignment from incompatible pointer type
test.c:7: error: called object ‘*p’ is not a function

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-04 15:30
apiqqz
Rank: 2
等 级:论坛游民
威 望:2
帖 子:56
专家分:25
注 册:2011-9-2
收藏
得分:0 
回复 4楼 pauljames
也就是说,指向函数的指针必须是定义成(*p)(),后面的括号是不能少的否则系统就不承认后面   p(x,y)是函数了?
从这段代码中来看,可否这样理解:在C的编译程序里将  记录变量地址的指针和记录函数地址的指针区别对待?指向变量地址的指针是对变量的属性进行操作,而指向函数的指针不但记录了函数的首地址,而且还可以传送函数的实参?
2011-09-04 15:57
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
并不区别对待,只是()的优先级大于*,然后结合C的定义,去理解*p()到底是什么。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-04 16:05
apiqqz
Rank: 2
等 级:论坛游民
威 望:2
帖 子:56
专家分:25
注 册:2011-9-2
收藏
得分:0 
以前学习VB的时候,讲到优先级()是最高的,比如  (x+y)/(c+d) ,书上总是说括号优先级最高程序先会对括号里面的表达式进行运算,在这里  *p() 应该是考虑其结合性吧???????
2011-09-04 16:17
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
收藏
得分:10 
我个人感觉,对于初学者来说,应该将(*)p()中的*p理解为avg函数,因为*p就是它所指向的函数了。
2011-09-04 18:23
快速回复:问下有关指针函数的问题啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034823 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved