CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

[求助]一个有点别扭的问题,关于指向函数的指针的数组~~~~呵呵,高手进!!!

楼主yysbest(沙之漠)2006-05-03 17:04:00 在 C/C++ / C++ 语言 提问

程序如下:  
  #include   <iostream>  
  using   namespace   std;  
  int   f1()  
  {  
  return   0;  
  }  
   
  int   f2()  
  {  
  return   0;  
  }  
   
  int   f3()  
  {  
  return   0;  
  }  
   
  int   f4()  
  {  
  return   0;  
  }  
   
  int   main()  
  {  
  int   (*a[])()   =   {f1,   f2,   f3,   f4};  
   
  for   (int   i   =   0;   i   <   4;   ++i)  
  {  
  cout   <<   a[i]   <<   endl;  
  a[i]();  
  }  
  }    
   
   
  环境:VC6.0  
   
  运行之后,显示出的值应该为各个函数的入口地址,却找不到任何规律?为什么呢?还请高手解释这些函数在代码段中的排列和内存分配情况,多谢~~~~~ 问题点数:20、回复次数:7Top

1 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-05-03 18:18:52 得分 10

稍加修改,Release版有规律,各地址间相差0x70  
  若为空函数体,几个地址一样。  
   
  #include   <iostream>  
  using   namespace   std;  
  int   f1()  
  {  
  cout<<"f1"<<endl;  
  int   i;  
  return   0;  
  }  
   
  int   f2()  
  {  
  cout<<"f2"<<endl;  
  float   i;  
  return   0;  
  }  
   
  int   f3()  
  {  
  cout<<"f3"<<endl;  
  double   i;  
  return   0;  
  }  
   
  int   f4()  
  {  
  cout<<"f4"<<endl;  
  char   i;  
  return   0;  
  }  
   
  int   main()  
  {  
  int   (*a[])()   =   {&f1,   &f2,   &f3,   &f4};  
   
  for   (int   i   =   0;   i   <   4;   ++i)  
  {  
  cout   <<   a[i]   <<   endl;  
  a[i]();  
  }  
  }    
  Top

2 楼yuanchuang(元创)回复于 2006-05-03 18:37:42 得分 5

改成:  
  cout   <<   (int)a[i]   <<   endl;Top

3 楼braveconf()回复于 2006-05-03 19:02:25 得分 0

要想知道就去看linker吧。  
  不知道你为什么要知道里面的“规律”?Top

4 楼Kenmark(fenix)回复于 2006-05-03 20:47:46 得分 5

函数的入口根据函数的类型、参数表、连接器的设置,以及很多东西都有关,而且和函数的代码也有一定的关系,真搞不懂要研究这规律干什么?Top

5 楼wolfkain()回复于 2006-05-04 12:33:00 得分 0

反汇编吧,可能,呵呵Top

6 楼yysbest(沙之漠)回复于 2006-05-04 14:54:51 得分 0

呵呵,没什么,一时好奇而已。  
   
  不过,问一下       黄瓜     :  
  int   (*a[])()   =   {&f1,   &f2,   &f3,   &f4};  
  int   (*a[])()   =   {   f1,     f2,     f3,     f4};  
   
  有什么不一样么?为什么要加个“&”??  
  Top

7 楼MagicCarmack(MagiC++)回复于 2006-05-04 19:48:01 得分 0

首先你得理解int   (*a[])()这个声明的意思  
   
  a数组里的元素是指针,自然它的值就是地址!Top

相关问题

关键词

得分解答快速导航

  • 帖主:yysbest
  • A_B_C_ABC
  • yuanchuang
  • Kenmark

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo