回调函数这个是什么鬼?
這是一個(gè)同學(xué)在微信給我提問(wèn)的問(wèn)題。
要搞清楚回調(diào)函數(shù),我們首先要搞清楚函數(shù),函數(shù)其實(shí)就是一個(gè)地址,這個(gè)地址描述了這個(gè)函數(shù)在內(nèi)存中的位置。
但是函數(shù)和變量也是一樣的,有類(lèi)型,對(duì)變量來(lái)說(shuō),變量會(huì)分成各種類(lèi)型,對(duì)函數(shù)來(lái)說(shuō)也是一樣,函數(shù)會(huì)有參數(shù)和返回值,不同的參數(shù)和返回值就描述了不同的函數(shù)。
那回調(diào)函數(shù)呢?
回調(diào)函數(shù)其實(shí)是一個(gè)連鎖反應(yīng),比如你小孩生病了,這會(huì)導(dǎo)致你老婆可能不開(kāi)心,你老婆不開(kāi)心了,會(huì)連鎖反應(yīng)到你也會(huì)不開(kāi)心。
不開(kāi)心這個(gè)信心從你老婆傳遞到了你身上,你小孩就起到了函數(shù)調(diào)用的作用。
我們可以寫(xiě)個(gè)簡(jiǎn)單的代碼
代碼運(yùn)行
從項(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è)指針來(lái)做它想做的事情。
但是從C語(yǔ)言和計(jì)算機(jī)角度出發(fā),函數(shù)無(wú)非就是一個(gè)地址,我們傳遞的是一個(gè)地址,后面我們只是用了這個(gè)地址來(lái)做了我們想做的事情。
#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來(lái)修飾一個(gè)函數(shù)指針的類(lèi)型,然后我們?cè)趥鱟all_back的時(shí)候,強(qiáng)制讓它變成了一個(gè)地址,之后拿到這個(gè)地址后,再讓它變成一個(gè)函數(shù)。
寫(xiě)這個(gè)demo的意思就是想讓大家知道,函數(shù)名,其實(shí)不過(guò)是一個(gè)地址,但是,地址只是單純的地址,沒(méi)有多的含義,所以我們需要給地址加上類(lèi)型,這才是有意義的。
一個(gè)人是沒(méi)有意義的,一個(gè)人做的事情,才會(huì)讓這個(gè)人的人生有意義。
$gcc -o main *.c -lm $main call_back(),LINE=14,args=123最后,如果覺(jué)得不錯(cuò),大家順手點(diǎn)個(gè)贊,轉(zhuǎn)發(fā)就是對(duì)我最大的鼓勵(lì)和支持!
長(zhǎng)按識(shí)別二維碼關(guān)注公眾號(hào)
總結(jié)
以上是生活随笔為你收集整理的回调函数这个是什么鬼?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: C++ const限定符和auto类型说
- 下一篇: Servlet面试题归纳
