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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

回调函数这个是什么鬼?

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

這是一個(gè)同學(xué)在微信給我提問的問題。

要搞清楚回調(diào)函數(shù),我們首先要搞清楚函數(shù),函數(shù)其實(shí)就是一個(gè)地址,這個(gè)地址描述了這個(gè)函數(shù)在內(nèi)存中的位置。

但是函數(shù)和變量也是一樣的,有類型,對(duì)變量來說,變量會(huì)分成各種類型,對(duì)函數(shù)來說也是一樣,函數(shù)會(huì)有參數(shù)和返回值,不同的參數(shù)和返回值就描述了不同的函數(shù)。

那回調(diào)函數(shù)呢?

回調(diào)函數(shù)其實(shí)是一個(gè)連鎖反應(yīng),比如你小孩生病了,這會(huì)導(dǎo)致你老婆可能不開心,你老婆不開心了,會(huì)連鎖反應(yīng)到你也會(huì)不開心。

不開心這個(gè)信心從你老婆傳遞到了你身上,你小孩就起到了函數(shù)調(diào)用的作用。

我們可以寫個(gè)簡單的代碼

#include <stdio.h> #include <unistd.h> #include <stdlib.h>void?func(void?*f(int),int?parm) {f(parm); }void?call_back(int?parm) {printf("%s(),LINE=%d,args=%d\n",__FUNCTION__,__LINE__,parm); }int?main(void) {func(call_back,123);return?0; }

代碼運(yùn)行

$main call_back(),LINE=12,args=123

從項(xiàng)目角度上看,callback是一個(gè)人實(shí)現(xiàn),然后func里面會(huì)是另一個(gè)人實(shí)現(xiàn),我們?cè)趍ain里面會(huì)把回調(diào)的指針注冊(cè)給func,等某個(gè)時(shí)機(jī)成熟的時(shí)候,func就會(huì)調(diào)用這個(gè)指針來做它想做的事情。

但是從C語言和計(jì)算機(jī)角度出發(fā),函數(shù)無非就是一個(gè)地址,我們傳遞的是一個(gè)地址,后面我們只是用了這個(gè)地址來做了我們想做的事情。

#include?<stdio.h> #include?<unistd.h> #include?<stdlib.h>typedef?void?(*type_func)(int);void?func(u_int64_t* ptr,int?parm) {((type_func)ptr)(parm); }void?call_back(int?parm) {printf("%s(),LINE=%d,args=%d\n",__FUNCTION__,__LINE__,parm); }int?main(void) {func((u_int64_t*)call_back,123);return?0; }

這段代碼里面的信息就會(huì)比較多了,一個(gè)是用了typedef來修飾一個(gè)函數(shù)指針的類型,然后我們?cè)趥鱟all_back的時(shí)候,強(qiáng)制讓它變成了一個(gè)地址,之后拿到這個(gè)地址后,再讓它變成一個(gè)函數(shù)。

寫這個(gè)demo的意思就是想讓大家知道,函數(shù)名,其實(shí)不過是一個(gè)地址,但是,地址只是單純的地址,沒有多的含義,所以我們需要給地址加上類型,這才是有意義的。

一個(gè)人是沒有意義的,一個(gè)人做的事情,才會(huì)讓這個(gè)人的人生有意義。

$gcc -o main *.c -lm $main call_back(),LINE=14,args=123

最后,如果覺得不錯(cuò),大家順手點(diǎn)個(gè)贊,轉(zhuǎn)發(fā)就是對(duì)我最大的鼓勵(lì)和支持!

長按識(shí)別二維碼關(guān)注公眾號(hào)

總結(jié)

以上是生活随笔為你收集整理的回调函数这个是什么鬼?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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