??????????????如何使用函數指針來調用函數

在C和C++編程中,函數指針是一種特殊類型的指針,它指向一個函數而不是一個變量。使用函數指針可以動態地調用不同的函數,這在實現回調函數、事件處理、策略模式等場景中非常有用。

以下是如何定義和使用函數指針來調用函數的步驟:

  1. 定義函數指針類型
    首先,你需要定義一個函數指針類型。這個類型描述了指針所指向的函數的返回類型和參數列表。

     

    c復制代碼

    typedef int (*FuncPtr)(int, int); // 定義一個指向返回int類型,接受兩個int參數的函數的指針類型

    或者,你也可以在聲明函數指針時直接指定類型,而不使用typedef

     

    c復制代碼

    int (*func_ptr)(int, int); // 直接聲明一個函數指針
  2. 定義與函數指針類型匹配的函數
    接下來,你需要定義一些與你的函數指針類型匹配的函數。

     

    c復制代碼

    int add(int a, int b) {
    return a + b;
    }
    int subtract(int a, int b) {
    return a - b;
    }
  3. 將函數地址賦值給函數指針
    現在,你可以將函數的地址賦值給你的函數指針。

     

    c復制代碼

    FuncPtr ptr_add = add;
    FuncPtr ptr_subtract = subtract;

    或者使用直接聲明的函數指針:

     

    c復制代碼

    func_ptr = add; // 將add函數的地址賦給func_ptr
  4. 通過函數指針調用函數
    最后,你可以通過你的函數指針來調用函數。

     

    c復制代碼

    int result_add = ptr_add(5, 3); // 調用add函數,并傳遞參數5和3
    int result_subtract = ptr_subtract(5, 3); // 調用subtract函數,并傳遞參數5和3
    printf("Add: %d, Subtract: %d\n", result_add, result_subtract);

完整示例:

 

c復制代碼

#include <stdio.h>
// 定義函數指針類型
typedef int (*FuncPtr)(int, int);
// 定義與函數指針類型匹配的函數
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
// 將函數地址賦值給函數指針
FuncPtr ptr_add = add;
FuncPtr ptr_subtract = subtract;
// 通過函數指針調用函數
int result_add = ptr_add(5, 3);
int result_subtract = ptr_subtract(5, 3);
printf("Add: %d, Subtract: %d\n", result_add, result_subtract);
return 0;
}

在這個示例中,FuncPtr是一個指向返回int類型并接受兩個int參數的函數的指針類型。我們定義了兩個這樣的函數:addsubtract,并將它們的地址分別賦給了ptr_addptr_subtract函數指針。然后,我們通過這些函數指針調用了相應的函數,并打印了結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71657.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

KEGG條形圖繪制

原始數據 setwd("C:\\Users\\HUAWEI\\Desktop\\proteomic_WGCNA\\bacteria\\Eggnog\\KEGGhun") library(ggplot2) library(cols4all) dt <- read.csv("bacteria_KEGG.csv")dt$KEGG_Term <- factor(dt$KEGG_Term, levels rev(dt$KEGG_Term))#基礎富集…

My Metronome for Mac v1.4.2 我的節拍器 支持M、Intel芯片

應用介紹 My Metronome 是一款適用于 macOS 的專業節拍器應用程序&#xff0c;旨在幫助音樂家、作曲家、學生和任何需要精確節奏控制的人進行練習。無論是進行樂器練習、音樂創作還是演出排練&#xff0c;My Metronome 都能為用戶提供精準的節拍支持和靈活的功能&#xff0c;確…

宇樹科技13家核心零部件供應商梳理!

2025年2月6日&#xff0c;摩根士丹利&#xff08;Morgan Stanley&#xff09;發布最新人形機器人研報&#xff1a;Humanoid 100: Mapping the Humanoid Robot Value Chain&#xff08;人形機器人100&#xff1a;全球人形機器人產業鏈梳理&#xff09;。 Humanoid 100清單清單中…

Part 3 第十二章 單元測試 Unit Testing

概述 第十二章圍繞單元測試展開&#xff0c;闡述了單元測試的實踐與重要性&#xff0c;通過對比其他測試類型&#xff0c;突出其特點&#xff0c;還介紹了單元測試的最佳實踐、避免的反模式以及與測試替身相關的內容&#xff0c;為編寫高質量單元測試提供指導。 章節概要 1…

【Vite SVG 圖標方案:vite-plugin-svg-icons 指南】

&#x1f31f; Vite SVG 圖標方案&#xff1a;vite-plugin-svg-icons 指南 &#x1f4dc; 背景與痛點 &#x1f30d; 前端圖標演進史 1.0 &#x1f5bc;? 圖片圖標 → 2.0 &#x1f3ad; 字體圖標 → 3.0 &#x1f3a8; SVG 圖標傳統方案存在三大痛點&#xff1a; 字體圖標…

go flag參數 類似Java main 的args

兩部分內容 go run test1.go aa -name 123 1. 解析&#xff1a;aa -name 123 2. 解析&#xff1a;name 123 代碼 package mainimport ("log""os" )func main() {log.Println("main ...")if len(os.Args) > 0 {for index, arg : ra…

酒店旅游API:數據交互的隱形橋梁——以攜程API為例

