0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

函數(shù)指針的五大作用

撞上電子 ? 2023-12-06 08:00 ? 次閱讀

1,回調(diào)函數(shù)機(jī)制

函數(shù)指針常用于實(shí)現(xiàn)回調(diào)函數(shù)。通過將函數(shù)指針作為參數(shù)傳遞給另一個函數(shù),可以在特定事件發(fā)生時調(diào)用預(yù)定義的函數(shù)。這種機(jī)制在事件處理、異步編程等場景中很常見。例如,圖形用戶界面(GUI)庫中的按鈕點(diǎn)擊事件處理函數(shù)就是通過回調(diào)函數(shù)實(shí)現(xiàn)的。

#include
// 回調(diào)函數(shù)類型typedef void (*CallbackFunction)(int);
// 執(zhí)行回調(diào)函數(shù)的函數(shù)void performCallback(CallbackFunction callback, int value) { callback(value);}// 回調(diào)函數(shù)1void callback1(int value) { printf("Callback 1: %d\n", value);}
// 回調(diào)函數(shù)2void callback2(int value) { printf("Callback 2: %d\n", value * 2);}
int main() { // 使用回調(diào)函數(shù)1 performCallback(callback1, 5);
// 使用回調(diào)函數(shù)2 performCallback(callback2, 10);
return 0;}

2,動態(tài)函數(shù)調(diào)用

函數(shù)指針允許在運(yùn)行時動態(tài)地選擇要調(diào)用的函數(shù)。這在需要根據(jù)條件選擇不同實(shí)現(xiàn)的情況下很有用,可以增加程序的靈活性和可擴(kuò)展性。例如,可以根據(jù)用戶輸入的選項(xiàng)調(diào)用不同的處理函數(shù)。

#include
// 函數(shù)類型typedef void (*FunctionPointer)();// 函數(shù)1void function1() { printf("Function 1\n");}// 函數(shù)2void function2() { printf("Function 2\n");}
int main() { // 函數(shù)指針 FunctionPointer funcPtr; // 根據(jù)條件選擇要調(diào)用的函數(shù) if (condition) { funcPtr = function1; } else { funcPtr = function2; } // 調(diào)用選擇的函數(shù) funcPtr();
return 0;}

3,函數(shù)指針數(shù)組

可以創(chuàng)建一個函數(shù)指針數(shù)組,每個元素是一個指向特定函數(shù)的指針。這樣的數(shù)組可以用于實(shí)現(xiàn)狀態(tài)機(jī)、菜單驅(qū)動程序等。例如,可以用一個函數(shù)指針數(shù)組來實(shí)現(xiàn)一個簡單的命令行菜單系統(tǒng)。

#include
// 函數(shù)類型typedef void (*MenuFunction)();
// 函數(shù)1void function1() { printf("Option 1\n");}// 函數(shù)2void function2() { printf("Option 2\n");}
int main() { // 函數(shù)指針數(shù)組 MenuFunction menu[] = {function1, function2};
// 用戶選擇的菜單項(xiàng) int choice; // 獲取用戶輸入 printf("Enter your choice (1 or 2): "); scanf("%d", &choice);

// 調(diào)用選擇的函數(shù) if (choice >= 1 && choice <= 2) { menu[choice - 1](); // 數(shù)組索引從0開始,需要減1 } else { printf("Invalid choice\n"); }
return 0;}

4,動態(tài)庫加載

在動態(tài)庫加載的情景中,函數(shù)指針用于獲取動態(tài)庫中的函數(shù)地址。這樣,你可以在運(yùn)行時決定是否加載某個庫,以及調(diào)用庫中的哪些函數(shù)。

