-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

由于您传入bwith ,因此您正在更改调用者变量 ( in )ref的实际值,该值被设置为 15,然后由第三个 打印出来。bMainWriteLine

于 2013-08-07T17:01:13.843 回答
2

对于变量 b,您将 a 引用传递给它的内存位置。这样,在函数内部更改该变量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 是 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 回答
0

3 是返回的 C,它是传递给函数的 2 个变量的总和。

1 是 a 的初始化值,因为该函数不会在 console.writeline 的范围内返回或更改 a。

15 是修改后的 b,因为它作为引用传递给另一个函数,在该函数中对其进行的更改也适用于传递的变量。

于 2013-08-07T17:08:50.820 回答