c語(yǔ)言函數(shù)接收指針 c語(yǔ)言接收函數(shù)返回值

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

/*

成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供鞏留網(wǎng)站建設(shè)、鞏留做網(wǎng)站、鞏留網(wǎng)站設(shè)計(jì)、鞏留網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、鞏留企業(yè)網(wǎng)站模板建站服務(wù),十余年鞏留做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

函數(shù)指針,關(guān)鍵是后面兩個(gè)字“指針”,顧名思義,是一個(gè)指向函數(shù)的指針

原理:函數(shù)在創(chuàng)建好了后,函數(shù)的代碼會(huì)在內(nèi)存中占有個(gè)位置,這時(shí)我們創(chuàng)造一個(gè)指針來(lái)指向這個(gè)地址,這個(gè)指針就叫函數(shù)指針

函數(shù)指針不可以移動(dòng),想要移動(dòng)指針的位置來(lái)指向函數(shù)的下一個(gè)指令的想法是錯(cuò)誤的

函數(shù)指針的要求,

1,首先這個(gè)指針,要和函數(shù)的返回類(lèi)型一樣

2,指針的*和名字,要用小括號(hào)括起來(lái)//不括起來(lái)就是指針函數(shù)了,意思就變成,函數(shù)返回一個(gè)指針了

3,最右邊的小括號(hào)里形參位置的類(lèi)型,形參的個(gè)數(shù),也要和函數(shù)定義時(shí)的形參一致,只要類(lèi)型,不要形參名即可,

但是加上形參名也可以,沒(méi)毛病,看上去也更清晰

*/

#include

void swapchar(char *a, char *b)

{

char t;

t = *a;

*a = *b;

*b = t;

}

void swapchar2(char * a2, char * b2)

{

printf("this is swapchar2");

}

int main(void)

{

char chf = 'a', chg = 'j';

void(*p)(char * a, char * b);//定義函數(shù)指針、形參名字a、b可有可無(wú),但有的話(huà)看上去更清晰,只要函數(shù)定義的類(lèi)型、參數(shù)類(lèi)型、以及參數(shù)個(gè)數(shù),與這個(gè)指針一致,那么這個(gè)指針p,就可以指向它

p = swapchar;//p指針接管swapchar函數(shù),只要給函數(shù)名字,就可以給過(guò)去了

printf("chf=%c,chg=%c ", chf, chg);

p(chf, chg);

printf("chf=%c,chg=%c ", chf, chg);

p = swapchar2;//這里把swapchar2函數(shù)的地址,給了p,這時(shí)p從swapchar地址,轉(zhuǎn)移到了swapchar2這里。

p(chf,chg);

return 0;

}

在C語(yǔ)言中,指向函數(shù)的指針怎么調(diào)用函數(shù)?

1樓感覺(jué)對(duì)函數(shù)指針不是很了解,就不評(píng)論了. 2樓的基本還可以,但是int (*p)(),然后讓它指向max函數(shù),一個(gè)包含兩個(gè)未知量的函數(shù),這在后來(lái)的標(biāo)準(zhǔn)c里面是不支持的好像. 3樓吧,那么多*,感覺(jué)有點(diǎn)不大對(duì). *是取內(nèi)容,連著那么* ,我沒(méi)試過(guò),沒(méi)有多少意義至少.他11級(jí)了,應(yīng)該也不會(huì)怎么有錯(cuò),你可以試試(我不打算加那么多*, 就不調(diào)試了).

程序里面對(duì)函數(shù)的調(diào)用,就是通過(guò)函數(shù)的入口地址,然轉(zhuǎn)入函數(shù). 這樣的話(huà),函數(shù)指針的意義就明顯了.函數(shù)指針指向了函數(shù)的入口,即函數(shù)指針里是函數(shù)的入口地址. 指針不能指向函數(shù)這種說(shuō)法肯定是不對(duì)的.話(huà)說(shuō)回來(lái),1樓的老兄可能看錯(cuò)書(shū)了,或者記錯(cuò)了.

類(lèi)型匹配很重要,二樓的聲明和使用不一致,這在老版的編譯器里也是支持的.那時(shí)候ANSI標(biāo)準(zhǔn)還沒(méi)有制定出來(lái).現(xiàn)在而言,這種定義應(yīng)該不被支持了才是.

