久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > ARM:函數指(zhi)針(zhen)

ARM:函數指針(zhen) 時(shi)間:2018-12-26      來源:華清(qing)遠見

首先要了解指針函(han)數與函(han)數指針的區別:

在學習C語言(yan)時候發現這“指(zhi)針(zhen)函數”與“函數指(zhi)針(zhen)”容易搞(gao)錯,最簡(jian)單的辨別方式就(jiu)是看函數名前面的指(zhi)針(zhen)*號(hao)有沒有被括號(hao)()包(bao)含,如果被包(bao)含就(jiu)是函數指(zhi)針(zhen),反(fan)之(zhi)則(ze)是指(zhi)針(zhen)函數。

下面我們(men)來具體(ti)談談他們(men)的區別以及辨別方法.

首先從他們定義來看:

1、指針(zhen)函(han)數(shu)是(shi)(shi)指帶(dai)指針(zhen)的(de)函(han)數(shu),本(ben)質是(shi)(shi)一(yi)個函(han)數(shu),函(han)數(shu)返回類型(xing)是(shi)(shi)某一(yi)類型(xing)的(de)指針(zhen)。

類(lei)型標識符 *函數(shu)(shu)名(參數(shu)(shu)表)

int *function(x,y);

首先它是(shi)一(yi)個函數(shu),只不過這(zhe)個函數(shu)的返回值(zhi)(zhi)(zhi)是(shi)一(yi)個地(di)址值(zhi)(zhi)(zhi)。函數(shu)返回值(zhi)(zhi)(zhi)必須用同類(lei)型的指針(zhen)變(bian)量來(lai)接受(shou),也就(jiu)是(shi)說,指針(zhen)函數(shu)一(yi)定有函數(shu)返回值(zhi)(zhi)(zhi),而且在主調函數(shu)中,函數(shu)返回值(zhi)(zhi)(zhi)必須賦給同類(lei)型的指針(zhen)變(bian)量。

表示:

int *fun();

int *p;

p = fun(a);

注意指(zhi)針(zhen)函數與函數指(zhi)針(zhen)表示方法的不同(tong),千萬不要(yao)混淆。

指針函數:

 當一個函(han)數(shu)聲明其(qi)返(fan)回值為一個指(zhi)針時,實際上就(jiu)是返(fan)回一個地(di)址(zhi)(zhi)給調(diao)用(yong)函(han)數(shu),以用(yong)于需(xu)要指(zhi)針或地(di)址(zhi)(zhi)的表(biao)達式(shi)中。

格式如下:

類(lei)型說明符(fu) * 函數名(參數)

當然了(le),由于(yu)返回的是(shi)一(yi)個地址(zhi),所(suo)以類型(xing)說明符(fu)一(yi)般都是(shi)int。

例如:

int *GetDate();

int *getValue(int, float);

函(han)數(shu)返回(hui)的(de)是一個地址值,經常使(shi)用(yong)在(zai)返回(hui)數(shu)組的(de)某(mou)一元素(su)地址上。

int *GetDate(int wk,int dy);

int main()

{

int wk, dy;

do

{

printf(Enter week(1-5)day(1-7)\n);

}

while(wk<1||wk>5||dy<1||dy>7);

printf(%d\n,*GetDate(wk,dy));

return 0;

}

int *GetDate(int wk, int dy)

{

static int calendar[5][7]=

{

{1,2,3,4,5,6,7},

{8,9,10,11,12,13,14},

{15,16,17,18,19,20,21},

{22,23,24,25,26,27,28},

{29,30,31,-1}

};

return &calendar[wk-1][dy-1];

}

程(cheng)序應該是(shi)很好理(li)解的(de),子函數(shu)返回的(de)是(shi)數(shu)組(zu)某元素(su)的(de)地址(zhi)。輸出的(de)是(shi)這(zhe)個(ge)地址(zhi)里的(de)值。

2、函數(shu)指針是(shi)(shi)指向函數(shu)的(de)指針變量,即本(ben)質(zhi)是(shi)(shi)一個指針變量。

int (*f) (int x); // 聲明一個函數(shu)指(zhi)針(zhen)&nbsp;

f = func;   // 將func函數的首地址(zhi)賦給指(zhi)針(zhen)f 

指(zhi)向函(han)數(shu)的指(zhi)針包含(han)了函(han)數(shu)的地址的入口地址,可以通過(guo)它來調用(yong)函(han)數(shu)。格式如下:

類型說明符 (*函數(shu)名)   (參數(shu))

其實(shi)這里(li)不(bu)能稱為函數(shu)名,應(ying)該叫(jiao)做指針的變量名。這個特殊(shu)的指針指向一個返回(hui)整型值的函數(shu)。指針的聲(sheng)明筆削和(he)它指向函數(shu)的聲(sheng)明保持一致。

 指針(zhen)名和指針(zhen)運算符(fu)外面的(de)括(kuo)號改(gai)變了默(mo)認的(de)運算符(fu)優(you)先(xian)級(ji)。如(ru)果沒有(you)圓括(kuo)號,就變成了一個返回整型指針(zhen)的(de)函數(shu)的(de)原型聲明。

例如:

void (*fptr)();

把函數的地址賦值(zhi)給函數指針,可以采用下面兩種形式:

Fptr = &Function;

fptr = Function;

取地址(zhi)(zhi)運算符&不是必需的,因為單單一個函數標(biao)識符就(jiu)標(biao)號表(biao)示了它(ta)的地址(zhi)(zhi),如果(guo)是函數調用(yong),還(huan)必須包含(han)一個圓(yuan)括號括起來的參(can)數表(biao)。

可以采用如下兩種方(fang)式來(lai)通(tong)過指針調用函數(shu):

X = (*fptr)();

X = fptr();

第(di)二(er)種格(ge)式(shi)看上去和函數(shu)調用(yong)(yong)(yong)無(wu)異。但是有些程序員傾(qing)向于使(shi)用(yong)(yong)(yong)第(di)一(yi)種格(ge)式(shi),因為它明確指(zhi)出是通過指(zhi)針而非函數(shu)名來調用(yong)(yong)(yong)函數(shu)的。

看下(xia)面這個例(li)子:

void (*funcp)();

void FileFunc();

void EditFunc();

int main()

{

funcp=FileFunc;

(*funcp)();

funcp=EditFunc;

(*funcp)();

return 0;

}

void FileFunc()

{

printf(FileFunc\n);

}

void EditFunc()

{

printf(EditFunc\n);

}

程序輸出為:

FileFunc

EditFunc

綜上所述,函(han)數(shu)指針和指針函(han)數(shu)的(de)主要的(de)區別(bie)是:

指針(zhen)函數本(ben)質(zhi)上是一個函數,函數指針(zhen)本(ben)質(zhi)上是一個指針(zhen)變量。

 

上一篇:干貨分享 javasleep

下一篇:快速排序算法詳解

熱(re)點文章推(tui)薦
華清學員就業榜單
高薪學員經驗(yan)分享
熱點新聞(wen)推薦(jian)
前臺(tai)專線:010-82525158 企業培訓(xun)洽談專(zhuan)線:010-82525379 院校(xiao)合作洽(qia)談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部