中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

c語言函數(shù)指針博客 c語言函數(shù)指針和指針函數(shù)

C語言中的函數(shù)指針

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

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的漳縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

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

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

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

注2:函數(shù)括號(hào)中的形參可有可無,視情況而定。

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

例一、

#includestdio.h

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

void 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);

}

ptr是指向函數(shù)的指針變量,所以可把函數(shù)max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來調(diào)用該函數(shù),實(shí)際上ptr和max都指向同一個(gè)入口地址,不同就是ptr是一個(gè)指針變量,不像函數(shù)名稱那樣是死的,它可以指向任何函數(shù),就看你想怎么做了。在程序中把哪個(gè)函數(shù)的地址賦給它,它就指向哪個(gè)函數(shù)。而后用指針變量調(diào)用它,因此可以先后指向不同的函數(shù)。不過注意,指向函數(shù)的指針變量沒有++和--運(yùn)算,用時(shí)要小心。

指針函數(shù)是指返回值是指針的函數(shù),即本質(zhì)是一個(gè)函數(shù)。我們知道函數(shù)都有返回類型(如果不返回值,則為無值型),只不過指針函數(shù)返回類型是某一類型的指針。

其定義格式如下所示:

返回類型標(biāo)識(shí)符*返回名稱(形式參數(shù)表)

{ 函數(shù)體}

返回類型可以是任何基本類型和復(fù)合類型。返回指針的函數(shù)的用途十分廣泛。事實(shí)上,每一個(gè)函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個(gè)入口地址,該地址相當(dāng)于一個(gè)指針。比如函數(shù)返回一個(gè)整型值,實(shí)際上也相當(dāng)于返回一個(gè)指針變量的值,不過這時(shí)的變量是函數(shù)本身而已,而整個(gè)函數(shù)相當(dāng)于一個(gè)“變量”。

其實(shí)還是指針,只是指向的內(nèi)容和聲明方法不同而已

C語言函數(shù)指針定義

在最上面加一句這樣的定義

typedef void*(*pFn)();

pFn可以這樣理解:首先pFn是一個(gè)指針,指針指向一個(gè)函數(shù)(或者說pFn是一個(gè)函數(shù)指針),此函數(shù)返回一個(gè)無類型的指針。最終定義的變量及函數(shù)都是指針罷了,不過是指針的類型不同。所以在編譯時(shí)會(huì)有警告,說指針類型不匹配。但對(duì)于程序來講,都是可以在特定的上下文中使用的。

運(yùn)行結(jié)果是

t1,t2交替出現(xiàn)。

其實(shí)void也可以換為其它的類型如int, double等

又想到一個(gè)很好的辦法:

這次編譯不會(huì)有警告,運(yùn)行也不會(huì)出錯(cuò)。

示例代碼如下所示

#include stdio.h

long t1();

long t2();

int main()

{

long(*fn)()= (long (*)()) t1 ;

while(1){

fn = (long (*)()) fn();

}

}

long t1()

{

printf("t1\n");

return (long)t2 ;

}

long t2()

{

printf("t2\n");

return (long)t1 ;

}

C語言,不定參數(shù)的函數(shù)指針問題

很巧我現(xiàn)在正好也有實(shí)現(xiàn)這樣函數(shù)的需求,其實(shí)就是看了C語言可變參數(shù)函數(shù)的相關(guān)資料,你就差不多知道怎么實(shí)現(xiàn)了。

只不過其中有一個(gè)很重要的大坑,只要邁過去就沒問題。我是試了半天才明白的:

如果參數(shù)是char或float類型,這樣的參數(shù)放在可變參數(shù)部分的話,編譯器是會(huì)默認(rèn)把它們的類型提升為相應(yīng)的“全”類型的:char提升為int,float提升為double。如果你沒注意這一點(diǎn)就會(huì)出現(xiàn)錯(cuò)誤。當(dāng)然可以通過指針的類型轉(zhuǎn)換來避免。

先簡略地點(diǎn)一下,等我在CSDN博客里詳細(xì)地寫一寫心得吧。雖然是N年前的問題估計(jì)樓主早就自己解決了,但希望能幫到其他人:)

分享名稱:c語言函數(shù)指針博客 c語言函數(shù)指針和指針函數(shù)
本文網(wǎng)址:http://www.rwnh.cn/article0/ddosgoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、App開發(fā)、網(wǎng)站制作關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化

廣告

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

外貿(mào)網(wǎng)站建設(shè)
辽中县| 泰宁县| 临颍县| 老河口市| 孟津县| 九江县| 延津县| 福鼎市| 盐山县| 大兴区| 章丘市| 黄平县| 丹江口市| 黔江区| 南皮县| 二连浩特市| 湘潭市| 同江市| 镇坪县| 清苑县| 德惠市| 台前县| 张家港市| 炎陵县| 甘谷县| 新安县| 大洼县| 新兴县| 南澳县| 阿坝县| 美姑县| 惠安县| 瓦房店市| 台前县| 余庆县| 灵武市| 尖扎县| 华宁县| 缙云县| 隆化县| 海盐县|