Posted on 2008-09-30 11:26
MichaelCao 閱讀(5664)
評論(0) 編輯 收藏 引用 所屬分類:
CPP and MFC
指針應該都是4個字節,指向32位的地址.可以尋訪4GB的內存.如果是64位就再說.所以對函數指針來說這個應該就有了很大的好處.因為指針大家都是4個字節不論是什么種類的函數,它肯定都是4字節.這樣賦值就沒問題.在這里你也可以將指針直接看成是一個整數.這樣會更明白些.而對于另外一個問題.函數參數和返回值,則完全由函數的定義來決定.嗯.這樣就可以有很大的自由空間.來段代碼.
1
#include<iostream>
2
using namespace std ;
3
4
typedef void (*pfn) (void);
5
union msg
6

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

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

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

{
22
pfn p=(pfn)(int (*)(int ,int ))OnInt;
23
msg m;
24
m.first=p;
25
cout<<(m.ifn)(5,6)<<endl;
26
27
p=(pfn)(void (*)(int, int ))OnVoid;
28
m.first=p;
29
m.vfn(10,15);
30
return 0;
31
}
看了這段代碼會讓人想到什么呢?想到的應該是MFC中那些消息函數吧.不同的消息,參數不一樣,返回值也不一樣.而在定義的時候只是一個指針,可是在調用的時候卻有各種各樣的方式.另外這段代碼最有意思的就是打破常規,就用了union同時只有一個變量在起作用,平時書上總是說其他變量都不能用,今天就用給你看看,用的還很牛...