| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1228 人关注过本帖
标题:指针问题
只看楼主 加入收藏
zsd425
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-8-11
收藏
 问题点数:0 回复次数:5 
指针问题
我在书上看到:“在给函数指针变量赋值时,只需给出函数名而不必给出参数“
我想问的是
    对于重载的函数(即同名但是参数不同的函数),怎么办呢?
   比如: 定义了两个 int max(int a,int b);和float max(float x,float y);
   当另一个函数要调用他们是,怎么给函数指针赋值呢?
搜索更多相关主题的帖子: 指针 
2004-08-11 19:16
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

问的好,我真的还没有考虑过这个问题!

我刚刚做了实验,源代码如下:

#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);编译程序也会找到正确的地址一样

问题的关键是:函数的指针也是有类型的!!


永不放弃!
2004-08-11 20:15
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

关于typedef,请看我刚发的另一个帖子:http://websx.home.zccn.net/bbs/dispbbs.asp?boardID=56&ID=4166&page=1

有助你理解typedef!!


永不放弃!
2004-08-11 21:00
zsd425
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-8-11
收藏
得分:0 
但是不是很明白,到底遇到这样的问题怎样解决呢?应该去对应哪一个函数呢?
2004-08-11 21:35
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

要看你的函数指针的类型跟哪个函数的类型相匹配.

正如我的例子中,函数指针指定的函数有两个int型参数,那么当发生重载的时候,应该匹配那个含有两个int 型参数的函数了!


永不放弃!
2004-08-12 18:52
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:0 
up
2004-08-13 01:12
快速回复:指针问题
数据加载中...
 
   



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

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