Posted on 2008-09-30 11:26 
MichaelCao 阅读(5690) 
评论(0)  编辑 收藏 引用  所属分类: 
CPP and MFC 
			 
			
		 
		    指针应该都是4个字节,指向32位的地址.可以寻访4GB的内存.如果是64位就再说.所以对函数指针来说这个应该就有了很大的好处.因为指针大家都是4个字节不论是什么种类的函数,它肯定都是4字节.这样赋值就没问题.在这里你也可以将指针直接看成是一个整数.这样会更明白些.而对于另外一个问题.函数参数和返回值,则完全由函数的定义来决定.嗯.这样就可以有很大的自由空间.来段代码.
 1 #include<iostream>
#include<iostream>
 2 using namespace std ;
using namespace std ;
 3
 4 typedef void (*pfn) (void);
typedef void (*pfn) (void);
 5 union msg
union msg
 6

 {
{
 7 pfn first ;
    pfn first ;
 8 int (* ifn)(int a ,int b );
    int (* ifn)(int a ,int b );
 9 void(*vfn)(int ,int );
    void(*vfn)(int ,int );
10 };
};
11 int OnInt(int a ,int b )
int OnInt(int a ,int b )
12

 {
{
13 cout<<a<<"    "<<b<<endl;
    cout<<a<<"    "<<b<<endl;
14 return a ;
    return a ;
15 }
}
16 void OnVoid(int a ,int b )
void OnVoid(int a ,int b )
17

 {
{
18 cout<<a <<"    "<<b<<endl;
    cout<<a <<"    "<<b<<endl;
19 }
}
20 int main()
int main()
21

 {
{
22 pfn p=(pfn)(int (*)(int ,int ))OnInt;
    pfn p=(pfn)(int (*)(int ,int ))OnInt;
23 msg m;
    msg m;
24 m.first=p;
    m.first=p;
25 cout<<(m.ifn)(5,6)<<endl;
    cout<<(m.ifn)(5,6)<<endl;
26
27 p=(pfn)(void (*)(int, int ))OnVoid;
    p=(pfn)(void (*)(int, int ))OnVoid;
28 m.first=p;
    m.first=p;
29 m.vfn(10,15);
    m.vfn(10,15);
30 return 0;
    return 0;
31 }
} 
看了这段代码会让人想到什么呢?想到的应该是MFC中那些消息函数吧.不同的消息,参数不一样,返回值也不一样.而在定义的时候只是一个指针,可是在调用的时候却有各种各样的方式.另外这段代码最有意思的就是打破常规,就用了union同时只有一个变量在起作用,平时书上总是说其他变量都不能用,今天就用给你看看,用的还很牛...