程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中的傳值 傳引用

C#中的傳值 傳引用

編輯:C#入門知識

在C#中默認是按值傳遞,什麼是按值傳遞呢?我們都知道,在參數傳遞過程中,形參和實參占有不同位置的存儲空間,被調用過程在執行過程中,改變了形參的值,但不會影響調用過程(主調過程)的實參值。所以,當被調用過程執行結束返回到調用過程,實參還是調用之前的值。因此為了保護實參不受被調用過程的影響,應選用按值傳遞參數方式。      說理論有些抽象,讓我用個簡單的Swap函數給大家說明下吧。  

class Program  
    {  
        static void Main(string[] args)  
        {  
            double a, b;  
            Console.WriteLine("請輸入第一個數字a");  
            a = Convert.ToDouble(Console.ReadLine());  
            Console.WriteLine("請輸入第二個數字b");  
            b = Convert.ToDouble(Console.ReadLine());  
            Swap(a, b);  
  
            Console.WriteLine("主調用過程按值傳遞後a的值" + a);  
            Console.WriteLine("主調用過程按值傳遞後b的值" + b);  
            Console.Read();  
        }  
        static void Swap(double x, double y)  
        {  
            double temp;  
            temp = x;  
            x = y;  
            y = temp;  
            Console.WriteLine("被調用過程中a的值" + x);  
            Console.WriteLine("被調用過程中b的值" + y);  
        }  
    }  

 

     輸出結果:      通過結果可以發現,a、b的值只在被調用過程中發生改變,在回到主調用過程中後未發生改變。      接著說按引用傳遞。在C#中按引用傳遞需加上關鍵字ref。所謂按引用傳遞就是當調用一個過程時,是把實參變量的內存地址傳遞給被調用過程的形參,也就是說形參和實參使用相同地址的內存單元。因此在被調用過程中改變形參的值,就等於改變了實參的值。       還是讓我們用例子來說明問題吧。還是上面的例子,我稍加修改。  
class Program  
   {  
       static void Main(string[] args)  
       {  
           double a, b;  
           Console.WriteLine("請輸入第一個數字a");  
           a = Convert .ToDouble ( Console.ReadLine());  
           Console.WriteLine("請輸入第二個數字b");  
           b =Convert.ToDouble( Console.ReadLine());  
           Swap(ref a,ref  b);  
  
           Console.WriteLine("主調用過程按引用傳遞後a的值" + a);  
           Console.WriteLine("主調用過程按引用傳遞後b的值" + b);  
           Console.Read();  
             
       }  
       static  void Swap(ref double x, ref double y)  
       {  
           double temp;  
           temp = x;  
           x = y;  
           y = temp;  
           Console.WriteLine("被調用過程中a的值" + x);  
           Console.WriteLine("被調用過程中b的值" + y);  
       }  
   }  

 

           輸出結果:         只是多了個ref,結果就正好相反,這就是代碼的神奇之處。      其實概括起來就一句話,按值傳遞,形參不改變實參;按引用傳遞,形參改變實參。 希望能對大家有幫助。  

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