一、API&#xff1a;酒店 和第三方服務無縫連接。 核心價值&#xff1a; 實時數據互通&#xff1a;房態、價格、庫存秒級同步。業務流程自動化&#xff1a;預訂、支付、確認全程無需人工干預。生態擴展&#xff1a;開發者可基于API構建定制化工具&#xff08;如比價插件、智能…

深入理解 JSP 與 Servlet:原理、交互及實戰應用

一、引言 在 Java Web 開發領域,JSP(JavaServer Pages)和 Servlet 是兩個至關重要的技術,它們共同構成了動態網頁開發的基礎。Servlet 作為服務器端的 Java 程序,負責處理客戶端請求并生成響應;而 JSP 則是一種簡化的 Servlet 開發方式,允許開發者在 HTML 頁面中嵌入 J…

【JavaScript】《JavaScript高級程序設計 (第4版) 》筆記-Chapter20-JavaScript API

二十、JavaScript API JavaScript API 隨著 Web 瀏覽器能力的增加&#xff0c;其復雜性也在迅速增加。從很多方面看&#xff0c;現代 Web 瀏覽器已經成為構建于諸多規范之上、集不同 API 于一身的“瑞士軍刀”。瀏覽器規范的生態在某種程度上是混亂而無序的。一些規范如 HTML5&…

AI芯片的關鍵特征

AI芯片是專門為人工智能應用設計的芯片&#xff0c;以下是其應具備的關鍵特征&#xff1a; 強大的并行計算能力&#xff1a;AI任務如深度學習中的神經網絡訓練和推理&#xff0c;涉及大量矩陣運算和并行數據處理。AI芯片需有眾多計算單元&#xff08;如GPU的大量流處理器、ASIC…

go 模塊管理

go version 查看版本 go version go1.21.12 windows/amd64 需要保證:go的版本升級為1.11以上,go mod依賴的最底版本 go env 查看go的環境變量 go env 開啟go mod # 標識開啟go的模塊管理 set GO111MODULE=on GO111MODULE有三個值:off, on和auto(默認值)。 GO111M…

Unity 適用于單機游戲的紅點系統(前綴樹 | 數據結構 | 設計模式 | 算法 | 含源碼)

文章目錄 功能包括如何使用 功能包括 紅點數據本地持久化 如果子節點有紅點&#xff0c;父節點也要顯示紅點&#xff0c;父節點紅點數為子節點紅點數的和&#xff1b; 當子節點紅點更新時&#xff0c;對應的父節點也要更新&#xff1b; 當所有子節點都沒有紅點時&#xff0c…

使用API有效率地管理Dynadot域名,為域名部署DNS安全拓展(DNSSEC)

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…

Web - JS基礎語法與表達式

概述 這篇文章主要介紹了 JavaScript 的基礎語法&#xff0c;包括代碼書寫位置、ERPL 環境、變量&#xff08;命名規則、默認值、初始化&#xff09;、數據類型&#xff08;基本和復雜&#xff0c;及各類型特點、轉換&#xff09;、表達式和運算符&#xff08;算數、特殊算數、…

一臺服務器將docker image打包去另一天服務器安裝這個鏡像

一臺服務器將docker image打到去另一天服務器安裝這個鏡像 1. 打包2.另一臺服務器執行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一臺服務器執行 docke…

一周學會Flask3 Python Web開發-response響應格式

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 在HTTP響應中&#xff0c;數據可以通過多種格式傳輸。大多數情況下&#xff0c;我們會使用HTML格式&#xff0c;這也是Flask中…

TCP和Http協議

TCP 三次握手&#xff1a; 第一次握手 &#xff1a; 初始狀態&#xff1a;開始時&#xff0c;客戶端處于 CLOSED&#xff08;關閉&#xff09;狀態&#xff0c;服務端處于 LISTEN&#xff08;監聽&#xff09;狀態&#xff0c;等待客戶端的連接請求。客戶端發送請求&#xff…

圖論 之 最小生成樹

文章目錄 題目1584.連接所有點的最小費用 最小生成樹MST&#xff0c;有兩種算法進行求解&#xff0c;分別是Kruskal算法和Prim算法Kruskal算法從邊出發&#xff0c;適合用于稀疏圖Prim算法從頂點出發&#xff0c;適合用于稠密圖&#xff1a;基本思想是從一個起始頂點開始&#…

前端面試之Box盒子布局:核心知識與實戰解析

目錄 引言&#xff1a;布局能力決定前端高度 一、盒模型基礎&#xff1a;看得見的像素戰爭 1. 標準盒模型 vs IE盒模型 2. 核心組成公式 3. 視覺格式化模型 二、傳統布局三劍客 1. 浮動布局&#xff08;Float Layout&#xff09; 2. 定位布局&#xff08;Position Layou…

OnlyOffice:前端編輯器與后端API實現高效辦公

OnlyOffice&#xff1a;前端編輯器與后端API實現高效辦公 一、OnlyOffice概述二、前端編輯器&#xff1a;高效、靈活且易用1. 完善的編輯功能2. 實時協作支持3. 自動保存與版本管理4. 高度自定義的界面 三、后端API&#xff1a;管理文檔、用戶與權限1. 輕松集成與定制2. 實時協…