關於(void**)及其相關的理解
#define LOADBASSFUNCTION (f) *((void **)&f)=(void*)GetProcAddress (hBass,# f)
注意這裏的(void**)強制類型轉換僅僅只是重新聲明瞭指針解引用的方式,並沒有提升指針的引用層級。意思上*((void**)&f)與f是相等的(忽略(void**)只看*&f就知道這本質上就是先取地址再解引用)。但是不能直接使用f,因爲一個函數名不能做左值(要做左值必須指針化,也就是變成函數指針)。如果需要一個函數名直接做左值的話,需要將其轉換爲指針再取內容。實際上(void**)可以被看成(void* *),後面的*表示函數被取地址後是一個指針,前面的void*表示這個指針被從新解釋成了指向void*類型的指針(也就是相當於函數名被轉換成了一個指針),之後對這個地址(&f)解引用,得到的自然就已經是一個函數指針了。
#define LOADBASSFUNCTION(f) *((void**)&f)=(void*)GetProcAddress(hBass,#f)
轉載地址:http://www.cnblogs.com/wubugui/p/4247733.html