[英]why do we need to call these functions at run time using function pointers. we can as well call them directly
[英]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.