資源描述:
《c程序中用指針變量作函數參數》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、C程序中用指針變量作函數參數樊繼(平頂山工業(yè)職業(yè)技術學院河南平頂山467000)摘要:本文首先介紹了實參變量與形參變量的基本概念和使用方法。在此基礎上,重點對指針變量作函數參數進行了全面的分析、概括和總結。關鍵字:實參變量與形參變量指針變量函數參數函數的參數不僅可以是整型、實型、字符型等數據,還可以是指針類型,它的作用是將一個變量的地址傳送到另一個函數中,具體應用如下:一、用指向變量的指針作函數參數使用指針變量作函數參數,在被調用函數中改變了變量的值,也就是改變了main函數中變量的值。1.指針變量作函數與變量作函數
2、的區(qū)別c語言規(guī)定實參變量對形參變量的數據傳遞是“值傳遞”即單向傳遞、只有實參傳給形參,而不能有形參傳給實參,在內存中實參與形參是不同的存儲單元。在調用函數時,給形參分配存儲單元,并將實參對應的值傳遞給形參,調用結束后,形參單元被釋放,實參單元仍保留并維持原值。因此,在執(zhí)行一個被調用函數是,形參的值如果發(fā)生改變,并不會改變主調函數的值。為了使在函數中改變了的值能被main函數所用,應該使用指針變量作函數參數,在函數執(zhí)行過程中,使指針變量所指向的變量值發(fā)生變化,函數調用結束后,這些值的變化依然保留下來,這樣就實現了“通過
3、函數調用使變量的值發(fā)生變化,再main函數中使用這些改變了的值”的目的。2.通過函數調用得到n個要改變的值的方法①在主函數中設n個變量,用n個指針變量指向他們。②然后將指針變量作實參,將這n個變量的地址傳給所調用函數的形參。③通過形參指針變量,改變該n個變量的值。④主調函數中就可以使用這些改變了值的變量。二、在一維數組中用指向數組元素的指針變量作函數參數如果有一個實參數組,想在函數中改變此數組的元素的值,實參和形參都用指針變量。main()f(int*x,intn){inta[10],*p;{p=a;……}f(p,1
4、0);…}數組名a代表數組的起始地址。4實參p為指針變量,p指向a[0],即p=a或p=&a[0],形參為數組的指針變量x,將a[0]的地址傳給形參x,使指針變量x指向a[0],x的初始值也是&a[0],通過x值的改變,可以使x指向數組中a的任意元素。在函數執(zhí)行過程中,可以使x指向數組a的任意元素的值變化,而它也就是a[i]的值發(fā)生變化,主函數可以使用變化了的數組元素的值。一、在二維數組中使用指針變量作函數參數一維數組名可以作為函數參數傳遞,多維數組名也可以作為函數參數傳遞,在用指針變量作形參接受實參數組名傳遞的地址
5、時有兩種方法。1.用指向變量的指針變量main(){…floatscore[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}}…average(*score,12);}voidaverage(float*p,intn){…}實參用*score是一個地址,指向二維數組score的a[0][0]。形參p為指向實型的指針變量,p先后指向二維數組score的各個元素。p+1指向下一個元素。2.用指向一維數組的指針變量。main(){…floatscore[3][4]={{65
6、,67,70,60},{80,87,90,81},{90,99,100,98}}…search(score,2);}voidsearch(float(*p)[4],intn){…}實參是score二維數組名,表示二維數組的起始地址,指向二維數組score的a[0][0]。形參p不是指向一般實型的指針變量,而是包含4個元素的一維數組的指針變量。函數調用開始時,將實參score的值(首地址)傳給p也等于score。p+n是一維數組score[n]首地址,*(p+n)+i是score[n][i]的地址,*(*(p+n)+i
7、)是score[n][i]的值。二、用指向字符串的指針變量作函數參數將一個字符串從一個函數傳送到另一個函數,可以用傳送地址的辦法,即用指向字符的指針變量作函數參數。在被調用得函數中可以改變字符串的內容,在主調函數中可以得到改變了的字符串。main(){…char*a=”Iamateacher”;char*b=”youareastudent”;cstr(a,b);…}voidcstr(char*from,char*to){4… ?。龑崊和b是指針變量,分別指向”Iamateacher”和”youareastudent
8、”的首地址。a+1指向下一個字符的地址。a+i指向i個字符的地址。*(a+i)表示第i個字符。形參from和to也是指針變量,分別接受a、所指向的首地址,因此from[i]和a[i]、to[i]和b[i]指向同一內存單元,改變from[i]和to[i]的值也就是改變a[i]和b[i]的值。一、用指向函數的指針變量作函數參數一個函數在編譯時被分配