C 中值傳遞與引用傳遞的區別

2022-08-26 16:45:15 字數 2148 閱讀 4430

以值傳遞引數

當實參當作值來傳遞時,就產生了乙個新的拷貝。

class test     ", x);  

}  static void fo(int p)  

", p);  

}  }   程式執行結果為:p=9,x=8;即x的值不會受p影響,給p賦乙個新值並不會改變x的內容,因為p和x存在於記憶體中不同的位置。

同理,用傳值的方式傳遞乙個引用型別物件時,只是複製這個物件本身,即複製其位址值,而不是它指代的物件。下面**中fo中看到的stringbuilder物件,就是在main方法中例項化的那乙個,只是有不同的引用指向它而已。 static void fo(stringbuilder fosb)  

static void main()  

執行結果:test.

換句話說,sb和fosb是指向同一物件的不同引用變數。因為fosb是引用的拷貝,把它置為null並沒有把sb置為 null.

ref修飾符

當使用rel關鍵字時,表示是用引用的方式傳遞引數。實參和形參引用的都是同乙個物件,改變其中乙個的引用值,另乙個也會改變。

static void main(string args)  

", x);  

}  static void fo(ref int p)  

", p);  

}   執行結果:p=9;x=9  。  

如果在函式fo中改變p的值,則x的值也會隨之改變。 static void main(string args)  

", x);  

}  static void fo(ref int p)  

", p);  

} 執行結果:p=11,x=11;

ref修飾符在寫函式和呼叫函式時都一定要出現。

ref修飾符主要應該於實現交換的方法中。 static void swap(ref string a, ref string b)  

static void main()  

執行結果:world hello

out修飾符

out修飾符與ref修飾符非常相似,除了以下兩點為:

一,在呼叫函式時不需要賦值。

二,在函式退出前必須賦值。

out修飾符通常用於需要從方法中獲取多個返回值的時候 static void split(string name, out string firstname, out string lastname)  

static void main()  

執行結果:a=steven,b=francis 總結: 1,值傳遞時,為什麼被呼叫的方法中的形參值的改變不會影響到相應的實參?

答:因為按值傳遞時,系統首先為被呼叫的方法的形參分配記憶體空間,然後把實參中的值按位置一一對應「複製」給形參。形參中儲存的值只是乙份實參的拷貝,因此被呼叫方法中形參值的任何改變都不會影響到相應的形參。

2,值傳遞和引用傳遞有什麼不同,什麼是值引數,它以什麼方式傳遞?

答:值 傳遞時,系統首先為被呼叫方法的形參分配記憶體空間,並將實參的值按位置一一對應地複製給形參,此後,被呼叫方法中形參值得任何改變都不會影響到相應的實 參; 而引用傳遞時,系統不是將實參本身的值複製後傳遞給形參,而是將其引用值(即位址值)傳遞給形參,因此,形參所引用的該位址上的變數與傳遞的實參相同,方 法體內相應形參值得任何改變都將影響到作為引用傳遞的實參。

3,什麼是形參,什麼是實參?

答: 形參:在定義函式中指定的引數就是形參,在未出現函式呼叫時,他們並不佔記憶體中的儲存單元,只有在發生函式呼叫時,函式中的形參才被分配記憶體單元。在呼叫結束後,形參所佔的記憶體單元也被釋放。

實參:實參可以是常量、變數和表示式,但要求有確定的值。在呼叫時將實參的值賦給形參。在記憶體中,實參單元和形參單元是不同的單元。在呼叫函式時,給形參分配儲存單元,並將實參對應的值傳遞給形參,呼叫結束後,形參單元被釋放,實參單元仍保留原值。

理解:實參就是送進去方法中的東西~~行參就是把送進來的東西在方法中進行拷貝加工,加工完後方法就返回乙個東西--返回值。

值傳遞的時候,實參是不變的~形參是隨著計算而變化的~~ 引用傳遞的時候~~行參怎麼變~實參就怎麼變.... 

引數的傳遞分為:1.值方式引數傳遞,2.引用方式引數傳遞。

引數中,值傳遞 指標傳遞 引用傳遞的區別

值傳遞 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被呼叫函式的角度來說,值傳遞是單向的 實參 形參 賦值完畢後實參就和形參沒有任何聯絡。當函式內部需要修改引數,並且不希望這個改變影響呼叫者時,採用值傳遞。include 值傳遞示例 void swap int a,int b 函式呼叫後...

c 中值傳遞和引用傳遞

物件在方法間傳值,傳遞的是物件的值,或者這個物件的引用的副本 首先建立乙個物件 public class orderinfo 建立乙個方法去改變這個物件 private void change orderinfo order 然後通過方法的呼叫檢視變化 private void btnchange ...

Python中值傳遞和引用傳遞區別

python中對乙個函式可以傳遞引數,但是如何分辨是值傳遞還是引用傳遞,不是程式設計師手動控制的,而是python根據你傳入的資料物件,自動識別的。如果你傳入的引數物件是可變物件 列表,字典,這個時候就是引用傳遞,如果引數在函式體內被修改,那麼源物件也會被修改。如果你傳入的引數物件是不可變的物件 數...