-4

私は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 はどこから来たのかということです。

4

4 に答える 4

6

3は次の場所から来ました:

double c = a + b;

//...
return c;

これはConsole最初の経由で出力されWriteLineます。

15 は次のとおりです。

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

で渡すので、呼び出し元変数 ( in ) の実際の値を変更bしています。これは 15 に設定され、3 番目の で出力されます。refbMainWriteLine

于 2013-08-07T17:01:13.843 に答える
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
于 2013-08-07T17:01:04.673 に答える
0

3 は返された C で、関数に渡された 2 つの変数の合計です。

この関数は、console.writeline のスコープ内で a を返したり変更したりしないため、1 は a の初期化された値です。

15 は変更された b です。これは、他の関数に参照として渡されたため、その関数で行われた変更は、渡された変数にも適用されます。

于 2013-08-07T17:08:50.820 に答える
0
  • 3 は funk(a, ref b) の結果で、c が返され、3 に等しくなります。
  • 15 は b の新しい値、funk b の内部 = a * 3、funk の内部の a のローカル値は 5 に設定されました、b = 5 * 3
    • b は funk の ref[erence] パラメータとして渡されるため、その値は funk 内で変更できます。
于 2013-08-07T17:03:14.493 に答える