久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

指針作為函數(shù)參數(shù)

 ldjsld 2016-07-31

指針作為函數(shù)參數(shù)

大多數(shù)C程序員開始使用指針時(shí)是用它們實(shí)現(xiàn)函數(shù)的參數(shù),所謂可變參數(shù),。為了理解可變參數(shù)是如何工作的,,我們看看在C語(yǔ)言中如何執(zhí)行一個(gè)交換函數(shù)。要執(zhí)行一個(gè)交換函數(shù),,您要做的是引入兩個(gè)變量,,讓函數(shù)交換它們的值。這里是一個(gè)執(zhí)行交換函數(shù)的試驗(yàn)——輸入并執(zhí)行以下代碼,,看看會(huì)發(fā)生什么:

#include 

void swap(int i, int j)
{int t;t=i;i=j;j=t;}

void main()
{int a,b;a=5;b=10;printf("%d %d
n", a, b);swap(a,b);printf("%d %dn", a, b);}

執(zhí)行程序后您會(huì)發(fā)現(xiàn)變量并沒有被交換,。a和b的值是傳入了swap,而且交換函數(shù)確實(shí)交換了它們,。但是函數(shù)返回后實(shí)際上沒有產(chǎn)生任何效果,。 要使函數(shù)正確工作您可以使用指針,如下所示:

#include 

void swap(int *i, int *j)
{int t;t = *i;*i = *j;*j = t;}
void main()
{int a,b;a=5;b=10;printf("%d %d
n",a,b);swap(printf("%d %dn",a,b);}

為了了解上面代碼的工作過程,,讓我們把它畫在紙上。先畫出兩個(gè)方框代表整數(shù)a和b,,分別在里面填上5和10;再畫出指針i和j,,還有整數(shù)t,。swap函數(shù)被調(diào)用時(shí)接受的參數(shù)是a和b的地址。所以i指向a(從i到a引一箭頭),,j指向b(從b到j(luò)引另一箭頭),。當(dāng)函數(shù)調(diào)用完成指針的初始化以后,*i就成為a的另一個(gè)名字,,*j也成為b的另一個(gè)名字?,F(xiàn)在開始執(zhí)行swap的代碼。代碼中用到的*i和*j其實(shí)就是a和b,。函數(shù)完成時(shí),,a和b就被交換了,。


程序運(yùn)行過程示意圖

如果您在調(diào)用交換函數(shù)的時(shí)候,不小心忘記了&,,使交換行不小心成了這樣子:swap(a,b);,。這會(huì)導(dǎo)致段錯(cuò)誤。當(dāng)您忘記使用&的時(shí)候,,引入的便是a的值,,而不是a的地址。因此,,i指向了內(nèi)存中一個(gè)無(wú)效的地址,,當(dāng)使用*i的時(shí)候系統(tǒng)就會(huì)崩潰。

因?yàn)橥瑯拥脑?,如果您在引入的變量中忘記?amp;,,scanf函數(shù)也會(huì)崩潰。scanf函數(shù)使用指針將它讀取的值,,返回給您引入的變量,。沒有了&,scanf就引入了一個(gè)錯(cuò)誤的地址,,并導(dǎo)致崩潰。

可變參數(shù)是C語(yǔ)言指針最普通的用法之一,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多