RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)函數(shù)指針調(diào)用函數(shù),需不需要加星號(hào)?

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2023-09-05 17:05 ? 次閱讀

關(guān)于函數(shù)指針,一直都有一個(gè)爭(zhēng)論的話題

通過(guò)函數(shù)指針調(diào)用函數(shù),需不需要加星號(hào)?

void func()
{
}


void (*pf)() = func;
pf();
(*pf)();
同樣,獲取函數(shù)地址的時(shí)候,需不需要對(duì)函數(shù)名做取地址的操作?
void func()
{
}


void (*pf)() = func;
void(*pf)() = &func;
先來(lái)說(shuō)下結(jié)論,不管是獲取函數(shù)地址,還是通過(guò)函數(shù)指針調(diào)用函數(shù),兩種寫法都可以,就用法上來(lái)說(shuō),沒有什么區(qū)別,初學(xué)者也不必過(guò)多糾結(jié)。

先來(lái)看下獲取函數(shù)地址。 我們?cè)谥暗?a target="_blank">視頻里面也講過(guò),函數(shù)名其實(shí)就是函數(shù)的入口地址,所以很多時(shí)候直接把函數(shù)名賦值給函數(shù)指針。
void(*pf)() = func;
那加上取地址操作符又是什么意思?
void (*pf)() = &func;
C和指針這本書中這樣解釋:

初始化表達(dá)式中的 & 操作符是可選的,因?yàn)楹瘮?shù)名被使用時(shí)總是由編譯器把它轉(zhuǎn)換成函數(shù)指針,取地址操作符只是顯示的說(shuō)明了編譯器將隱式執(zhí)行的任務(wù)。

這樣看來(lái),加不加取地址好像還真有點(diǎn)區(qū)別,一個(gè)表示函數(shù),一個(gè)表示函數(shù)的地址,只不過(guò)在這個(gè)賦值運(yùn)算中,編譯器把函數(shù)名轉(zhuǎn)換成了地址。

void (*pf)() = func;  //函數(shù)
void(*pf)()=&func;//函數(shù)的地址
要說(shuō)他倆的區(qū)別,我能想到的就是結(jié)合sizeof來(lái)計(jì)算類型的長(zhǎng)度:
#include 


void test()
{


}


int main()
{
    printf("%lu
", sizeof(test));
    printf("%lu
", sizeof(&test));


    return 0;
}
在64位系統(tǒng)中,這兩個(gè)的結(jié)果一個(gè)是1,一個(gè)是8。 不過(guò)需要注意的是,很多編譯器,不支持sizeof+函數(shù)名這種寫法。 接下來(lái)就是通過(guò)函數(shù)指針調(diào)用函數(shù),需不需要在指針前面加上星號(hào)?
pf();
(*pf)();
C陷阱與缺陷這本書中也有提到:

fp是個(gè)函數(shù)指針,*fp就是該指針?biāo)赶虻暮瘮?shù),所以(*fp)()就是調(diào)用函數(shù)的方式。C標(biāo)準(zhǔn)允許程序員將上式簡(jiǎn)寫為fp(),但是一定要記住這種寫法也只是一種簡(jiǎn)寫形式。

這么看來(lái),好像加上星號(hào)更合適一些。

通過(guò)函數(shù)指針調(diào)用函數(shù),加不加星號(hào),以及獲取函數(shù)的地址,需要使用 & 運(yùn)算符,這個(gè)跟對(duì)數(shù)組名的操作還不一樣。

對(duì)數(shù)組名取地址和不取地址含義完全不一樣,使用的時(shí)候也有很大的區(qū)別。但是對(duì)函數(shù)名取地址和不取地址,使用的時(shí)候基本沒有區(qū)別。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108
  • 函數(shù)指針
    +關(guān)注

    關(guān)注

    2

    文章

    56

    瀏覽量

    3778

