c語言為什么使用函數(shù)指針 c語言為什么使用函數(shù)指針不變

c語言函數(shù)指針的作用。

C語言中函數(shù)指針與普通指針沒什么差別,只是指向的內(nèi)容不同而已。主要作用:

在興化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站制作,興化網(wǎng)站建設(shè)費(fèi)用合理。

1、實(shí)現(xiàn)面向?qū)ο缶幊讨械亩鄳B(tài)性。

2、回調(diào)函數(shù)。

函數(shù)指針是指向函數(shù)的指針變量。因此“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。

C在編譯時(shí),每一個(gè)函數(shù)都有一個(gè)入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂?。有了指向函?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類型變量一樣,在這些概念上是大體一致的。

函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。

c語言中函數(shù)指針是什么 有什么用 舉個(gè)實(shí)例

函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。

函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。

函數(shù)指針的聲明方法為:

返回值類型 ( *?指針變量名) ([形參列表]);

如:

int func(int x); /* 聲明一個(gè)函數(shù) */

int (*f) (int x); /* 聲明一個(gè)函數(shù)指針 */

f=func; /* 將func函數(shù)的首地址賦給指針f */

或者使用下面的方法將函數(shù)地址賦給函數(shù)指針:

f = func;

賦值時(shí)函數(shù)func不帶括號,也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。

下面的程序說明了函數(shù)指針調(diào)用函數(shù)的方法:

#includestdio.h

int?max(int?x,int?y){return?(xy??x:y);}

int?main()

{

int?(*ptr)(int,?int);

int?a,?b,?c;

ptr?=?max;

scanf("%d%d",?a,?b);

c?=?(*ptr)(a,b);

printf("a=%d,?b=%d,?max=%d",?a,?b,?c);

return?0;

}

c語言中,要用函數(shù)直接調(diào)用就好啦。為什么還要用指針???

函數(shù)的調(diào)用必須是已知文件名的。如果你寫一個(gè)系統(tǒng)的某一層,不知道其他層的內(nèi)部情況,這時(shí)候用指針傳遞函數(shù)最合適。還有,結(jié)構(gòu)體里包含指向函數(shù)的指針,就相當(dāng)于一個(gè)簡單的“對象”了。

看看linux內(nèi)核里各接口的定義。函數(shù)指針的使用使的內(nèi)核可以很多人同時(shí)開發(fā),并且大家只需要知道相應(yīng)的接口就可以了。這套框架,離不開函數(shù)指針。

求解釋c語言函數(shù)指針的作用

上面的話是有道理的。只是,要真的體會(huì)這些名詞,需要你親歷躬行,一個(gè)“百度知道”是很難讓你真正體會(huì)并理解的。國人一些教科書也不負(fù)責(zé)任,人云亦云的說這些話,但很少能透徹講解。我小試一下。

1. 便于分層設(shè)計(jì):函數(shù)指針是引用,是間接層,或曰隔離層。它輸出到上層,給上層用戶用。函數(shù)實(shí)體是實(shí)現(xiàn),在下層,給開發(fā)者用,實(shí)現(xiàn)者(軟件工程師)關(guān)注。這就是簡單的分層的概念了。上層用戶想讓一個(gè)函數(shù)所做的東西會(huì)變化時(shí),我們只需要改變底層實(shí)現(xiàn),并用函數(shù)指針指向新的實(shí)現(xiàn)就行了。

再精煉一下分層:分層的核心是對接口進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。函數(shù)指針的作用就是提供不同實(shí)現(xiàn)的統(tǒng)一接口。

2. 利于系統(tǒng)抽象:只有存在多個(gè)類似的實(shí)體需要模擬、操作或控制時(shí)(這種情況很多)才需要抽象。多個(gè)類似的實(shí)體就是對象,抽象的結(jié)果就是類。在C里邊,可以用函數(shù)指針數(shù)組完成這種抽象。如, fopen 就是一個(gè)例子。他可以打開文件。C里面將磁盤文件、串口、USB等諸多設(shè)備抽象為文件。

3. 降低耦合度以及使接口與實(shí)現(xiàn)分開:第1條中的解釋已經(jīng)說明了這一點(diǎn)。

再具體一下:

我曾搭建過一個(gè)嵌入式平臺(tái)。其中的設(shè)備操作(硬件驅(qū)動(dòng))采用了多組函數(shù)指針數(shù)據(jù),并進(jìn)行了簡單的封裝,其結(jié)果是:

業(yè)務(wù)軟件使用函數(shù)指針數(shù)組的封裝函數(shù)訪問設(shè)備。這個(gè)封裝可展示為:

int DevOpen(char *strDevName);

int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong);

int Read(int DevID, char* DataTo, int StartDevAddr, int DataLong);

int DevClose(int DevID);

這組抽象出來的函數(shù),是一組語義清晰且穩(wěn)定的上層接口,為上層的業(yè)務(wù)開發(fā)團(tuán)隊(duì)使用。底層的驅(qū)動(dòng)層,各自實(shí)現(xiàn)自己的設(shè)備打開、讀、寫及關(guān)閉代碼,然后,注冊自己的設(shè)備到系統(tǒng)列表里。上層業(yè)務(wù)接可以使用了。期間的耦合在這里:

int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong)

{

/* Error detecting. */

return DevWrite[ DevID ]( char* DataFrom, int StartDevAddr, int DataLong );

}

其中,DevWrite[ DevID ]就是一個(gè)函數(shù)指針數(shù)組:

int (*DevWrite)[ MAX_DEV_NUM ]( char*,int,int ) = {0};

里面放的就是多個(gè)設(shè)備的寫的操作。其中包括:UART,RTC,WatchDog。EEPROM,DigitalInput,DigitalOutput,Key,LCD,LED。

好了。說的太多了。如需要學(xué)習(xí),可郵件livefuture@163點(diǎn)抗 。

但愿對你有所幫助。

網(wǎng)站名稱:c語言為什么使用函數(shù)指針 c語言為什么使用函數(shù)指針不變
文章來源:http://muchs.cn/article24/ddcgece.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、網(wǎng)站收錄、外貿(mào)建站、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)