通過記憶體拷貝(memcpy等)可以實現任意指標
間的強制轉換,
但不能保證可以正常使用。
通過網上查詢發現:
函式成員指標其實與普通成員指標不同,它除了包含函式本身位址以外還包含其他資訊(例如是否為虛函式等),所以不能簡單的理解成員函式指標就是普通指標那樣一般佔4位元組,這個視編譯器不同而不同:例如在vs中,普通成員函式指標類似於
struct ptr
};typedef void (test::*cfun)();
typedef void (*fun)();
cfun cf = &test::print;
fun f= cf; //失敗,型別檢查
memcpy(&f,&cf,sizeof(fun));
f(); //成功
2. 虛函式
(1)通過虛函式表獲取
class test
};typedef void (test::*cfun)();
typedef void (*fun)();
test t;
int **vptr = (int**)(&t); //vptr[0]獲取虛函式表位址
cfun f = vptr[0][0]; //後面那個零時虛函式在虛函式表中的索引,表示第乙個虛函式
f();
((fun) vptr[0][0])();
通常不能用&test::print獲取虛函式位址,即使獲取位址也是乙個中間值或者總是返回0x1。
3. 通用的指標轉換函式
templater convert(t t)
但不能保證轉換的有效性。
C 學習之普通函式指標與成員函式指標
函式指標 function pointer 是通過指向函式的指標間接呼叫函式,相信很多人對指向一般函式的函式指標使用較多,而對指向類成員函式指標則比較的陌生。一 普通函式指標 通常我們所說得函式指標指向一般普通函式指標,和其他的指標一樣,函式指標指向某種特定的型別,所有被同一指標運用的函式必須指向某...
普通函式指標與類成員函式指標的區別
include 指向函式的指標 typedef int pfun int,int int maxfun int a,int b int minfun int a,int b 通用函式介面,實現對maxfun,minfun函式型別的封裝 int commonfun pfun fun,int a,int...
C 學習之普通函式指標與成員函式指標
函式指標 function pointer 是通過指向函式的指標間接呼叫函式。相信很多人對指向一般函式的函式指標使用的比較多,而對指向類成員函式的函式指標則比較陌生。我最近也被問到了這方面的問題,心中卻也沒有清晰的答案。故決定去查閱資料,並按照自己的思路寫下這篇學習總結。通常我們所說的函式指標指的是...