這一句話使用*((void**)&f)的原因在於,轉化目標為左值(即轉化f為void*型別(*)的函式指標)。
注意這裡的(void**)強制型別轉換僅僅只是重新宣告了指標解引用的方式,並沒有提公升指標的引用層級。意思上*((void**)&f)與f是相等的(忽略(void**)只看*&f就知道這本質上就是先取位址再解引用)。但是不能直接使用f,因為乙個函式名不能做左值(要做左值必須指標化,也就是變成函式指標)。如果需要乙個函式名直接做左值的話,需要將其轉換為指標再取內容。實際上(void**)可以被看成(void* *),後面的*表示函式被取位址後是乙個指標,前面的void*表示這個指標被從新解釋成了指向void*型別的指標(也就是相當於函式名被轉換成了乙個指標),之後對這個位址(&f)解引用,得到的自然就已經是乙個函式指標了。
在hge中有這樣一行**:
這是乙個巨集,作用是將任意函式指標f,都賦值成來自動態鏈結庫的同名函式。右邊使用的是(void*)指標做強制型別轉換,這是乙個通用的方法,不用擔心具體函式簽名是什麼。
另外,只能使用函式指標來接收乙個函式位址,無論是從動態庫匯出的函式。還是其他的函式。
注釋:(*)在c++中void*可以接收所有型別的指標,但是反之不可。在c中void*既可以賦值給任何指標,也可以被任何指標賦值。
空型別指標(void 的理解
原文 void指標是空型別指標,它不指向任何型別,即void指標僅僅是乙個位址,所以空型別指標不能進行指標運算 也不能進行間接引用 因為指標運算和間接引用都需要指標的型別資訊 例如 void p 僅僅表示p存放乙個位址 p error 運算離不開指標型別 p 20.5 error 訪問p指向的變數空...
空型別指標(void 的理解
void指標是空型別指標,它不指向任何型別,即void指標僅僅是乙個位址,所以空型別指標不能進行指標運算,也不能進行間接引用 因為指標運算和間接引用都需要指標的型別資訊 p error 運算離不開指標型別 p 20.5 error 訪問p指向的變數空間需要變數型別資訊由於其他指標都包含有位址資訊,所...
C語言中的void的理解
1 初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並 詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別的資料。v...