您好,登錄后才能下訂單哦!
這篇文章主要介紹C中聲明指向函數(shù)指針的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
在C中,與普通數(shù)據(jù)指針(int *,char *等)一樣,還可以聲明指向函數(shù)的指針,即函數(shù)指針。那么如何聲明?
如何聲明指向函數(shù)的指針?
首先我們了解一下如何在C中創(chuàng)建一個(gè)指向整數(shù)的指針?
int * ptrInteger; / *我們?cè)趇nt和ptrInteger之間放置了一個(gè)*運(yùn)算符來(lái)創(chuàng)建指針。* /
這里的ptrInteger就是一個(gè)指向整數(shù)的指針。如果可以理解這一點(diǎn),那么從邏輯上講,我們?cè)诼暶髦赶蚝瘮?shù)的指針時(shí)應(yīng)該沒(méi)有任何問(wèn)題了。
接下來(lái)讓我們來(lái)看看如何聲明一個(gè)函數(shù)?例如:
int foo(int);
這里的foo就是一個(gè)返回并接受一個(gè)int類(lèi)型參數(shù)的函數(shù)。因此,邏輯上會(huì)被認(rèn)為,只要在int和foo(int)之間放置一個(gè)*運(yùn)算符就應(yīng)該創(chuàng)建一個(gè)指向函數(shù)的指針,即:
int * foo(int);
但,這是不對(duì)的;因?yàn)椋琧運(yùn)算符優(yōu)先級(jí)在這里也起作用,運(yùn)算符()將優(yōu)先于運(yùn)算符*。上面的聲明意味著:一個(gè)函數(shù)foo,其中一個(gè)參數(shù)為int類(lèi)型,返回值為int *即整數(shù)指針;這不是我們想要的,所以我們還需要考慮c運(yùn)算符優(yōu)先級(jí)。
因此,我們必須以某種方式將*運(yùn)算符與foo綁定。為此,我們將使用()運(yùn)算符來(lái)更改C運(yùn)算符的默認(rèn)優(yōu)先級(jí)。例:
int (*foo)(int);
*運(yùn)算符與foo一起使用,而foo是函數(shù)名,這樣就聲明來(lái)一個(gè)指向函數(shù)的指針了。
函數(shù)指針的使用示例:
#include <stdio.h> // 具有int參數(shù)和void返回類(lèi)型的普通函數(shù) void fun(int a) { printf("a值為: %d\n", a); } int main() { // fun_ptr 是指向函數(shù)fun()的指針 void (*fun_ptr)(int) = &fun; /* 相當(dāng)于下面兩行 void (*fun_ptr)(int); fun_ptr = &fun; */ //使用fun_ptr調(diào)用fun() (*fun_ptr)(10); return 0; }
輸出:
說(shuō)明:
1、與普通指針不同,函數(shù)指針指向代碼,而不是數(shù)據(jù)。通常,函數(shù)指針存儲(chǔ)可執(zhí)行代碼的開(kāi)始。
2、與普通指針不同,我們不使用函數(shù)指針?lè)峙浣獬峙鋬?nèi)存。
3、在函數(shù)指針中,函數(shù)的名稱(chēng)也可用于獲取函數(shù)的地址。
4、與普通數(shù)據(jù)指針一樣,函數(shù)指針可以作為參數(shù)傳遞,也可以從函數(shù)返回。
以上是C中聲明指向函數(shù)指針的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。