溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C中聲明指向函數(shù)指針的方法

發(fā)布時(shí)間:2020-08-27 10:38:34 來(lái)源:億速云 閱讀:228 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹C中聲明指向函數(shù)指針的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

在C中,與普通數(shù)據(jù)指針(int *,char *等)一樣,還可以聲明指向函數(shù)的指針,即函數(shù)指針。那么如何聲明?

C中聲明指向函數(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; 
}

輸出:

C中聲明指向函數(shù)指針的方法

說(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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI