程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 菜鳥筆記——ref和out參數(參數傳遞),refout

菜鳥筆記——ref和out參數(參數傳遞),refout

編輯:C#入門知識

菜鳥筆記——ref和out參數(參數傳遞),refout


1.引入問題

實例:寫一個方法,計算int數組中的每個元素的總和以及最大值與最小值
    * 其目的是返回3個值類型的變量, 那麼問題來了,但是方法return只能返回一個值 ,這時就可以用ref和out來修飾參數

示例代碼(沒有修飾):

1 static void Main(string[] args) 2 { 3 4 5 int[] arr = { 56,31,2,89,76}; 6 int sum = 0, max = 0, min = 0; 7 GetValue(arr, sum, max, min); 8 9 Console.WriteLine("總和:" + sum + ",最大值:" + max + ",最小值:" + min); 10 } 11 12 public static void GetValue(int [] arr , int sum, int max, int min) 13 { 14 sum = 0; 15 max = arr[0]; 16 min = arr[0]; 17 18 for(int i = 0; i < arr.Length; i++) 19 { 20 sum += arr[i]; 21 if(max<arr[i]) 22 { 23 max = arr[i]; 24 } 25 if(min>arr[i]) 26 { 27 min = arr[i]; 28 } 29 30 } 31 32 } View Code

 

示例代碼(修飾後):

1 static void Main(string[] args) 2 { 3 4 5 int[] arr = { 56,31,2,89,76}; 6 int sum = 0, max = 0, min = 0; 7 GetValue(arr,ref sum, ref max, ref min); 8 9 Console.WriteLine("總和:" + sum + ",最大值:" + max + ",最小值:" + min); 10 } 11 12 public static void GetValue(int [] arr , ref int sum, ref int max, ref int min) 13 { 14 sum = 0; 15 max = arr[0]; 16 min = arr[0]; 17 18 for(int i = 0; i < arr.Length; i++) 19 { 20 sum += arr[i]; 21 if(max<arr[i]) 22 { 23 max = arr[i]; 24 } 25 if(min>arr[i]) 26 { 27 min = arr[i]; 28 } 29 30 } 31 32 } View Code

結果證實: 沒有用ref和out傳遞的值類型參數,將傳遞的是棧內存裡的值內容
         * 用ref和out修飾後,值類型傳遞將傳遞棧內存的地址,也就導致了形參和實參(實參給形參賦值),只向一個地址,
         * 形參通過方法改變後,實參變量的值頁將會改變

 

2.ref=references---引用

 * 注意:1.傳參的參數必須在方法調用之前前聲明並賦值(先賦值在使用)
            2.傳參實參要加ref,方法聲明的形參也要加ref,“門當戶對”。
            3.ref傳遞的參數其實沒有真正的創建一個新的變量,是將實參和形參共享一個地址的內存

 

3.out=輸出參數

  * 注意:1.傳參的參數可以只聲明不賦值,但是在調用的方法體內,必須為其賦值(在方法體內必須賦值)
             2.傳參實參要加out,方法聲明的形參也要加out,“門當戶對”。
             3.out傳遞的參數其實沒有真正的創建一個新的變量,是將實參和形參共享一個地址的內存

 

  
4.ref和out的區別

          ref傳遞的參數必須賦值在使用(在外賦值)
                           out可以只聲明不賦值,但是在方法體內必須賦值(在內賦值)

 

 5.基礎概念:

    1.參數傳遞,默認都是傳遞棧空間的內容
           2.如果添加了ref或out修飾,那麼將會傳遞棧空間的地址,不再是棧空間的內容
           傳遞過程:形參是實參的一種規范,形參也是一個獨立的變量,將會把實參賦該形參     
    
        

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved