C语言函数指针(结构体函数指针)
生活随笔
收集整理的這篇文章主要介紹了
C语言函数指针(结构体函数指针)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 20211126 這篇講得好
參考文章1:C語言函數指針(指向函數的指針)詳解
函數指針的定義形式:
returnType (*pointerName)(param list);示例代碼:
#include <stdio.h>//返回兩個數中較大的一個 int max(int a, int b) {return a > b ? a : b; }int main() {int x, y, maxval;//定義函數指針int (*pmax)(int, int) = max; //也可以寫作int (*pmax)(int a, int b) = maxprintf("Input two numbers:");scanf_s("%d %d", &x, &y);maxval = (*pmax)(x, y);printf("Max value: %d\n", maxval);return 0; }運行結果:
Input two numbers:1 2 Max value: 2參考文章2:結構體中定義函數指針
c語言中,如何在結構體中實現函數的功能?把結構體做成和類相似,讓他的內部有屬性,也有方法, 這樣的結構體一般稱為協議類,提供參考: struct { int funcid; char *funcname; int (*funcint)(); /* 函數指針 int 類型*/ void (*funcvoid)(); /* 函數指針 void類型*/ }; 每次都需要初始化,比較麻煩 #include <stdio.h> typedef struct { int a; void (*pshow)(int); }TMP; void func(TMP *tmp) { if(tmp->a >10)//如果a>10,則執行回調函數。 { (tmp->pshow)(tmp->a); } } void show(int a) { printf("a的值是%d\n",a); } void main() {TMP test; test.a = 11; test.pshow = show; func(&test); } 終端顯示:a的值是11 /*一般回調函數的用法為: 甲方進行結構體的定義(成員中包括回調函數的指針) 乙方定義結構體變量,并向甲方注冊, 甲方收集N個乙方的注冊形成結構體鏈表,在某個特定時刻遍歷鏈表,進行回調。 當函數指針做為函數的參數,傳遞給一個被調用函數, 被調用函數就可以通過這個指針調用外部的函數,這就形成了回調<p>一般的程序中回調函數作用不是非常明顯,可以不使用這種形式</p><p>最主要的用途就是當函數不處在同一個文件當中,比如動態庫,要調用其他程序中的函數就只有采用回調的形式,通過函數指針參數將外部函數地址傳入來實現調用</p><p>函數的代碼作了修改,也不必改動庫的代碼,就可以正常實現調用便于程序的維護和升級</p>*/20211126 這篇講得好
分析函數指針及其兩個主要用途
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C语言函数指针(结构体函数指针)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中函数如何返回结构体?
- 下一篇: 【编译原理】让我们来构建一个简单的解释器