[求助]一个有点别扭的问题,关于指向函数的指针的数组~~~~呵呵,高手进!!!
程序如下:
#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




