C#变量,方法,参考练习

时间:2013-08-07 16:58:40

标签: c#

我已经对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 个答案:

答案 0 :(得分: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

由于您使用b传递了ref,因此您正在更改调用者变量(b中的Main)的实际值,该变量设置为15,然后由第三个WriteLine打印出来。

答案 1 :(得分: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

答案 2 :(得分:0)

  • 3是funk(a,ref b)的结果,返回c并且等于3.
  • 15是b的新值,在funk b = a * 3内,funk内部的局部值设置为5,b = 5 * 3
    • 因为b作为funk的ref [erence]参数传递,所以它的值可以在funk中改变

答案 3 :(得分:0)

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

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

15是修改后的b,因为它被传递到另一个函数作为参考,对该函数所做的更改也适用于传递的变量。