一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

淺析typedef函數(shù)指針用法

單片機(jī)愛(ài)好者 ? 2018-11-02 10:38 ? 次閱讀

1.簡(jiǎn)單的函數(shù)指針的應(yīng)用

形式1:返回類(lèi)型(*函數(shù)名)(參數(shù)表)

char (*pFun)(int);

char glFun(int a){ return;}

void main()

{

pFun= glFun;

(*pFun)(2);

}

第一行定義了一個(gè)指針變量pFun。首先我們根據(jù)前面提到的“形式1”認(rèn)識(shí)到它是一個(gè)指向某種函數(shù)的指針,這種函數(shù)參數(shù)是一個(gè)int型,返回值是char類(lèi)型。只有第一句我們還無(wú)法使用這個(gè)指針,因?yàn)槲覀冞€未對(duì)它進(jìn)行賦值。

第二行定義了一個(gè)函數(shù)glFun()。該函數(shù)正好是一個(gè)以int為參數(shù)返回char的函數(shù)。我們要從指針的層次上理解函數(shù)——函數(shù)的函數(shù)名實(shí)際上就是一個(gè)指針,函數(shù)名指向該函數(shù)的代碼在內(nèi)存中的首地址

然后就是main()函數(shù)了,它的第一句您應(yīng)該看得懂了——它將函數(shù)glFun的地址賦值給變量pFun。main()函數(shù)的第二句中“*pFun”顯然是取pFun所指向地址的內(nèi)容,當(dāng)然也就是取出了函數(shù)glFun()的內(nèi)容,然后給定參數(shù)為2。

2.使用typedef更直觀(guān)更方便

形式1:typedef 返回類(lèi)型(*新類(lèi)型)(參數(shù)表)

typedef char (*PTRFUN)(int);

PTRFUN pFun;

char glFun(int a){ return;}

void main()

{

pFun= glFun;

(*pFun)(2);

}

typedef的功能是定義新的類(lèi)型。第一句就是定義了一種PTRFUN的類(lèi)型,并定義這種類(lèi)型為指向某種函數(shù)的指針,這種函數(shù)以一個(gè)int為參數(shù)并返回char類(lèi)型。后面就可以像使用int,char一樣使用PTRFUN了。

第二行的代碼便使用這個(gè)新類(lèi)型定義了變量pFun,此時(shí)就可以像使用形式1一樣使用這個(gè)變量了。

3.例子說(shuō)明

#include

#include

typedef int (*FP_CALC)(int,int);//定義一個(gè)函數(shù)指針類(lèi)型

int add(int a, int b)

{

return a + b;

}

int sub(int a, int b)

{

return a - b;

}

int mul(int a, int b)

{

return a * b;

}

int div(int a, int b)

{

return b ? a/b : -1;

}

//定義一個(gè)函數(shù),參數(shù)為op,返回一個(gè)指針,該指針類(lèi)型為擁有兩個(gè)int參數(shù)、

//返回類(lèi)型為int的函數(shù)指針。它的作用是根據(jù)操作符返回相應(yīng)函數(shù)的地址

FP_CALC calc_func(char op)

{

switch( op )

{

case '+':

return add;

case '-':

return sub;

case '*':

return mul;

case '/':

return div;

default:

return NULL;

}

return NULL;

}

//s_calc_func為函數(shù),它的參數(shù)是 op,

//返回值為一個(gè)擁有兩個(gè)int參數(shù)、返回類(lèi)型為int的函數(shù)指針

int (*s_calc_func(char op)) (int , int)

{

return calc_func(op);

}

//最終用戶(hù)直接調(diào)用的函數(shù),該函數(shù)接收兩個(gè)int整數(shù),

//和一個(gè)算術(shù)運(yùn)算符,返回兩數(shù)的運(yùn)算結(jié)果

int calc(int a, int b, char op)

{

FP_CALC fp = calc_func(op);

int (*s_fp)(int,int) = s_calc_func(op);//用于測(cè)試

assert(fp == s_fp);// 可以斷言這兩個(gè)是相等的

if(fp)

return fp(a,b);

else

return -1;

}

void main()

{

int a = 100, b = 20;

printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));

printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));

printf("calc(%d,%d, %c) = %d\n", a, b, '*', calc(a, b, '*'));

printf("calc(%d,%d, %c) = %d\n", a, b, '/', calc(a, b, '/'));

}

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

    關(guān)注

    1

    文章

    484

    瀏覽量

    70913
  • typedef
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    9643

原文標(biāo)題:來(lái)擼代碼吧-typedef函數(shù)指針用法

文章出處:【微信號(hào):gh_dae0718828df,微信公眾號(hào):gh_dae0718828df】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言typedef與#define的用法和區(qū)別

    在C語(yǔ)言編程中,typedef 和 #define是最常用語(yǔ)句,可能很多工作過(guò)幾年的工程師都沒(méi)有去深究過(guò)它們的一些用法和區(qū)別。
    發(fā)表于 10-12 10:39 ?817次閱讀

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

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

    typedef的使用【轉(zhuǎn)】

    的文本替換。用法一:typedef int (*MYFUN)(int, int); 這種用法一般用在給函數(shù)定義別名的時(shí)候上面的例子定義MYFUN 是一個(gè)
    發(fā)表于 07-27 11:06

    關(guān)于typedef用法總結(jié)

    則可行:typedef char* PCHAR;PCHAR pa, pb;這種用法很有用,特別是char* pa, pb的定義,初學(xué)者往往認(rèn)為是定義了兩個(gè)字符型指針,其實(shí)不是,而用typede
    發(fā)表于 09-25 09:11

    typedef與define的用法與區(qū)別

    typedef與define在一些用法上有一些相似之處,所以對(duì)于這方面接觸不多的朋友可能會(huì)有所混淆,下面分享一個(gè)圖,很清晰地對(duì)兩者的用法作了區(qū)分。
    發(fā)表于 08-10 13:50

    關(guān)于C++中函數(shù)指針的使用

    關(guān)于C++中函數(shù)指針的使用(包含對(duì)typedef用法的討論) (一)簡(jiǎn)單的函數(shù)指針的應(yīng)用。
    發(fā)表于 07-13 03:51

    函數(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次下載

    Typedef用法小結(jié)

    非常不錯(cuò)的文檔有著基本數(shù)據(jù)類(lèi)型結(jié)構(gòu)體enum與函數(shù)指針等等的Typedef相關(guān)用法.
    發(fā)表于 11-02 11:36 ?19次下載

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

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

    ARM的函數(shù)指針、指針函數(shù)的區(qū)別和用法

    在學(xué)習(xí)arm過(guò)程中發(fā)現(xiàn)這“指針函數(shù)”與“函數(shù)指針”容易搞錯(cuò),所以今天,我自己想一次把它搞清楚,找了一些資料,和大家的一些總結(jié),整理到此。和大家分享。
    的頭像 發(fā)表于 06-20 10:08 ?3673次閱讀

    理解函數(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ǔ)言中的typedef用法

    見(jiàn)到了typedef一些奇怪的用法,比如typedef char ARR[10]這一類(lèi)的用法,這時(shí)候一些人就會(huì)變成表情包了。究其原因是對(duì)typede
    發(fā)表于 01-13 13:36 ?0次下載
    C語(yǔ)言中的<b class='flag-5'>typedef</b>的<b class='flag-5'>用法</b>

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

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

    面試???1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開(kāi)發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它
    的頭像 發(fā)表于 08-10 08:11 ?1222次閱讀
    面試常考+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ù)組