成員函式指標 (結構 與普通函式指標之間的轉換)

2021-06-22 20:08:03 字數 886 閱讀 2202

通過記憶體拷貝(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 是通過指向函式的指標間接呼叫函式。相信很多人對指向一般函式的函式指標使用的比較多,而對指向類成員函式的函式指標則比較陌生。我最近也被問到了這方面的問題,心中卻也沒有清晰的答案。故決定去查閱資料,並按照自己的思路寫下這篇學習總結。通常我們所說的函式指標指的是...