我們知道調(diào)用一個(gè)函數(shù)的時(shí)候可以給其傳遞參數(shù),這個(gè)參數(shù)可以是變量,也可以是變量的引用或者指針。那如果想傳遞另一個(gè)函數(shù)可以做到嗎?C提供了函數(shù)指針這一用法來(lái)完成這個(gè)需求。
函數(shù)在內(nèi)存中是占據(jù)一片空間的,有空間自然有地址,而程序中調(diào)用函數(shù)就是通過(guò)函數(shù)名找到內(nèi)存中該函數(shù)的首地址從而調(diào)用。那么這個(gè)首地址就可以被存放在一個(gè)指針中,以后程序除了直接通過(guò)函數(shù)名找到該函數(shù)外,也可以通過(guò)這個(gè)指針來(lái)找到目標(biāo)函數(shù)。這樣的指針就叫做函數(shù)指針。
函數(shù)指針的形式:returnType (*func)(param list)
returnType是函數(shù)的返回類型,func是指向目標(biāo)函數(shù)的函數(shù)指針,param list是函數(shù)的參數(shù)列表。
看一個(gè)例子:
#include//返回兩個(gè)數(shù)中較大的一個(gè)
int max(int a, int b){
return a>b ? a : b;
}
int main(){
int x, y, maxval;
//定義函數(shù)指針
int (*pmax)(int, int) = max; //也可以寫作int (*pmax)(int a, int b)
printf("Input two numbers:");
scanf("%d %d", &x, &y);
maxval = (*pmax)(x, y);
printf("Max value: %d\n", maxval);
return 0;
}
由此可以看出來(lái),函數(shù)指針的形式其實(shí)和函數(shù)的聲明式非常像,其參數(shù)列表既可以是參數(shù)類型和參數(shù)名的組合,也可以只保留參數(shù)類型。
2.void*(* func)(void *)有了上面的知識(shí)基礎(chǔ),來(lái)解讀void*(* func)(void *)就比較好理解了。該問(wèn)題來(lái)自于線程創(chuàng)建函數(shù)pthread_create。
線程操作API之線程創(chuàng)建函數(shù)原型:int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(* func)(void *),void *arg)
該參數(shù)的意思為func是該線程要執(zhí)行的目標(biāo)函數(shù)的函數(shù)指針,返回值是一個(gè)void類型指針,arg指向一個(gè)結(jié)構(gòu)體,該結(jié)構(gòu)體保存著目標(biāo)函數(shù)的參數(shù)。
參考:C語(yǔ)言函數(shù)指針(指向函數(shù)的指針)詳解
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:C++函數(shù)指針以及對(duì)void*(*func)(void*)的解讀-創(chuàng)新互聯(lián)
新聞來(lái)源:http://aaarwkj.com/article34/gehpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、微信公眾號(hào)、云服務(wù)器、App設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容