那個(gè)聲明應(yīng)該如下:

int (*p)(int , int);

這樣才能指向

int name(int,int)型的函數(shù).么有實(shí)驗(yàn)過(guò),但按這種寫(xiě)法是不錯(cuò)的肯定.

三樓那個(gè)********p,怎么都覺(jué)得不對(duì).

c語(yǔ)言指針問(wèn)題?

C語(yǔ)言的大多語(yǔ)法都是簡(jiǎn)單易懂的,這常常會(huì)給初學(xué)者一種“別人都說(shuō)C語(yǔ)言難,我看也不過(guò)如此”的感覺(jué)。但是這種感覺(jué)常常會(huì)停止在初學(xué)者學(xué)到指針時(shí),這是一些讀者跟我說(shuō)的。

鑒于很多C語(yǔ)言初學(xué)者都覺(jué)得指針?lè)浅ky,

小明定義了一個(gè)C語(yǔ)言函數(shù) int f(int * ),為什么 f(5) 不能正常工作呢?

如果希望傳遞 5 給函數(shù) f(),在C99中,可以使用下面這種方法:

f( (int[]){5} );

上面這行C語(yǔ)言代碼相當(dāng)于定義了一個(gè)數(shù)組,并且數(shù)組只有一個(gè)元素 5,函數(shù) f() 接收到的參數(shù)是該數(shù)組,只不過(guò)這一過(guò)程中的數(shù)組名沒(méi)有“顯示”。

拋開(kāi)C99的這個(gè)特性,C語(yǔ)言調(diào)用 f(5) 就不能這么寫(xiě)了,而是需要借助變量:

int five = 5;

f(five);

在C語(yǔ)言中,接受某個(gè)值指針的函數(shù)是有可能通過(guò)該指針修改該值的(即使程序員無(wú)此打算,C語(yǔ)言還是會(huì)一直這么認(rèn)為),因此只有變量才能勝任。在C語(yǔ)言中,常數(shù)是只讀的,只能作為右值, 運(yùn)算符是不能處理常數(shù) 5 的,f(five) 會(huì)引發(fā)編譯錯(cuò)誤。

f(five) 會(huì)引發(fā)編譯錯(cuò)誤

表達(dá)式 * p++ 增加了 p 指向的數(shù)值,還是指針 p 本身?

C語(yǔ)言中的 ++ 和 — 運(yùn)算符的優(yōu)先級(jí)高于 * 運(yùn)算符,所以 *p++ 其實(shí)就相當(dāng)于 *(p++)。顯然,++ 運(yùn)算符增加的是指針 p 本身的值,不過(guò)在指針 p 自增之前,*p++會(huì)先返回 p 指向的值。如果希望 ++ 運(yùn)算符增加 p 指向的值,應(yīng)該使用括號(hào)運(yùn)算符:(*p)++。

小明想使用指針操作數(shù)組里的數(shù)值,下面這段C語(yǔ)言代碼有什么問(wèn)題?

小明預(yù)計(jì)程序會(huì)輸出 3,但是程序卻輸出了“垃圾值”,他的C語(yǔ)言代碼如下,請(qǐng)看:

int array[5], i, *ip;

for(i = 0; i 5; i++)

array[i] = i;

ip = array;

printf("%d\n", *(ip + 3 * sizeof(int)));

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

加個(gè)注釋吧:

/*

函數(shù)x

參數(shù)1:?類(lèi)型?int?未標(biāo)注形參

參數(shù)2:?類(lèi)型?void(*)(int)?形參y

返回值:?類(lèi)型?void(*)(int)

*/

void(*x(int,void(*y)(int)))(int);

其中 “void(*)(int)" 代表接收一個(gè)int參數(shù)返回類(lèi)型為void的函數(shù)指針類(lèi)型,比如:

void?foo(int?i)

{

printf("%d",?i);

}

所以你可以這樣調(diào)用它:

...

void?(*pf)(int);

int?i?=?0;

pf?=?x(i,?foo);

...

新聞名稱(chēng):c語(yǔ)言函數(shù)接收指針 c語(yǔ)言接收函數(shù)返回值
瀏覽地址:http://bm7419.com/article22/ddejcjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、Google網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、網(wǎng)站改版網(wǎng)站營(yíng)銷(xiāo)

廣告

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

商城網(wǎng)站建設(shè)