指針作為函數(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 執(zhí)行程序后您會(huì)發(fā)現(xiàn)變量并沒有被交換,。a和b的值是傳入了swap,而且交換函數(shù)確實(shí)交換了它們,。但是函數(shù)返回后實(shí)際上沒有產(chǎn)生任何效果,。 要使函數(shù)正確工作您可以使用指針,如下所示: #include 為了了解上面代碼的工作過程,,讓我們把它畫在紙上。先畫出兩個(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就被交換了,。 如果您在調(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ǔ)言指針最普通的用法之一,。 |
|
來(lái)自: ldjsld > 《電腦手機(jī)及電子技術(shù)》