韓祥波
摘要:探討了數(shù)組、指針在函數(shù)參數(shù)傳遞中的應用等教學案例,討論了主調函數(shù)和被調函數(shù)數(shù)據(jù)傳遞的各種情形,分析了函數(shù)形參為指針、數(shù)組等形式時對應的具體情形。多次教學實踐證明,學生編程更活躍,實現(xiàn)了對該知識點的融會貫通。
關鍵詞:C++;數(shù)組;指針;參數(shù)傳遞:被調函數(shù);教學實踐
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2019)36-0092-01
1概述
在C++的學習中數(shù)組、指針、函數(shù)三者作為幾個核心要點內容多、難度大、綜合使用時往往顧此失彼,丟分嚴重。下面我們通過函數(shù)的形參、實參使用指針和數(shù)組對此綜合運用,達到深入理解的、融會貫通目的。在代碼中int f'(int x){ cout《”x=”<
函數(shù)的參數(shù)傳遞有值傳遞和引用傳遞兩種。前者是單向傳遞,若想通過函數(shù)處理實現(xiàn)對形參做的更改在函數(shù)調用完畢后對實參有效,需要使用引用傳遞。下面我們通過幾個教學實踐的案例來說明實參和形參的幾種復雜對應情況。
2教學實踐
2.1形參實參都用數(shù)組名
#include
void fun(int a[10])
f for(inti=O;1<=9;1++)
a[i]=a[i]*1 0;}
main(){ int b[10]; for(int i-0;i<=9;i++){I)[i]=i; }
fun(b); for(i=O;k=9;1++)(coutq”1)[”<
“fun(int a[10])”聲明了形參數(shù)組的元素數(shù)為10,但實際上該數(shù)值是無用的,代碼可以改為”fun(int a[])”。這是由于編譯程序對形參數(shù)組的長度不做檢查,而是負責把實參數(shù)組的首地址傳給形參數(shù)組。但在使用中常加入第二個實參來解決實際用到數(shù)組元素個數(shù)的問題:如”fun(int a[],int x)”,x很好解決了需要的元素個數(shù)。實參中”fun(b)”不是把數(shù)組”l,”的值傳遞給形參”a[10])”,而是把實參數(shù)組的起始地址傳遞給形參數(shù)組,這樣數(shù)組“b”,和“a”就共用同一段內存單元。形參數(shù)組中各元素的值在開辟的被調函數(shù)棧區(qū)中被改寫,故實參數(shù)組元素的值隨之變化。
2.2實參用數(shù)組名,形參用指針變量
#include
void fun(int 4 p)( for(int i_0;i<9;i++)4(p“)=+(p“)4 10;)
main0( int b[101; for(inti=O;1<9;1++) })[i]=i;
fun(b); for(i=O;i<9;1++) cout<<”I)[”<
本例中形參(int*p)為指針,通過指針偏移來遍歷元索實現(xiàn)改值目的,但實參fun()為數(shù)組名,此時實參數(shù)組的10個元素的數(shù)值通過b這個常指針實現(xiàn)了從數(shù)組到指針的參數(shù)有效傳遞。即指針p得到了b的值,而b的值即數(shù)組首元素b[l]的地址。這個賦值是常指針給指針的賦值,是合理的,但指針對常指針賦值則無效。
2.3形參實參都用指針變量
#include
void fun(int*p)( for(int i_0;i<9;i++) *(p+i)=*(p+i)*10;}
main0( int b[10]; for(int i=O;1<9;i++)(b[i]=i;)
int*q=b; fun(q); for(i=0; 1<9; 1++)(cout”b[”<
本例中形參仍為指針,但實參改為了更常用的普通指針模式。通過int* q=b;實現(xiàn)了數(shù)組起始地址到普通指針的賦值,從而為實參到形參的指針對指針的傳遞做好了準備。兩個指針同是指向同一段內存單元,使得函數(shù)棧區(qū)內部的指針內容的變化得以保存,達到了引用傳遞的目的。
2.4實參為指針變量,形參為數(shù)組名
#im:lude
void fun(int a[10l)f for(int l=0;i<9;i++)a[i]=a[i]*10;}
main(){int b[lO].for(int i=0; k9;i++)( t)[i]=i;}
int*q=b; fun(q);
for(i=0; 1<9;i++){cout《”b[”<
本例中形參為數(shù)組,但在主函數(shù)中通過”int* q=b;
fun(q);”語句把數(shù)組起始地址賦值給普通指針并作為實參傳遞給形參,雖然形參形式上是數(shù)組但本質還是指針類型,需要一個地址值與之對應,而實參q作為數(shù)組b的起始地址傳遞給形參”(int a[10])”自然是形式到內容完全一致的。
3結論
在函數(shù)調用中,實參到形參的傳遞涉及了指針、數(shù)組等各種復雜情況,使用時可以選用值傳遞或引用傳遞。若想保存對形參對應內容所做的修改則使用后者,此時形參和實參都可用指針或數(shù)組的形式,只要本質一致,則傳遞容易完成,如數(shù)組到數(shù)組、數(shù)組到指針、指針到指針、指針到數(shù)組的幾種實參到形參的傳遞都給出了驗證過的實例。
參考文獻:
[1]劉吳,方歡,袁水蓮.淺析C++中獲取數(shù)組長度的若干方法[J].電腦知識與技術,2018(19).
[2] Bjarne Stroustrup.C++程序設計語言:特別版[M].裘宗燕,譯.北京:機械工業(yè)出版社,2 010.
[3]羅憲,王家偉,周建麗.“高級語言程序設計”“面向對象程序設計”精品課程教學改革與實踐[J].重慶交通大學學報:社會科學版,2009,9(1).
[4]王世同,李強.VisualC++6.0編程基礎[M].北京:清華大學出版社,2000.
[5]錢能.C++程序設計教程[M].北京:清華大學出版社,1999.
[6] Lippman S B,Barhara E.Moo.C++ Primer中文版[M].李師賢,譯.4版.北京:人民郵電出版社,2006.
[7]陳維興,林小茶.C++面向對象程序設計教程[M].北京:清華大學出版社,2000.
[8]羅憲,王家偉,周建麗.“高級語言程序設計”“面向對象程序設計”精品課程教學改革與實踐[J].重慶交通大學學報:社會科學版,2009,9(1).
[9]陳叢.高級語言程序設計教學方法探討[J].電腦知識與技術,2012(34).
【通聯(lián)編輯:王力】
收稿日期:2019-09-23
作者簡介:韓詳波(1975-),男,山東淄博人,講師,碩士,研究方向為計算機軟件與理論。