2013-08-07 82 views
-3

我已經對C#的運動,那就是:C#變量,方法,參考運動

class Program 
{ 
    static double funk(int a, ref int b) 
    { 
     double c = a + b; 
     a = 5; 
     b = a * 3; 
     return c; 
    } 

static void Main(string[] args) 
{ 
    int a = 1, b = 2; 
    Console.WriteLine(funk(a, ref b)); 
    Console.WriteLine(a); 
    Console.WriteLine(b); 
    Console.ReadLine(); 
} 

所以,結果是很清楚,當我運行的代碼,它給了我:

3 
1 
15 

我現在的問題是,15和3從哪裏來?

+2

調試程序並逐步查看每一行,看看會發生什麼。如果您對特定的行有特定的問題,而不是隻是要求我們解釋整個程序(並嘗試猜測您做了哪些部分而不瞭解),那麼該問題將更適合該網站。 – Servy

+1

第一個WriteLine打印'''從'funk()'返回'''a + b'。第三個WriteLine打印''''''''''''''''''''以來'ref'關鍵字將其傳遞給該函數時發生了變化(在調用者中也發生了變化)的值。 – lukegravitt

回答

2

對於變量b,您傳遞一個對其內存位置的引用。通過這種方式,更改函數funk中的該變量將更改Main中聲明的變量b的相同內存位置中的值。其餘值更簡單。

你有

3 as the result of the call to funk(a, ref b) 
1 as the original value of a (not changed inside funk) 
15 as the result of the a*3 assigned to the address of b inside funk 
6

3來自:

double c = a + b; 

//... 
return c; 

這被通過第一WriteLine打印到Console

的15來源於:

double c = a + b; // c == 3 
a = 5; 
b = a * 3; // b == 5 * 3 == 15 

自從你在bref通,你改變呼叫者變量(bMain),其被設置爲15的實際值,然後打印出來由第三個WriteLine

0
  • 3是芬克(一個,參考文獻B)的結果,C返回,它等於3
  • 15爲b的新值,芬克B = A * 3,本地值的內的芬克的內部被設定爲5,b = 5 * 3
    • 因爲b如芬克的ref [erence]參數傳遞它的值可以芬克的內部
0
改變

3是返回的C,whic h是傳遞給函數的2個變量的總和。

1是一個初始化的值,因爲該函數在console.writeline的範圍內沒有返回或改變a。

15是修改過的b,因爲它被傳遞到另一個函數中,因爲它對該函數所做的引用更改也適用於傳遞的變量。