static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
您好,我很奇怪,爲什麼這個代碼的結果是和,NO什麼變化嗎?謝謝!爲什麼這段代碼的結果是一樣的?
static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
您好,我很奇怪,爲什麼這個代碼的結果是和,NO什麼變化嗎?謝謝!爲什麼這段代碼的結果是一樣的?
,參數是按值傳遞,而不是參考。
如果你想看到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);
}
因爲int
是value 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);
}
謝謝!雖然我失去了很多聲望,但仍然樂意得到答案! – user2049259 2013-03-12 09:24:27
@ user2049259 one downvote不是很多聲望:) – 2013-03-12 09:25:52
原因是因爲int的值被傳遞,而不是參考。
如果更改增量接受(REF INT),並稱之爲 - increment (ref x)
它會改變它
謝謝!雖然我失去了很多聲望,但仍然樂意得到答案! – user2049259 2013-03-12 09:23:26
希望你不錯,謝謝你會回來:) – NDJ 2013-03-12 09:25:42
你增量法本質上絕對沒有。它不返回修改後的值。 num++
行會將num
增加1,但您不會從中返回任何內容。所以num
將永遠是一樣的。你可以使用關鍵字ref
例如
static void increment (ref int num)
{
num++;
}
這將改變NUM的對你的第二個電話的WriteLine給你31
值由參傳遞。
謝謝!雖然我失去了很多聲望,但仍然樂意得到答案! – user2049259 2013-03-12 09:22:30
原因是你已經通過值而不是通過引用傳遞num變量。按值傳遞時,變量的值將被複制到本地副本中,然後本地副本將增加,但方法結束後會被銷燬。如果你通過引用傳遞你的變量,那麼變量的地址被傳遞給方法,並且原始變量被改變,而不是它的副本。
static void increment (ref int num)
{
num++;
}
然後調用此方法
increment(ref x);
的int
是值類型,像所有其他值類型總是按值傳遞的,如果關鍵詞ref
不被使用。與這些不同,類類型作爲引用傳遞,並且在方法中更改它們會更改原始對象。
x是局部定義的。
如果試圖在increment (int num)
打印Console.WriteLine(num);
它會因爲功能增加打印31
INT是值類型,你需要聲明的參數作爲參考:
static void increment (ref int num)
請參考基本教程 – 2013-03-12 09:07:04
嘗試初始化外部方法 – Kiran 2013-03-12 09:12:39
儘管我失去了很多聲望,但stil我很高興得到答案! – user2049259 2013-03-12 09:25:08