| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:小弟初学,看书看到函数指针部分,有一问题很不理解,请各位大大指点~~~~
只看楼主 加入收藏
okay011
Rank: 1
等 级:新手上路
帖 子:16
专家分:6
注 册:2012-7-11
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:5 
小弟初学,看书看到函数指针部分,有一问题很不理解,请各位大大指点~~~~

void ABC(){
    cout<<"测试成功"<<"\n";}
 void (*DEF)();
  int main (){
      DEF=ABC; //此处为什么不能写成“*DEF=ABC”?个人感觉*DEF才能等价于ABC啊。
               //个人理解*DEF才是完整的,能间访各个函数,从而用函数给函数赋值。
      DEF();
}
问题比较白,请指教。 我先定义一个无类型函数,然后定义一个函数指针,赋值,让指针间访自定义函数并执行其中的输出。问题是赋值地方我不理解。
搜索更多相关主题的帖子: 看书 void 
2012-07-11 15:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
void ABC(){
    cout<<"测试成功"<<"\n";}

这个是定义了一个函数


void (*DEF)();

这个是定义了一个指针 也就是一个变量

函数的地址可以认为是个常量 所以是常量赋值给变量 书上的写法没错

至于为啥不写星号 你去再看看指针的相关内容罢


[ 本帖最后由 zklhp 于 2012-7-11 15:37 编辑 ]
2012-07-11 15:33
okay011
Rank: 1
等 级:新手上路
帖 子:16
专家分:6
注 册:2012-7-11
收藏
得分:0 
int g(int) ;       函数
int (*gp)(int) ;   函数指针
gp=g     ;         赋值    为什么gp(我理解是函数指针的地址)直接能被g(我理解是函数)赋值??
                          我觉得应该写成   gp=&g    或者   *gp=g  我思路肯定有问题,但不知道我是哪想歪了。
2012-07-11 16:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
*gp=g

这个是明显不对的 对指针赋值是对指针变量赋值 也就是变量赋值 不应该加*

至于&g的写法么 对不对我也不知道。。 你可以试试 按理是对的。。

这个你可以类比数组 int a[20] = {0}; a 和 &a 等效

关于函数指针 你也可以记住书上写的这些 这就是函数指针的一般用法


[ 本帖最后由 zklhp 于 2012-7-11 16:23 编辑 ]
2012-07-11 16:21
okay011
Rank: 1
等 级:新手上路
帖 子:16
专家分:6
注 册:2012-7-11
收藏
得分:0 
谢谢你~~~~
2012-07-11 16:26
okay011
Rank: 1
等 级:新手上路
帖 子:16
专家分:6
注 册:2012-7-11
收藏
得分:0 
#include<vector>
#include<iostream>
#include<fstream>
#include<sstream>
#include<algorithm>
using namespace std;
void ABC(){
    cout<<"测试成功"<<"\n";}
 void (*DEF)();
  int main (){
      DEF=ABC;
      DEF();
      cout<<&DEF<<"和"<<ABC<<"   "<<"两个地址不一样吧!"<<endl;
//-------------说明DEF有自己的地址,且此地址指向一个无量的地址,前加*没有实际量可访问,也就是不能用来间访,也就不存在*DEF 了。
    int a=9;
    int* ap;
    ap=&a;
    cout<<&ap<<"和"<<&a<<"   "<<"两个地址不一样吧!"<<endl;
//--------------说明ap有自己的地址,且指向一个有量的地址,前加*可间访实际量。*必须最后指向实际量才能用。
    if(*ap=9){
        cout<<"测试又成功了\n";}
    else cout<<"失败\n";
    int b=*ap;
    cout<<b<<endl;

      
 }             可能就是所谓的蜕变
2012-07-12 15:31
快速回复:小弟初学,看书看到函数指针部分,有一问题很不理解,请各位大大指点~ ...
数据加载中...
 
   



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

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