static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
こんにちは、なぜこのコードの結果が30と30になるのか疑問に思っていますが、何も変わりませんか?ありがとう!
static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
こんにちは、なぜこのコードの結果が30と30になるのか疑問に思っていますが、何も変わりませんか?ありがとう!
関数の増分では、パラメーターは参照ではなく値で渡されるためです。
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の値が渡されているためです。
増分をaccept(ref int)に変更して呼び出した場合、increment (ref x)
それは変更されます
あなたの増分方法は本質的に全く何もしません。変更された値は返しません。行は1つnum++
インクリメントnum
されますが、その後は何も返されません。したがってnum
、常に同じになります。ref
たとえば、キーワードを使用してrefを渡すことができます
static void increment (ref int num)
{
num++;
}
31
これにより、2回目のwriteline呼び出しで表示されるnumの値が変更されます。
int
は値型だからです。参照によって渡されません。値によって渡されます(コピーが作成され、メソッドに渡されます)。したがって、メソッドのnum
パラメータを変更しても、呼び出し元のコードincrement
の値には影響しません。メソッドで変更されるのは値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);
}
その理由は、参照ではなく値でnum変数を渡したためです。値を渡す場合、変数の値がローカルコピーにコピーされ、ローカルコピーがインクリメントされますが、メソッドの終了後に破棄されます。参照によって変数を渡す場合、変数のアドレスがメソッドに渡され、元の変数が変更されますが、そのコピーは変更されません。
static void increment (ref int num)
{
num++;
}
そして、このメソッドを次のように呼び出します
increment(ref x);
is値型であり、他のすべてのint
値型と同様に、キーワードref
が使用されていない場合は常に値によって渡されます。これらとは異なり、クラスタイプは参照として渡され、メソッドでそれらを変更すると元のオブジェクトが変更されます。
xはローカルで定義されます。
印刷しようとするConsole.WriteLine(num);
とincrement (int num)
31を印刷します。
intは値型であるため、パラメーターをrefとして宣言する必要があります。
static void increment (ref int num)