⑴ 若需要利用形參直接訪問實參時,應將形參變數說明為( )參數。
若需要利用形參直接訪問實參時,應將形參變數說明為引用參數。
形參是指定義函數時括弧里的那個變數。實參是指在主函數中調用某個函數時,作為參數的那個變數。在進行參數傳遞時,引用參數是利用形參直接訪問實參,形參的變化可以直接傳遞給引用參數的任何實參,影響實參的變化,因為程序操作的是真正的變數,而不是它的副本。
(1)通過什麼對象訪問實參擴展閱讀:
在形參表中以符號「&」開始的參數即為引用參數。參數是引用時,函數接收的是實參的左值而不是值的拷貝。這意味著函數知道實參在內存中的位置,因而能夠改變它的值或取它的地址。如果引用參數不希望在被調用的函數內部被修改,可以把參數聲明為 const 型的引用。
引用參數必須被初始化為指向一個對象,一旦初始化了,它就不能再指向其他對象。允許在有效地實現重載操作符的同時,還能保證用法的直觀性。
⑵ Java中的形參和實參的區別以及傳值調用和傳
1.形參:用來接收調用該方法時傳遞的參數。只有在被調用的時候才分配內存空間,一旦調用結束,就釋放內存空間。因此僅僅在方法內有效。
2.實參:傳遞給被調用方法的值,預先創建並賦予確定值。
3.傳值調用:傳值調用中傳遞的參數為基本數據類型,參數視為形參。
4.傳引用調用:傳引用調用中,如果傳遞的參數是引用數據類型,參數視為實參。在調用的過程中,將實參的地址傳遞給了形參,形參上的改變都發生在實參上。
案例分析:
1.基礎數據類型(傳值調用)
傳值,方法不會改變實參的值。
2.引用數據類型(引用調用)
傳引用,方法體內改變形參引用,不會改變實參的引用,但有可能改變實參對象的屬性值。
舉兩個例子:
(1)方法體內改變形參引用,但不會改變實參引用 ,實參值不變。
publicclassTestFun2{
publicstaticvoidtestStr(Stringstr){
str="hello";//型參指向字元串「hello」
}
publicstaticvoidmain(String[]args){
Strings="1";
TestFun2.testStr(s);
System.out.println("s="+s);//實參s引用沒變,值也不變
}
}
publicclassTestFun4{
(StringBuffersb){
sb.append("java");//改變了實參的內容
}
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer("my");
newTestFun4().testStringBuffer(sb);
System.out.println("sb="+sb.toString());//內容變化了
}
}
執行結果列印:s=1
(2)方法體內,通過引用改變了實際參數對象的內容,注意是「內容」,引用還是不變的。
執行結果,列印:sb=my java 。
所以比較參數是String和StringBuffer 的兩個例子就會理解什麼是「改變實參對象內容」了。
總結:
1.java的基本數據類型是傳值調用,對象引用類型是傳引用。
2.當傳值調用時,改變的是形參的值,並沒有改變實參的值,實參的值可以傳遞給形參,但是,這個傳遞是單向的,形參不能傳遞回實參。
3.當引用調用時,如果參數是對象,無論對對象做了何種操作,都不會改變實參對象的引用,但是如果改變了對象的內容,就會改變實參對象的內容。
⑶ 為什麼c++中類的成員函數參數有時候是類的引用而有時候是類名求教!!感謝
引用是什麼?引用就是對象的另一個名字。通過使用引用形參,函數可以直接訪問實參對象,而無須賦值它。
來看一個簡單的例子。
Class A;
void A::(const A& a); 那麼這里就a就是傳遞給a實參(假設為b)的別名。調用形式如aa.(b)。而如果函數聲明為void A::(A a),程序需要在函數執行的時候重新構造一個臨時對象a(使用A的復制構造函數)。這樣會帶來效率和空間上的損失。如果A這個類禁止了復制構造函數的使用 ,那麼該調用會是錯誤的。
再來看看引用帶來的其它好處:
1. 使用引用形參可以返回額外信息。 函數只能有一個返回值,那麼需要返回多個內容的時候怎麼辦?可以使用引用形參來傳遞變數進行修改從而達成我們的目的。
2. 利用const引用避免復制。來看一個簡單的例子:
bool isShorter(const string &s1, const string &s2) { return s1.size() < s2.size(); }
因為在程序中不需要修改實參的值,所以加上const可以避免復制,在函數體內任意對s1,s2進行修改的操作都是違法的。這樣使用可以保證我們無意的修改實參,而這並非我們的本意。
3. 應該講不需要修改的引用形參定義為const引用。普通的非const引用形參在使用時不太靈活。這樣的形參既不能用const對象初始化,也不能使用字面值或產生右值的表達式實參初始化。
說了這么多,如有錯誤,請指出。希望能學好引用,寫出效率更高更通用的代碼。
⑷ 在C語言中,函數實參與形參之間的數據傳遞方式是( )傳遞方式。
函數實參與形參之間的數據傳遞方式是( 值傳遞)傳遞方式,在C語言中,數據傳遞方式有值傳遞和引用傳遞,值傳遞:傳值,實際是把實參的值賦值給行參,相當於。
那麼對行參的修改,不會影響實參的值 。引用傳遞: 實際是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的賦值,那麼傳地址以後,實參和行參都指向同一個對象,因此對形參的修改會影響到實參。
(4)通過什麼對象訪問實參擴展閱讀
傳值調用中,只使用了實參的值。傳值調用機制里,形參是一個局部變數,其初始值為相應實參的值。在引用調用機制里,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。
引用傳遞是將變數的內存地址傳遞給方法,方法操作變數時會找到保存在該地址的變數,對其進行操作。會對原變數造成影響。可以將一個變數通過引用傳遞給函數,這樣該函數就可以修改其參數的值。
⑸ 在java中,什麼是形參什麼是實參,它們都是什麼類型的,它們之間的傳遞關系什麼樣的
形參:全稱為「形式參數」是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳遞的參數。
形參的作用是實現主調函數與被調函數之間的聯系,通常將函數所處理的數據,影響函數功能的因素或者函數處理的結果作為形參。沒有形參的函數在形參表的位置應該寫void.main 函數也可以有形參和返回值,其形參也稱為命令行參數,由操作系統在啟動程序時初始化,其返回值傳遞給操作系統。
實參:可以是常量、變數、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
實參和形參的區別:
空白或佔位符
1。函數的形參列於函數聲明中,在函數定義的函數體內使用。當函數調用時,形參(任何種類的)是一類將被填充的空白或是佔位符。
用來填充形參
2。實參是用來填充形參的。當函數被調用時,實參列在函數名後面的括弧里。執行函數調用時,實參被傳遞給形參。
傳值調用和引用調用
3。傳值調用和引用調用指的是用於參數傳遞過程中的一種機制。傳值調用中,只使用了實參的值。傳值調用機制里,形參是一個局部變數,其初始值為相應實參的值。在引用調用機制里,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。
⑹ C語言定義函數的時候為什麼有時候加上&。比如: Status EnQueue(LinkQueue &Q, QElemType e){ ...}
這是引用形參!
使用引用形參一般有兩種情況,一時需要在程序中修改參數的值,而是參數內存較大,用以節省空間與時間的花銷。
第一種:
要想改變實參的值可以使用引用,因為引用類型的形參實際上就是實參的別名,當然能對實參進行操作了。當然你也可以通過指針來改變相應實參的值,但是使用引用會更加安全,更自然。
第二種:
在向函數傳遞大對象時,需要使用引用形參。雖然賦值實參對於內置數據類型的對象或者規模較小的類型來說沒有什麼問題,但是對於大部分的類型或者大型數組,它的效率就比較低了。另外,某些類型是無法復制的。使用引用形參,函數可以直接訪問實參對象,而無須復制它。如果使用引用形參的唯一目的是為了復制形參,則需要使用const類型的。之所以使用引用是為了提高效率,使用const是為了避免函數修改實參的值。這樣既達到了非引用類型的效果,又避免了非引用類型的缺點。
引用是很重要的知識點,還望少年能搞懂啊!
⑺ 形參與實參的區別
有以下區別:
1、主體不同:實參在調用有參函數時,函數名後面括弧中的參數為「實際參數」。形參不是實際存在變數,又稱虛擬變數。
2、目的不同:實參可以是常量、變數或表達式,無論實參是何種類型的量,在進行函數調用時,都必須具有確定的值,以便把這些值傳送給形參。
需要注意當形參和實參不是指針類型時,在該函數運行時,形參和實參是不同的變數,他們在內存中位於不同的位置,形參將實參的內容復制一份,在該函數運行結束的時候形參被釋放,而實參內容不會改變。