| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 496 人关注过本帖
标题:指向函数的指针
只看楼主 加入收藏
jlu_uestc
Rank: 2
等 级:论坛游民
帖 子:30
专家分:14
注 册:2011-4-14
结帖率:71.43%
收藏
已结贴  问题点数:10 回复次数:6 
指向函数的指针
int  add(int x,int y)
{ return (x+y);}
如果想定义一个指向上面这个函数的指针,一下三种方式都是对的吗?
    int (*p)();
    int (*p)(int ,int );
    int (*p)(int a,int b );
p=add;
搜索更多相关主题的帖子: return 
2011-06-07 11:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
第一种不对,二、三可以,推荐使用二,参数名没有意义。
收到的鲜花
  • voidx2011-06-07 13:09 送鲜花  3朵   附言:我很赞同

重剑无锋,大巧不工
2011-06-07 11:19
jinzhu0505
Rank: 2
等 级:论坛游民
帖 子:24
专家分:35
注 册:2010-10-16
收藏
得分:3 
p=add(x,y);
2011-06-07 11:24
jlu_uestc
Rank: 2
等 级:论坛游民
帖 子:30
专家分:14
注 册:2011-4-14
收藏
得分:0 
回复 2楼 beyondyf
那为什么第一种也能正常运行呢?
2011-06-07 15:53
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
我这里第一种不能正常运行  而且编译都会出错
图片附件: 游客没有浏览图片的权限,请 登录注册

                                         
===========深入<----------------->浅出============
2011-06-07 17:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 4楼 jlu_uestc
呵呵,有这种情况,这与具体的编译器有关。有些编译器只以函数名做为函数的唯一标识,TC应该就是这样的。毕竟指针不过是一个内存地址而已。有些编译器以函数名、函数参数类型做为函数的标识,C++的编译器应该是这样的,这与它支持函数重载的性质有关。
不做函数指针的类型检查这件事情有好有坏。一方面可以提高灵活性,建立一个通用的函数指针指向不同的函数;另一方面带来了程序安全风险,错误的函数类型可能导致返回结果的错误,甚至程序的崩溃。函数的形参是通过栈来传递的,在函数体中以参数的类型和顺序计算其在栈中偏移量,由此获取参数值。而参数的压栈工作都是由函数调用者完成的。函数本身并不知道入栈的参数有多少,这种情况下有可能读取到一些不可预测的数据。当越过了栈段系统可能会报XXX地址不能为read或write这样的错误报告并终止程序。

重剑无锋,大巧不工
2011-06-07 17:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
所以最好还是按声明进行引用和操作。C语言闲事管的很少,给予程序员很大的自由,它基于你知道自己在做什么来实现的。

重剑无锋,大巧不工
2011-06-07 17:37
快速回复:指向函数的指针
数据加载中...
 
   



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

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