欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語(yǔ)言函數(shù)名與指針 c語(yǔ)言函數(shù)指針的作用

C語(yǔ)言函數(shù)指針,敲黑白,講重點(diǎn),如何定義函數(shù)指針?

學(xué)習(xí)了數(shù)組之后,我們知道數(shù)組是在內(nèi)存中申請(qǐng)一塊內(nèi)存空間;數(shù)組名代表內(nèi)存塊的首地址,通過數(shù)組名可以訪問內(nèi)存塊中的數(shù)據(jù)。

青田ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

那么,對(duì)于函數(shù),它也是存放在內(nèi)存塊中的一段數(shù)據(jù)。例如下面的函數(shù):

void func( int a )

{

printf( "in func, a = %d " , a );

}

此時(shí),定義了一個(gè)函數(shù)名是func的函數(shù)。可以如下調(diào)用該函數(shù):

func(100);

此時(shí),就進(jìn)入了func函數(shù)的函數(shù)體中執(zhí)行。可以看到, 函數(shù)名如同數(shù)組名一樣,代表函數(shù)所在內(nèi)存塊的首地址 。通過數(shù)組名可以訪問數(shù)組在內(nèi)存塊中申請(qǐng)的內(nèi)存,同理,通過函數(shù)名,可以訪問函數(shù)在內(nèi)存中存放的數(shù)據(jù)。

所以,函數(shù)名就代表了該函數(shù)在內(nèi)存塊中存放的首地址。那么,函數(shù)名是表示一個(gè)地址,就可以把這個(gè)地址值存放在某一個(gè)指針變量中,然后,通過指針變量訪問函數(shù)名指向的函數(shù)。

在C語(yǔ)言中,提供了函數(shù)指針變量,可以存放函數(shù)名表示的地址。函數(shù)指針變量的定義格式如下:

返回?cái)?shù)據(jù)類型 (*函數(shù)指針變量名)(形參列表)

對(duì)比函數(shù)的定義如下:

返回?cái)?shù)據(jù)類型 函數(shù)名(形參列表)

可以看到,函數(shù)指針變量的定義,與函數(shù)的定義格式基本一樣,唯一的區(qū)別是把“函數(shù)名”轉(zhuǎn)換為“*(函數(shù)指針變量名)”;總結(jié)如下:

(1) 使用指針降級(jí)運(yùn)算符*來定義,表示這個(gè)是一個(gè)指針。

(2) 指針降級(jí)運(yùn)算符*不可以靠近返回?cái)?shù)據(jù)類型,例如“返回?cái)?shù)據(jù)類*”就表示函數(shù)的返回類型是一個(gè)指針。那么,為了讓指針降級(jí)運(yùn)算符*能夠修飾函數(shù)指針變量,就用小括號(hào)()把指針降級(jí)運(yùn)算符*與函數(shù)指針變量名包含起來。

定義了函數(shù)指針變量之后,可以把函數(shù)名賦給函數(shù)指針變量。因?yàn)椋瘮?shù)名就表示函數(shù)在內(nèi)存塊中的首地址,所以,可以直接把一個(gè)地址賦值給函數(shù)指針變量。格式如下:

函數(shù)指針變量 = 函數(shù)名;

最終,可以通過函數(shù)指針變量調(diào)用函數(shù),調(diào)用的格式與通過函數(shù)名調(diào)用完全一樣,通過函數(shù)指針變量調(diào)用函數(shù),有如下形式:

方法1:函數(shù)指針變量(實(shí)參列表);

方法2:(*函數(shù)指針變量名)(實(shí)參列表);

很多情況下,我們更傾向于使用第一種形式,因?yàn)椋氖褂梅绞礁咏谕ㄟ^函數(shù)名調(diào)用函數(shù)。

下面根據(jù)程序測(cè)試?yán)觼砜纯丛趺礃討?yīng)用函數(shù)指針變量。

深入學(xué)習(xí),可以交個(gè)朋友,工人人人號(hào):韋凱峰linux編程學(xué)堂

程序運(yùn)行結(jié)果如下:

深入學(xué)習(xí),可以交個(gè)朋友,工人人人號(hào):韋凱峰linux編程學(xué)堂

可以看到,我們定義了func函數(shù)和函數(shù)指針變量pfunc,然后,把函數(shù)名func設(shè)置給函數(shù)指針變量pfunc,最終,通過函數(shù)指針變量pfunc調(diào)用函數(shù)。

因?yàn)楹瘮?shù)指針變量存放的就是函數(shù)名表示的地址,所以,函數(shù)指針變量與函數(shù)名一樣,可以直接通過函數(shù)指針變量調(diào)用函數(shù)。

注意:我們?cè)趯W(xué)習(xí)指針的時(shí)候,可以把一個(gè)int類型的變量地址賦值給int類型的指針;但是,不可以把int類型變量的地址,賦值給double類型的指針。這就是變量數(shù)據(jù)類型不一致的問題。

同樣的道理,定義函數(shù)的時(shí)候,函數(shù)的返回?cái)?shù)據(jù)類型和形參列表都不一樣,所以,函數(shù)指針變量能夠接收的函數(shù)名,它們定義的 函數(shù)返回?cái)?shù)據(jù)類型和形參列表必須一致 ,此時(shí),就如同變量與指針變量類型一致時(shí),才可以把變量的地址賦值給指針變量一樣。

