精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

函數指針的五大作用

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

1,回調函數機制

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

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

2,動態函數調用

函數指針允許在運行時動態地選擇要調用的函數。這在需要根據條件選擇不同實現的情況下很有用,可以增加程序的靈活性和可擴展性。例如,可以根據用戶輸入的選項調用不同的處理函數。

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

3,函數指針數組

可以創建一個函數指針數組,每個元素是一個指向特定函數的指針。這樣的數組可以用于實現狀態機、菜單驅動程序等。例如,可以用一個函數指針數組來實現一個簡單的命令行菜單系統。

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

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

4,動態庫加載

在動態庫加載的情景中,函數指針用于獲取動態庫中的函數地址。這樣,你可以在運行時決定是否加載某個庫,以及調用庫中的哪些函數。

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

5,函數指針作為參數函數指針可以作為函數的參數,這樣可以將函數作為另一個函數的參數傳遞,實現更靈活的函數組合。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3495

    瀏覽量

    93072
  • 函數
    +關注

    關注

    3

    文章

    4214

    瀏覽量

    61848
  • 函數指針
    +關注

    關注

    2

    文章

    55

    瀏覽量

    3756
收藏 人收藏

    評論

    相關推薦

    面試???1:函數指針指針函數、數組指針指針數組

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

    聚徽觸控-工控主板的五大優勢分別是什么

    工控主板的五大優勢主要如下:
    的頭像 發表于 07-17 09:58 ?164次閱讀

    C語言函數指針六大應用場景詳解

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

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數。 函數指針
    的頭像 發表于 03-07 11:13 ?288次閱讀
    <b class='flag-5'>函數</b><b class='flag-5'>指針</b>與回調<b class='flag-5'>函數</b>的應用實例

    pcb等離子處理的5大作用

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

    電機的五大啟動方式

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

    函數指針指針函數是不是一個東西?

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

    函數指針的基本概念和語法

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

    三極管的電流放大作用

    電子發燒友網站提供《三極管的電流放大作用.zip》資料免費下載
    發表于 11-20 14:26 ?1次下載
    三極管的電流放<b class='flag-5'>大作用</b>

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

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

    堆棧指針作用是什么?

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

    常見的一級指針參數有什么作用

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

    函數類型和函數指針類型的區別

    平時用的更多的是函數指針類型,比如作為函數參數傳入回調函數等等。實際上函數類型也是可以作為函數
    發表于 10-24 14:27 ?230次閱讀

    Linux內核如何使用結構體和函數指針

    我將結合具體的Linux內核驅動框架代碼來展示Linux內核如何使用結構體和函數指針。
    的頭像 發表于 09-06 14:17 ?767次閱讀
    Linux內核如何使用結構體和<b class='flag-5'>函數</b><b class='flag-5'>指針</b>?

    通過函數指針調用函數,需不需要加星號?

    先來說下結論,不管是獲取函數地址,還是通過函數指針調用函數,兩種寫法都可以,就用法上來說,沒有什么區別,初學者也不必過多糾結。
    的頭像 發表于 09-05 17:05 ?970次閱讀