#include #include
typedef void (*LibraryFunction)();
int main() { // 加載動態(tài)庫 void *libHandle = dlopen("mylibrary.so", RTLD_LAZY);
if (libHandle) { // 獲取動態(tài)庫中的函數(shù)地址 LibraryFunction libFunction = dlsym(libHandle, "myFunction");
if (libFunction) { // 調(diào)用動態(tài)庫中的函數(shù) libFunction(); } else { fprintf(stderr, "Error: Function not found\n"); } // 關(guān)閉動態(tài)庫 dlclose(libHandle); } else { fprintf(stderr, "Error: Unable to load library\n"); }
return 0;}

5,函數(shù)指針作為參數(shù)函數(shù)指針可以作為函數(shù)的參數(shù),這樣可以將函數(shù)作為另一個函數(shù)的參數(shù)傳遞,實(shí)現(xiàn)更靈活的函數(shù)組合。

#include // 函數(shù)類型typedefint(*OperationFunction)(int,int);
// 加法函數(shù)int add(int a, int b) { return a + b;}// 減法函數(shù)int subtract(int a, int b) { return a - b;}// 執(zhí)行操作的函數(shù)int performOperation(OperationFunction operation, int a, int b) { return operation(a, b);}
int main() { // 使用加法函數(shù) int resultAdd = performOperation(add, 5, 3); printf("Result of addition: %d\n", resultAdd);
// 使用減法函數(shù) int resultSubtract = performOperation(subtract, 5, 3); printf("Result of subtraction: %d\n", resultSubtract);
return 0;}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3541

    瀏覽量

    93462
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223
  • 函數(shù)指針
    +關(guān)注

    關(guān)注

    2

    文章

    56

    瀏覽量

    3766
收藏 人收藏

    評論

    相關(guān)推薦

    極管的作用與原理是什么

    的設(shè)計和工作原理相對復(fù)雜,但它們在電子放大和信號處理方面非常有效。 極管的作用大作用極管可以放大電信號,這是其最基本的功能。通過控制柵極的電壓,可以調(diào)節(jié)陰極和屏極之間的電流
    的頭像 發(fā)表于 09-24 15:23 ?165次閱讀

    TRF37D73對發(fā)送的射頻信號可以起放大作用,對接收的射頻信號可以起放大作用嗎?

    1、TRF37D73對發(fā)送的射頻信號可以起放大作用,對接收的射頻信號可以起放大作用嗎? 2、TRF37D73和CC430配合使用,請問有相關(guān)的電路設(shè)計資料嗎?TRF37D73放在射頻電路的哪個部位?
    發(fā)表于 09-04 07:37

    面試常考+1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它
    的頭像 發(fā)表于 08-10 08:11 ?505次閱讀
    面試常考+1:<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>與<b class='flag-5'>指針</b><b class='flag-5'>函數(shù)</b>、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組

    聚徽觸控-工控主板的五大優(yōu)勢分別是什么

    工控主板的五大優(yōu)勢主要如下:
    的頭像 發(fā)表于 07-17 09:58 ?235次閱讀

    C語言函數(shù)指針六大應(yīng)用場景詳解

    函數(shù)指針是一種非常強(qiáng)大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數(shù)指針的高級應(yīng)用場景,并貼出相應(yīng)的代碼案例和解釋。
    的頭像 發(fā)表于 04-23 18:19 ?789次閱讀

    函數(shù)指針與回調(diào)函數(shù)的應(yīng)用實(shí)例

    通常我們說的指針變量是指向一個整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)函數(shù)指針
    的頭像 發(fā)表于 03-07 11:13 ?340次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>與回調(diào)<b class='flag-5'>函數(shù)</b>的應(yīng)用實(shí)例

    pcb等離子處理的5大作用

    pcb等離子處理的5大作用
    的頭像 發(fā)表于 03-05 10:24 ?762次閱讀

    電機(jī)的五大啟動方式

    自動化小白必學(xué)!電機(jī)的五大啟動方式
    的頭像 發(fā)表于 01-09 10:39 ?787次閱讀
    電機(jī)的<b class='flag-5'>五大</b>啟動方式

    函數(shù)指針指針函數(shù)是不是一個東西?

    函數(shù)指針的本質(zhì)是指針,就跟整型指針、字符指針一樣,函數(shù)指針
    的頭像 發(fā)表于 01-03 16:35 ?468次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>和<b class='flag-5'>指針</b><b class='flag-5'>函數(shù)</b>是不是一個東西?

    函數(shù)指針的基本概念和語法

    函數(shù)指針是一種非常強(qiáng)大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 8 個函數(shù)指針的高級應(yīng)用場景,并貼出相應(yīng)的代碼案例和解釋。
    的頭像 發(fā)表于 12-12 09:33 ?402次閱讀

    LED驅(qū)動電源設(shè)計五大要點(diǎn)

    電子發(fā)燒友網(wǎng)站提供《LED驅(qū)動電源設(shè)計五大要點(diǎn).doc》資料免費(fèi)下載
    發(fā)表于 11-15 09:53 ?0次下載
    LED驅(qū)動電源設(shè)計<b class='flag-5'>五大</b>要點(diǎn)

    了解一下函數(shù)指針的概念和使用方法

    在講回調(diào)函數(shù)之前,我們需要了解函數(shù)指針。
    的頭像 發(fā)表于 11-06 10:04 ?555次閱讀
    了解一下<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>的概念和使用方法

    堆棧指針作用是什么?

    堆棧指針作用是什么
    發(fā)表于 11-02 08:10

    常見的一級指針參數(shù)有什么作用

    先來看一個最常用函數(shù)模型,函數(shù)func()參數(shù)為一個uint8_t 的指針類型,那這個函數(shù)有什么作用?
    的頭像 發(fā)表于 10-24 14:35 ?470次閱讀
    常見的一級<b class='flag-5'>指針</b>參數(shù)有什么<b class='flag-5'>作用</b>

    函數(shù)類型和函數(shù)指針類型的區(qū)別

    平時用的更多的是函數(shù)指針類型,比如作為函數(shù)參數(shù)傳入回調(diào)函數(shù)等等。實(shí)際上函數(shù)類型也是可以作為函數(shù)
    發(fā)表于 10-24 14:27 ?301次閱讀