2013-03-12 98 views
0
static void increment(int num) 
{ 
    num++; 
} 

static void Main(string[] args) 
{ 
    int x = 30; 
    Console.WriteLine(x); 
    increment(x); 
    Console.WriteLine(x); 
} 

您好,我很奇怪,爲什麼這個代碼的結果是和,NO什麼變化嗎?謝謝!爲什麼這段代碼的結果是一樣的?

+7

請參考基本教程 – 2013-03-12 09:07:04

+0

嘗試初始化外部方法 – Kiran 2013-03-12 09:12:39

+0

儘管我失去了很多聲望,但stil我很高興得到答案! – user2049259 2013-03-12 09:25:08

回答

4

,參數是按值傳遞,而不是參考。

如果你想看到X變化,無論是做

static int increment (int num)//parameter passed by value, but function now returns an incremented value, not void. 
    { 
     num++; 
     return num; 
    } 
     static void Main (string[] args) 
    { 
     int x=30; 

     Console.WriteLine(x); 
     x = increment(x); 
     Console.WriteLine(x); 
    } 

static void increment (ref int num)//num is passed by ref now 
    { 
     num++; 
    } 
     static void Main (string[] args) 
    { 
     int x=30; 

     Console.WriteLine(x); 
     increment(ref x); 
     Console.WriteLine(x); 
    } 
0

因爲intvalue type。它不通過引用傳遞。它通過值傳遞(複製創建並傳入方法)。因此,increment方法中對num參數的任何修改都不會影響調用代碼中的x的值。只有x值的副本修改爲increment方法。

static void increment(int num) // here you have copy of x 
{ 
    num++; // copy is modified 
} 

static void Main(string[] args) 
{ 
    int x = 30; 
    Console.WriteLine(x); 
    increment(x); // x stays here and not passed into method 
    Console.WriteLine(x); 
} 
+0

謝謝!雖然我失去了很多聲望,但仍然樂意得到答案! – user2049259 2013-03-12 09:24:27

+1

@ user2049259 one downvote不是很多聲望:) – 2013-03-12 09:25:52

1

原因是因爲int的值被傳遞,而不是參考。

如果更改增量接受(REF INT),並稱之爲 - increment (ref x)它會改變它

+0

謝謝!雖然我失去了很多聲望,但仍然樂意得到答案! – user2049259 2013-03-12 09:23:26

+0

希望你不錯,謝謝你會回來:) – NDJ 2013-03-12 09:25:42

1

你增量法本質上絕對沒有。它不返回修改後的值。 num++行會將num增加1,但您不會從中返回任何內容。所以num將永遠是一樣的。你可以使用關鍵字ref例如

static void increment (ref int num) 
{ 
    num++; 
} 

這將改變NUM的對你的第二個電話的WriteLine給你31值由參傳遞。

+0

謝謝!雖然我失去了很多聲望,但仍然樂意得到答案! – user2049259 2013-03-12 09:22:30

0

原因是你已經通過值而不是通過引用傳遞num變量。按值傳遞時,變量的值將被複制到本地副本中,然後本地副本將增加,但方法結束後會被銷燬。如果你通過引用傳遞你的變量,那麼變量的地址被傳遞給方法,並且原始變量被改變,而不是它的副本。

static void increment (ref int num) 
    { 
     num++; 
    } 

然後調用此方法

increment(ref x); 

int是值類型,像所有其他值類型總是按值傳遞的,如果關鍵詞ref不被使用。與這些不同,類類型作爲引用傳遞,並且在方法中更改它們會更改原始對象。

0

x是局部定義的。

如果試圖在increment (int num)

打印Console.WriteLine(num);它會因爲功能增加打印31

0

INT是值類型,你需要聲明的參數作爲參考:

static void increment (ref int num)