原文標(biāo)題:對(duì)函數(shù)名取地址

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    函數(shù)指針指針函數(shù)的概念

    不少朋友會(huì)混淆“函數(shù)指針”和“指針函數(shù)”這兩個(gè)概念,本文詳細(xì)介紹一下。
    發(fā)表于 03-09 10:49 ?1193次閱讀

    函數(shù)指針指針函數(shù)

    指針函數(shù)的聲明方法為:類型名 *函數(shù)名(函數(shù)參數(shù)列表);其中,后綴運(yùn)算符括號(hào)“()”表示這是一個(gè)函數(shù),其前綴運(yùn)算符
    發(fā)表于 01-22 19:28

    指向code區(qū)數(shù)組的指針不需要code關(guān)鍵字的聲明?

    指向code區(qū)數(shù)組的指針不需要code 關(guān)鍵字的聲明?
    發(fā)表于 11-02 06:16

    類成員函數(shù)與普通函數(shù)的區(qū)別研究

    本文的目的是研究類成員函數(shù)與普通函數(shù)之區(qū)別,以及不同調(diào)用方式之間的區(qū)別,進(jìn)而通過(guò)內(nèi)聯(lián)匯編語(yǔ)句模仿特定的調(diào)用,從而完成
    發(fā)表于 09-15 14:52 ?32次下載

    使用指針調(diào)用函數(shù)產(chǎn)生 Hard Fault

    使用指針調(diào)用函數(shù)產(chǎn)生 Hard Fault
    發(fā)表于 12-07 17:52 ?0次下載

    函數(shù)指針指針函數(shù)定義

    函數(shù)指針指針函數(shù),C語(yǔ)言學(xué)習(xí)中最容易混淆的一些概念,好好學(xué)習(xí)吧
    發(fā)表于 01-11 16:44 ?0次下載

    C語(yǔ)言指針函數(shù)函數(shù)指針詳細(xì)介紹

    C語(yǔ)言指針函數(shù)函數(shù)指針詳細(xì)介紹。。。。。。。
    發(fā)表于 03-04 15:27 ?5次下載

    c語(yǔ)言函數(shù)指針定義,指針函數(shù)函數(shù)指針的區(qū)別

     往往,我們一提到指針函數(shù)函數(shù)指針的時(shí)候,就有很多人弄不懂。下面就由小編詳細(xì)為大家介紹C語(yǔ)言中函數(shù)指針
    發(fā)表于 11-16 15:18 ?3624次閱讀

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針
    的頭像 發(fā)表于 06-29 15:38 ?1.5w次閱讀
    理解<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>、<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>數(shù)組、<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>數(shù)組的<b class='flag-5'>指針</b>

    C語(yǔ)言進(jìn)階:函數(shù)指針的概念和使用方法

    函數(shù)指針是指向函數(shù)指針變量。 通常我們說(shuō)的指針變量是指向一個(gè)整型、字符型或數(shù)組等變量,而函數(shù)
    發(fā)表于 05-02 06:17 ?5881次閱讀

    函數(shù)指針的基本概念和語(yǔ)法

    函數(shù)指針是一種非常強(qiáng)大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個(gè)函數(shù)指針的高級(jí)應(yīng)用場(chǎng)景,并貼出相應(yīng)的代碼案例和解
    的頭像 發(fā)表于 07-05 10:32 ?581次閱讀

    函數(shù)指針的五大作用

    1,回調(diào)函數(shù)機(jī)制函數(shù)指針常用于實(shí)現(xiàn)回調(diào)函數(shù)。通過(guò)函數(shù)指針
    的頭像 發(fā)表于 12-06 08:00 ?1888次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>的五大作用

    函數(shù)指針指針函數(shù)是不是一個(gè)東西?

    函數(shù)指針的本質(zhì)是指針,就跟整型指針、字符指針一樣,函數(shù)指針
    的頭像 發(fā)表于 01-03 16:35 ?525次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>和<b class='flag-5'>指針</b><b class='flag-5'>函數(shù)</b>是不是一個(gè)東西?

    函數(shù)指針與回調(diào)函數(shù)的應(yīng)用實(shí)例

    通常我們說(shuō)的指針變量是指向一個(gè)整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)。 函數(shù)指針
    的頭像 發(fā)表于 03-07 11:13 ?399次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>與回調(diào)<b class='flag-5'>函數(shù)</b>的應(yīng)用實(shí)例

    面試常考+1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它
    的頭像 發(fā)表于 08-10 08:11 ?829次閱讀
    面試???1:<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>與<b class='flag-5'>指針</b><b class='flag-5'>函數(shù)</b>、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組
    RM新时代网站-首页