摘 要:函數(shù)調用方式是C++函數(shù)教學的重點,教學內容存在一定的難度。本文簡述了三種C++函數(shù)調用方式的特點,通過典型案例分析,引導學生掌握函數(shù)調用方式的運用方法。
關鍵詞:C++;教學;函數(shù);調用方式
一、引言
C++語言是較為復雜的一門面向對象程序設計語言,其課程教學的實施有一定難度。函數(shù)調用方式不僅直接影響函數(shù)之間信息傳遞的效率,而且影響了程序運行的結果,所以在C++函數(shù)教學中占有重要的位置。C++函數(shù)調用在C語言的基礎上,除了保留傳統(tǒng)的傳值調用和傳址調用兩種方式之外,又增加了頗具特色的引用調用方式。在授課中抓住要點,選取同一個案例,反復對比分析,取得了良好的教學效果。
二、傳值調用
傳值調用是各種程序語言普遍存在的函數(shù)調用方式,在函數(shù)調用時把實參的值從左至右,一一傳遞給各個形參。這種傳遞是單向的,形參的值發(fā)生變化對實參毫無影響。在案例選取時,精選交換兩個整型變量的值這個程序。定義一個swap函數(shù)負責交換,形參設置為普通類型int。代碼如下:
#include<iostream.h>
int main()
{
void swap(int a,int b);//函數(shù)聲明
int a,b;
cout<<"請輸入兩個整數(shù):"<<endl;
cin>>a>>b;
swap(a,b);//函數(shù)調用
cout<<"a="<<a<<",b="<<b<<endl;
return(0);
}
void swap(int a,int b)//函數(shù)定義
{
int t;//定義中間變量
t=a;
a=b;
b=t;
}
從運行結果可以發(fā)現(xiàn),調用swap函數(shù)之后,main函數(shù)中a、b兩個變量的值并沒有交換。由于參數(shù)傳遞是單向的,實參傳值給形參,但是形參卻無法影響實參,因此導致main函數(shù)中實參a、b的值沒有交換。
三、傳址調用
傳址調用方式在形式上與傳值調用方式的區(qū)別是,形參是指針變量,實參是變量的地址。傳址調用使得被調函數(shù)能夠修改主調函數(shù)中變量的值,具體步驟是:(1)把形參設置為指針變量,如果需要修改n個主調函數(shù)的變量,則設置n個相應的指針形參。(2)在函數(shù)調用時把主調函數(shù)的變量地址作為實參傳遞給指針形參,使得指針形參分別指向主調函數(shù)中的這些變量。(3)利用間接訪問方式修改主調函數(shù)中相應變量的值。
再次選取交換兩個整型變量的值這個案例,同樣定義一個swap函數(shù)負責交換,但是形參設置為指針類型int*。部分代碼如下:
#include<iostream.h>
int main()
{
………………..
swap(&a,&b); //傳址調用
cout<<"a="<<a<<",b="<<b<<endl;
}
void swap(int *p,int *q) //函數(shù)定義
{
int t;
? t=*p;
*p=*q;
*q=t;
}
運行情況顯示變量a和b的值確實發(fā)生了交換。調用swap函數(shù)時,把變量a和b的地址分別傳給了指針形參p和q,因此p指向了變量a,q指向了變量b。在swap函數(shù)中,通過指針p間接訪問a,通過指針q間接訪問b,從而完成了main函數(shù)中變量a和b的值交換。
四、引用調用
所謂引用調用,就是把引用作為函數(shù)的形參。函數(shù)調用時與傳值調用方式一樣,實參既可以是變量,也可以是變量的引用。仍然選取交換兩個整型變量的值這個案例,同樣定義一個swap函數(shù)負責交換,但是形參設置為引用類型int&。運行情況顯示,main函數(shù)中變量a和b的值也發(fā)生了交換。部分代碼如下:
#include<iostream.h>
int main()
{
………………..
swap(a,b); //函數(shù)調用
cout<<"a="<<a<<",b="<<b<<endl;
}
void swap(int &a,int &b) //函數(shù)定義
{
int t; //定義中間變量
t=a;
………………..
}
五、結語
引用調用在形式上與傳值調用相似,但是實現(xiàn)了與傳址調用類似的功能。C++特有的引用調用方式使用簡便,程序的可讀性好,還可以達到傳址調用的效果。在教學中應該重點分析三種函數(shù)調用方式的特點,突出引用調用的優(yōu)點,并推薦學生在編程實踐中采用。
參考文獻:
[1] 王曉東. C++程序設計簡明教程(第二版)[M].北京:中國水利水電出版社, 2017.
[2] 鄭莉. C++語言程序設計[M].北京:清華大學出版社, 2001.
[3] 江義華. C/C++完美演繹[M].北京:中國水利水電出版社, 2001.