精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過函數指針調用函數,需不需要加星號?

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-09-05 17:05 ? 次閱讀

關于函數指針,一直都有一個爭論的話題

通過函數指針調用函數,需不需要加星號?

void func()
{
}


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


void (*pf)() = func;
void(*pf)() = &func;
先來說下結論,不管是獲取函數地址,還是通過函數指針調用函數,兩種寫法都可以,就用法上來說,沒有什么區別,初學者也不必過多糾結。

先來看下獲取函數地址。 我們在之前的視頻里面也講過,函數名其實就是函數的入口地址,所以很多時候直接把函數名賦值給函數指針。
void(*pf)() = func;
那加上取地址操作符又是什么意思?
void (*pf)() = &func;
C和指針這本書中這樣解釋:

初始化表達式中的 & 操作符是可選的,因為函數名被使用時總是由編譯器把它轉換成函數指針,取地址操作符只是顯示的說明了編譯器將隱式執行的任務。

這樣看來,加不加取地址好像還真有點區別,一個表示函數,一個表示函數的地址,只不過在這個賦值運算中,編譯器把函數名轉換成了地址。

void (*pf)() = func;  //函數
void(*pf)()=&func;//函數的地址
要說他倆的區別,我能想到的就是結合sizeof來計算類型的長度:
#include 


void test()
{


}


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


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

fp是個函數指針,*fp就是該指針所指向的函數,所以(*fp)()就是調用函數的方式。C標準允許程序員將上式簡寫為fp(),但是一定要記住這種寫法也只是一種簡寫形式。

這么看來,好像加上星號更合適一些。

通過函數指針調用函數,加不加星號,以及獲取函數的地址,需要使用 & 運算符,這個跟對數組名的操作還不一樣。

對數組名取地址和不取地址含義完全不一樣,使用的時候也有很大的區別。但是對函數名取地址和不取地址,使用的時候基本沒有區別。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編譯器
    +關注

    關注

    1

    文章

    1618

    瀏覽量

    49048
  • 函數指針
    +關注

    關注

    2

    文章

    56

    瀏覽量

    3775

原文標題:對函數名取地址

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    函數指針指針函數的概念

    不少朋友會混淆“函數指針”和“指針函數”這兩個概念,本文詳細介紹一下。
    發表于 03-09 10:49 ?1147次閱讀

    函數指針指針函數

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

    指向code區數組的指針不需要code關鍵字的聲明?

    指向code區數組的指針不需要code 關鍵字的聲明?
    發表于 11-02 06:16

    類成員函數與普通函數的區別研究

    本文的目的是研究類成員函數與普通函數之區別,以及不同調用方式之間的區別,進而通過內聯匯編語句模仿特定的調用,從而完成
    發表于 09-15 14:52 ?32次下載

    使用指針調用函數產生 Hard Fault

    使用指針調用函數產生 Hard Fault
    發表于 12-07 17:52 ?0次下載

    函數指針指針函數定義

    函數指針指針函數,C語言學習中最容易混淆的一些概念,好好學習吧
    發表于 01-11 16:44 ?0次下載

    C語言指針函數函數指針詳細介紹

    C語言指針函數函數指針詳細介紹。。。。。。。
    發表于 03-04 15:27 ?5次下載

    c語言函數指針定義,指針函數函數指針的區別

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

    理解函數指針函數指針數組、函數指針數組的指針

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

    C語言進階:函數指針的概念和使用方法

    函數指針是指向函數指針變量。 通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數
    發表于 05-02 06:17 ?5829次閱讀

    函數指針的基本概念和語法

    函數指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數指針的高級應用場景,并貼出相應的代碼案例和解
    的頭像 發表于 07-05 10:32 ?559次閱讀

    函數指針的五大作用

    1,回調函數機制函數指針常用于實現回調函數通過函數指針
    的頭像 發表于 12-06 08:00 ?1840次閱讀
    <b class='flag-5'>函數</b><b class='flag-5'>指針</b>的五大作用

    函數指針指針函數是不是一個東西?

    函數指針的本質是指針,就跟整型指針、字符指針一樣,函數指針
    的頭像 發表于 01-03 16:35 ?499次閱讀
    <b class='flag-5'>函數</b><b class='flag-5'>指針</b>和<b class='flag-5'>指針</b><b class='flag-5'>函數</b>是不是一個東西?

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數函數指針
    的頭像 發表于 03-07 11:13 ?373次閱讀
    <b class='flag-5'>函數</b><b class='flag-5'>指針</b>與回調<b class='flag-5'>函數</b>的應用實例

    面試常考+1:函數指針指針函數、數組指針指針數組

    在嵌入式開發領域,函數指針指針函數、數組指針指針數組是一些非常重要但又容易混淆的概念。理解它
    的頭像 發表于 08-10 08:11 ?693次閱讀
    面試常考+1:<b class='flag-5'>函數</b><b class='flag-5'>指針</b>與<b class='flag-5'>指針</b><b class='flag-5'>函數</b>、數組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數組