如下是一個(gè)測(cè)試?yán)樱?/p>

深入學(xué)習(xí),可以交個(gè)朋友,工人人人號(hào):韋凱峰linux編程學(xué)堂

程序編譯結(jié)果如下:

深入學(xué)習(xí),可以交個(gè)朋友,工人人人號(hào):韋凱峰linux編程學(xué)堂

可以看到,我們把func函數(shù)的形參列表修改為double,但是,函數(shù)指針變量pfunc定義的形參列表為int類型,此時(shí),函數(shù)和函數(shù)指針變量的定義格式不一致,所以,不可以把函數(shù)名表示的地址設(shè)置給函數(shù)指針變量。我們來總結(jié)一下:

(1) 在Ubuntu系統(tǒng)中,使用GCC編譯,提示warning警告,但是,程序可以編譯通過,可以運(yùn)行。

(2) 在Windows系統(tǒng)中,使用Visual Studio工具,無(wú)法編譯該代碼,提示類型不一致。

(3) 從代碼的嚴(yán)謹(jǐn)方面來說,是不可以設(shè)置類型不一致的數(shù)據(jù)。所以,我們應(yīng)該編寫嚴(yán)謹(jǐn)?shù)拇a,函數(shù)定義的類型,與函數(shù)指針類型不一致的時(shí)候,不可以把函數(shù)名,賦值給函數(shù)指針變量。

函數(shù)指針變量的定義很重要,我們需要牢記和理解它們使用的方式。下面多舉幾個(gè)例子說明函數(shù)指針變量的定義和使用。

int func( void );

int (*pfunc)( void );

pfunc = func;

此時(shí),定義func函數(shù),它的返回值類型是int類型,形參列表是void,那么,定義pfunc函數(shù)指針變量的時(shí)候,它的返回值類型與形參列表都必須與func一樣。

char * func1( int x, int y, int x);

char * (*pfunc1)( int , int , int );

pfunc1 = func1;

char * (*pfunc1)( int x, int y, int x);

我們?cè)倏偨Y(jié)一下:

(1) 函數(shù)名表示函數(shù)在內(nèi)存塊中的首地址,可以直接把函數(shù)名賦值給函數(shù)指針變量;

(2) 定義函數(shù)指針變量的時(shí)候,函數(shù)返回?cái)?shù)據(jù)類型和形參列表必須與要指向函數(shù)的定義一致;

指針函數(shù)與函數(shù)指針(C語(yǔ)言)

上面的函數(shù)聲明又可以寫成如下形式:

讓指針標(biāo)志 * 與int緊貼在一起,而與函數(shù)名f間隔開,這樣看起來就明了些了,f是函數(shù)名,返回值類型是一個(gè)int類型的指針。

指針函數(shù)就是返回一個(gè)地址給調(diào)用者。

例1:

函數(shù)指針說的就是一個(gè)指針,但這個(gè)指針指向的是函數(shù),不是普通的基本數(shù)據(jù)類型或者類對(duì)象。

函數(shù)指針與指針函數(shù)的最大區(qū)別是:函數(shù)指針的函數(shù)名是一個(gè)指針,即函數(shù)名前面有一個(gè)指針類型的標(biāo)志型號(hào)“*”。

當(dāng)然,函數(shù)指針的返回值也可以是指針。

例2:

c語(yǔ)言函數(shù)與指針

先學(xué)指針再學(xué)函數(shù)為好。函數(shù)調(diào)用,若想通過參數(shù)帶回函數(shù)運(yùn)算結(jié)果,要用指針。函數(shù)調(diào)用,若想通過參數(shù)傳入可變大小的數(shù)組,要用指針。 這時(shí)若缺乏 指針的知識(shí),則難以學(xué)好函數(shù)的書寫。當(dāng)然,你可以先學(xué)簡(jiǎn)單的函數(shù),參數(shù)不用指針的,只通過函數(shù)返回或全局量傳遞運(yùn)算結(jié)果,只用固定大小的數(shù)組。學(xué)會(huì)后,再學(xué)指針和 用指針做參數(shù)的函數(shù)。這樣,路走得慢些,但學(xué)得可能扎實(shí)些。

c語(yǔ)言中函數(shù)名就是一個(gè)指針嗎

沒錯(cuò),函數(shù)名就像是數(shù)組名,也是指針,獨(dú)有特點(diǎn)就是①存在于代碼段、②定值(程序加載進(jìn)內(nèi)存后就不能改變了);相對(duì)的,普通的指針是可以移動(dòng)的(改變他的指向)

分享名稱:c語(yǔ)言函數(shù)名與指針 c語(yǔ)言函數(shù)指針的作用
路徑分享:http://chinadenli.net/article38/ddodipp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)App設(shè)計(jì)App開發(fā)網(wǎng)站營(yíng)銷定制開發(fā)網(wǎng)站導(dǎo)航

廣告

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

成都網(wǎng)頁(yè)設(shè)計(jì)公司