找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1186|回复: 5

指针问题

[复制链接]
发表于 2009-10-31 01:04:18 | 显示全部楼层 |阅读模式 IP:江苏扬州
我在书上看到:“在给函数指针变量赋值时,只需给出函数名而不必给出参数“
我想问的是
    对于重载的函数(即同名但是参数不同的函数),怎么办呢?
   比如: 定义了两个 int max(int a,int b);和float max(float x,float y);
   当另一个函数要调用他们是,怎么给函数指针赋值呢?
发表于 2009-10-31 01:04:18 | 显示全部楼层 IP:江苏扬州
问的好,我真的还没有考虑过这个问题!
我刚刚做了实验,源代码如下:
#include <iostream.h>
int Func(int a,int b) { return 0; }
int Func(char a,char b) { return 1; }
typedef int (* pFunc)(int a,int b);
int main(int argc, char* argv[]) { pFunc p; p =(pFunc) Func; int a = (*p)(0,0); cout<<a;
return 0; }
结果是0,看样是匹配了int Func(int a,int b)函数,是由于函数的指针也是有类型的,比如我定义的p就是pFunc类型的.我有必要对typedef int (* pFunc)(int a,int b);进行解释以下:
首先,看到typedef就应该知道这是定义一个类型.接着往下看,int (* pFunc)(int a,int b);形式,多么象一个函数呀!其实,他就是定义一个函数的指针类型.表示该类型定义的变量应该是个函数指针,该函数有两个变量,都是int型的,该函数有个返回值,也是int型的.
现在大家知道,typydef和define是完全不同的了!
回到正题上来,由于函数的指针是有类型的,所以编译程序在赋值的时候,找到匹配的函数!正如,你写
Func(0,0);编译程序也会找到正确的地址一样
问题的关键是:函数的指针也是有类型的!!
回复

使用道具 举报

发表于 2009-10-31 01:04:19 | 显示全部楼层 IP:江苏扬州
关于typedef,请看我刚发的另一个帖子:http://websx.home.zccn.net/bbs/dispbbs.asp?boardID=56&ID=4166&page=1
有助你理解typedef!!
回复

使用道具 举报

发表于 2009-10-31 01:04:20 | 显示全部楼层 IP:江苏扬州
但是不是很明白,到底遇到这样的问题怎样解决呢?应该去对应哪一个函数呢?
回复

使用道具 举报

发表于 2009-10-31 01:04:21 | 显示全部楼层 IP:江苏扬州
要看你的函数指针的类型跟哪个函数的类型相匹配.
正如我的例子中,函数指针指定的函数有两个int型参数,那么当发生重载的时候,应该匹配那个含有两个int 型参数的函数了!
回复

使用道具 举报

发表于 2009-10-31 01:04:22 | 显示全部楼层 IP:江苏扬州
up
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 13:16 , Processed in 0.271543 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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