簡體   English   中英

我可以直接調用函數指針嗎?

[英]Can I call function pointers directly?

我問的問題不會用於制作,這是純粹的好奇心


假設我有一個函數,它的原型是:

int myFunc(int, char*);

假設我知道靜態內存地址(例如,0xC0DE),我可以這樣做:

int (__cdecl* myFuncPtr)(int, char*) = (int(__cdecl*)(int, char*)) 0xC0DE;
myFuncPtr(1, "something");

現在,我能以某種方式在一行中調用該函數,而不是定義它嗎? 像這樣:

((int(__cdecl*)) 0xC0DE)(1, "something");

轉換為函數指針類型而不是int*

((int(__cdecl*)(int, char const*)) 0xC0DE)(1, "something")

請注意,這仍然會調用未定義的行為,必須避免,除非您的實現明確記錄您可能會這樣做,並且您不關心可移植性。 如果您想要安全,至少使用內聯匯編,以便您可以依賴目標體系結構而不是編譯器提供的保證。

在C中,但不是C ++,您可以省略參數類型:

((int(*)()) 0xC0DE)(1, "something");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM