C功能指針示例
函數指針用於指向函數並調用,支持回調、函數表等場景;1. 定義函數指針語法為返回類型(*指針名)(參數列表);2. 可通過typedef簡化聲明;3. 能作為參數傳遞實現回調;4. 可組成數組形成函數表;5. 使用時需確保類型匹配,避免未定義行為;函數指針在性能敏感場景仍有價值。
在C 中,函數指針是一種指向函數的變量,可以用來調用不同函數,常用於回調、函數表、事件處理等場景。下面是一個簡單實用的函數指針示例,幫助你理解其基本用法。

✅ 基本語法:函數指針的定義與使用
假設我們有兩個簡單的函數:
#include <iostream> using namespace std; // 兩個普通函數,接受兩個int,返回int int add(int a, int b) { return ab; } int multiply(int a, int b) { return a * b; }
現在我們定義一個函數指針,並用它來調用這兩個函數:

int main() { // 定義函數指針:指向接受兩個int、返回int的函數int (*funcPtr)(int, int); // 指向add 函數funcPtr = add; cout << "add(3, 4) = " << funcPtr(3, 4) << endl; // 輸出7 // 指向multiply 函數funcPtr = multiply; cout << "multiply(3, 4) = " << funcPtr(3, 4) << endl; // 輸出12 return 0; }
✅ 使用typedef
讓函數指針更清晰
直接寫int (*)(int, int)
比較繁瑣,可以用typedef
簡化:
typedef int (*MathOperation)(int, int); // 現在可以用MathOperation 作為類型MathOperation operation; operation = add; cout << operation(5, 6) << endl; // 輸出11 operation = multiply; cout << operation(5, 6) << endl; // 輸出30
✅ 函數指針作為參數(回調函數)
函數指針常用於實現“回調”機制。比如,我們寫一個通用的計算器函數:

int calculate(int a, int b, MathOperation op) { return op(a, b); } int main() { cout << "Add: " << calculate(10, 5, add) << endl; // 15 cout << "Multiply: " << calculate(10, 5, multiply) << endl; // 50 return 0; }
這在需要根據不同條件執行不同邏輯時非常有用。
✅ 函數指針數組(函數表)
你還可以用函數指針數組來模擬簡單的“分發”邏輯:
int subtract(int a, int b) { return a - b; } int main() { // 函數指針數組MathOperation operations[] = {add, subtract, multiply}; int a = 10, b = 3; for (int i = 0; i < 3; i) { cout << "Operation " << i << ": " << operations[i](a, b) << endl; } return 0; }
輸出:
Operation 0: 13 Operation 1: 7 Operation 2: 30
注意事項
- 函數名本身可以當作函數指針使用(會自動轉換)。
- 調用時
funcPtr(a, b)
和(*funcPtr)(a, b)
都可以,前者更常見。 - 不要將函數指針指向不匹配的函數類型,會導致未定義行為。
基本上就這些。函數指針在C 中雖然被std::function
和lambda 逐漸替代,但在性能敏感或嵌入式場景中仍然很有用。掌握它有助於理解底層機制和閱讀老代碼。
以上是C功能指針示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT
人工智慧支援投資研究,做出更明智的決策

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

InstallaC compilerlikeg usingpackagemanagersordevelopmenttoolsdependingontheOS.2.WriteaC programandsaveitwitha.cppextension.3.Compiletheprogramusingg hello.cpp-ohellotogenerateanexecutable.4.Runtheexecutablewith./helloonLinux/macOSorhello.exeonWi

使用std::system()函數可執行系統命令,需包含頭文件,傳入C風格字符串命令,如std::system("ls-l"),返回值為-1表示命令處理器不可用。

自定義分配器可用於控制C 容器的內存分配行為,1.示例中的LoggingAllocator通過重載allocate、deallocate、construct和destroy方法實現內存操作日誌記錄;2.分配器需定義value_type和rebind模板,以滿足STL容器類型轉換需求;3.分配器構造與拷貝時觸發日誌輸出,便於追踪生命週期;4.實際應用包括內存池、共享內存、調試工具和嵌入式系統;5.C 17起construct和destroy可由std::allocator_traits默認處理

C 的stack是STL中的容器適配器,遵循後進先出原則,需包含頭文件;通過push添加元素,pop移除頂部元素,top訪問棧頂,操作前應檢查是否為空,常用於表達式求值、回溯等場景。

答案是定義包含必要類型別名和操作的類。首先設置value_type、reference、pointer、difference_type和iterator_category,然後實現解引用、遞增及比較操作,最後在容器中提供begin()和end()方法以返回迭代器實例,使其兼容STL算法和範圍for循環。

創建項目目錄結構,包含CMakeLists.txt、src/和include/;2.編寫CMakeLists.txt,指定CMake版本、項目名稱、C 標準並添加可執行文件;3.使用mkdirbuild進入目錄並運行cmake..和cmake--build.進行編譯;4.通過add_executable添加多個源文件,用target_include_directories包含頭文件路徑;5.使用find_package查找外部庫並用target_link_libraries鏈接;6.通過tar

抽像類是包含至少一個純虛函數的類,不能被實例化,必須作為基類被繼承,且派生類需實現其所有純虛函數,否則仍為抽像類。 1.純虛函數通過virtual返回類型函數名()=0;聲明,用於定義接口規範;2.抽像類常用於統一接口設計,如area()、draw()等,實現多態調用;3.必須為抽像類提供虛析構函數(如virtual~Shape()=default;),確保通過基類指針正確釋放派生類對象;4.派生類繼承後需重寫純虛函數,如Rectangle和Circle分別實現area()計算各自面積;5.可通過

Theautokeywordletsthecompilerdeducevariabletypesfrominitializers,reducingverbosityandimprovingmaintainability.Itsimplifiescodewithcomplextypeslikeiteratorsandlambdas,supportsreferencesandconstqualifierstoavoidunnecessarycopies,andadaptsautomaticallyw
