」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 C++ 中可以將 void 指標轉換為函式指標嗎?

在 C++ 中可以將 void 指標轉換為函式指標嗎?

發佈於2024-11-08
瀏覽:485

Can You Cast void Pointers to Function Pointers in C  ?

在C 中將空指標轉換為函數指標

將dlsym() 等函數傳回的空指標轉換為函數指標在C中並不簡單。預設情況下,C 98/03 中禁止此類直接轉換。

限制原因

在 C 98/03 中,void* 指針用於引用對象,不是函數或成員指針。

C 中的有條件支援0x

在 C 0x 中,實作可以選擇支援將 void* 轉換為函數指標。如果支持,則行為必須符合標準。

依賴實現的解決方法

雖然不允許直接轉換,但這些解決方法可能在大多數平台上起作用:

  • 重新詮釋演員:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
  • 變數重新解釋:
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;

這些解決方法利用了函數指標位址是物件並且可以使用reinterpret_cast.

轉換為void**指標的事實注意事項

這些解決方法涉及未定義的行為,應謹慎使用。

最新教學 更多>
  • 將 ZingGrid 連接到 Supabase:在幾分鐘內新增後端
    將 ZingGrid 連接到 Supabase:在幾分鐘內新增後端
    從我在 Zing 部落格上的文章中交叉發布。 Supabase 是一個開源 Firebase 替代品。他們提供多種服務,但出於本文的目的,我們將深入探討它如何充當網格的簡單後端。 初始設定 在開始設定網格之前,我們需要在 Supabase 方面執行幾個步驟。 1...
    程式設計 發佈於2024-11-08
  • 如何在水平行中建立重疊的 Flex 項目?
    如何在水平行中建立重疊的 Flex 項目?
    創建重疊的 Flex 項目創建可能超出可用寬度的水平行 Flex 項目時,通常需要讓它們重疊。預設情況下,Flexbox 會縮小項目以適合容器。 Flexbox 方法要實現重疊,我們可以使用以下方法: overflow: visible;}.card { width: 10em; min-width...
    程式設計 發佈於2024-11-08
  • 適合初學者的 Vue.js VueJs 部分錶單和事件監聽器
    適合初學者的 Vue.js VueJs 部分錶單和事件監聽器
    為什麼要使用 Vue.js 作為表單? Vue.js 在建立表單方面的優勢: 簡單的資料綁定:Vue.js 使用 v-model 在表單輸入和元件資料之間綁定數據,使同步變得容易。 反應性:模型資料的任何變更都會自動更新視圖,確保使用者始終看到最新的數據,而無需編...
    程式設計 發佈於2024-11-08
  • Context API 與 Redux
    Context API 與 Redux
    在 React 生態系統中,Context API 和 Redux 都是流行的狀態管理工具,但它們有不同的用途並具有不同的優勢。 React 內建的 Context API 提供了一種在元件樹中共用狀態的方法,而無需在每個層級手動傳遞 props。它對於更簡單的應用程式或主題管理或用戶身份驗證等特定...
    程式設計 發佈於2024-11-08
  • 我們如何使用臨時容器建立範圍管道?
    我們如何使用臨時容器建立範圍管道?
    使用臨時容器實現範圍管道要建立處理臨時容器內的值的範圍管道,必須合併views::cache1運算子。此運算符會快取轉換的結果,確保其可用於後續操作。 考慮以下場景,其中第三方函數 f 接受類型 T 的參數並傳回 T 的向量。將f 套用於無限範圍src 的所有元素並將結果展平為單一範圍的範圍管道,我...
    程式設計 發佈於2024-11-08
  • 如何使用 Python 檢索 Github 儲存庫數據
    如何使用 Python 檢索 Github 儲存庫數據
    您的組織是否擁有太多github 儲存庫,並且您需要一種簡單的方法來總結和記錄每個儲存庫的內容以用於報告、儀表板或審計目的?下面是一個使用 Github API 完成該操作的快速腳本。 功能: get_repo_info(所有者,回購): 取得 GitHub 儲存庫擁有者的使用者名...
    程式設計 發佈於2024-11-08
  • 使用 useState 的狀態更新方法
    使用 useState 的狀態更新方法
    React 是用於開發動態和互動式使用者介面的最受歡迎的 JavaScript 程式庫之一。在開發應用程式時,狀態管理對於效能和使用者體驗至關重要。在這種情況下,useState 掛鉤是管理元件狀態的最常見方法之一。在本文中,我們將深入研究 useState. 的狀態更新方法 狀態更...
    程式設計 發佈於2024-11-08
  • 考慮到 libcurl 的可用性,何時適合在 PHP 中啟用「allow_url_fopen」?
    考慮到 libcurl 的可用性,何時適合在 PHP 中啟用「allow_url_fopen」?
    在 PHP 中允許「allow_url_fopen」:平衡行為開發人員經常要求在 PHP 中啟動「allow_url_fopen」。在本文中,我們將檢查目前的行業規格並評估允許此功能是否仍然謹慎,特別是在 libcurl 可用的情況下。 當前行業規範對於大多數 Web 應用程序,啟用“allow_u...
    程式設計 發佈於2024-11-08
  • 何時在 jQuery.parseJSON 中使用單引號和雙引號?
    何時在 jQuery.parseJSON 中使用單引號和雙引號?
    jQuery.parseJSON 中的單引號與雙引號使用jQuery 的parseJSON 方法時,使用者可能會遇到行為差異,具體取決於是單引號還是雙引號雙引號用於將JSON 字串括起來。在本文中,我們將探討這些差異。 雙引號:標準方法根據 JSON 標準,雙引號被認為是括起的首選方法JSON 字串...
    程式設計 發佈於2024-11-08
  • 如何處理多處理 Python 應用程式中的日誌記錄?
    如何處理多處理 Python 應用程式中的日誌記錄?
    Python 中的多處理日誌記錄使用Python 的多處理模組時,重要的是要考慮日誌記錄實踐,以避免因多個進程寫入而導致錯誤同時處理相同的檔案句柄。預設情況下,mp.get_logger() 提供的多處理感知記錄器可確保 sys.stderr 中正確的鎖定機制。 但是,不支援多處理感知的模組可能需要...
    程式設計 發佈於2024-11-08
  • 答:我如何運行特定的phinx seeder並在phpunit中取得產生的記錄?
    答:我如何運行特定的phinx seeder並在phpunit中取得產生的記錄?
    這個答案解決了我遇到的一個問題:在 phpunit 上運行 Phinx 播種者: 回答回覆:我如何運行特定的phinx seeder並在phpunit中取得產生的記錄? ...
    程式設計 發佈於2024-11-08
  • 如何以程式設計方式為 LinearLayout 中的按鈕新增邊距?
    如何以程式設計方式為 LinearLayout 中的按鈕新增邊距?
    LinearLayout 中的動態邊距LinearLayout 中的動態邊距在Android 開發中,佈局在組織和顯示使用者介面元素方面發揮著至關重要的作用。佈局的一個常見要求是能夠指定元素之間的邊距。雖然 XML 提供了一種直觀的方式來定義邊距,但開發人員可能需要以程式設計方式建立佈局以確保靈活性...
    程式設計 發佈於2024-11-08
  • 如何使用 PowerMock 和 Mockito 有效模擬私有方法?
    如何使用 PowerMock 和 Mockito 有效模擬私有方法?
    使用PowerMock 模擬私有方法的替代解決方案儘管最初提出的使用PowerMock 的解決方案遇到了困難,但事實證明,另一種方法是成功的。使用 Mockito 和 PowerMock 的組合,可以有效地模擬私有方法。 如提供的程式碼片段所示,類別 CodeWithPrivateMethod 擁有...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中將列式資料結構轉換為基於行的格式?
    如何在 PHP 中將列式資料結構轉換為基於行的格式?
    將多維列式資料重新排序為基於行的結構給定一個具有面向列資料的關聯數組,任務是將其轉置為由行組成的多維數組。原始數組中的資料按列排列,目標是將同一列的值合併到行中。 原始陣列:$where = [ 'id' => [ 12, 13, 14 ...
    程式設計 發佈於2024-11-08
  • Next.JS 或 Nuxt.JS 哪個最好
    Next.JS 或 Nuxt.JS 哪個最好
    The ability to build scalable and seamless web applications quickly is the dream of every web developer. As a result, the importance of frameworks in ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3