日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

回调函数案列(C高级)

發(fā)布時(shí)間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回调函数案列(C高级) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編譯器:vs2013

1.實(shí)質(zhì)

其實(shí)回調(diào)就是一種利用函數(shù)指針進(jìn)行函數(shù)調(diào)用的過程。 函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)

2.回調(diào)的思想

如果你有一個(gè)對(duì)數(shù)的操作,你現(xiàn)在還不知道是對(duì)它做加還是乘,還是別的什么運(yùn)算。這個(gè)時(shí)候就可以定一個(gè)標(biāo)準(zhǔn)的函數(shù)框架,在調(diào)用的時(shí)候,將我要用的那個(gè)函數(shù)名作為參數(shù)傳入,則進(jìn)行相應(yīng)的操作。

3.c代碼

3.1 Callback01.c

打印任意類型的數(shù)組,先打印int類型,后打印自定義的結(jié)構(gòu)體類型

#include <stdlib.h> #include <stdio.h> #define _CRT_SECURE_NO_WARNINGS //INT回調(diào) void myPrintInt(void *data) {int *num = data;printf("%d\n", *num); }//void *arr萬能指針,eleSize類型大小 //void(*myPrint)(void * data) void printArray(void *arr, int eleSize, int len, void(*myFunc)(void * data)) {char *p = arr;for (int i = 0; i < len; i++){char *eleArr = p + i*eleSize;//數(shù)組每一層的地址//printf("%d\n", *(int *)eleArr);%d確定不了,用回調(diào)函數(shù)myFunc(eleArr);} } //打印數(shù)組 void test01() {int arr[5] = { 1, 2, 3, 4, 5 };int len = sizeof(arr) / sizeof(int);printArray(&arr, sizeof(int), len,myPrintInt); }//打印自定義結(jié)構(gòu)體 struct Person {char name[64];int age; }; //結(jié)構(gòu)體回調(diào) void myPrintPerson(void *data) {struct Person *p = data;printf("name:%s age:%d\n", p->name, p->age); } void test02() {struct Person pArray[] = { { "aaa", 18 }, { "bbb", 19 }, { "ccc", 20 }, { "ddd", 21 } };int len = sizeof(pArray) / sizeof(struct Person);//幾個(gè)賦值結(jié)構(gòu)體4printArray(&pArray, sizeof(struct Person), len, myPrintPerson);} int main() {test01();test02();system("pause");return 0; }

3.2 結(jié)果顯示

1 2 3 4 5 name:aaa age:18 name:bbb age:19 name:ccc age:20 name:ddd age:21 請(qǐng)按任意鍵繼續(xù). . .

3.3 Callback02.c

#include <stdlib.h> #include <stdio.h> #define _CRT_SECURE_NO_WARNINGS struct Person {char name[64];int age; };//回調(diào) int myComparePerson(void *data1, void *data2) {//指針類型轉(zhuǎn)換struct Person *p1 = data1;struct Person *p2 = data2;//strcmp() 會(huì)根據(jù) ASCII 編碼依次比較 str1 和 str2 的每一個(gè)字符if ((strcmp(p1->name, p2->name) == 0) && (p1->age == p2->age)){return 1;}elsereturn 0;}//int myFind(void *arr, int eleSize, int len, void *data, void(*myCompare)(void *, void *)) //arr數(shù)組首地址 eleSize元素占的內(nèi)存空間 data要查找元素的首地址 int myFind(void *arr, int eleSize, int len, void *data, int(*myCompare)(void *, void *)) {char *p = arr;for (int i = 0; i < len; i++){char *eleArr = p + i*eleSize;//每個(gè)元素的首地址//比較里面的元素是否相同if (myCompare(eleArr, data)){return 1;}}return 0; }void test04() {struct Person pArray[] = { { "aaa", 18 }, { "bbb", 19 }, { "ccc", 20 }, { "ddd", 21 }, { "eee", 22 } };struct Person p = { "aaa", 18 };//需要查找的int len = sizeof(pArray) / sizeof(struct Person);//幾個(gè)賦值結(jié)構(gòu)體4//printArray(&pArray, sizeof(struct Person), len, myPrintPerson);int return_value = myFind(&pArray, sizeof(struct Person), len, &p, myComparePerson);//判斷if (return_value){printf("Find the element!");}else{printf("Did not find the element");} }int main() {test04();system("pause");return 0; }

3.4 結(jié)果顯示

Find the element!請(qǐng)按任意鍵繼續(xù). . .

總結(jié)

以上是生活随笔為你收集整理的回调函数案列(C高级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。