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