我已经对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来自哪里?
答案 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 :(得分:0)
3是返回的C,它是传递给函数的2个变量的总和。
1是一个初始值,因为该函数不会在console.writeline的范围内返回或更改。
15是修改后的b,因为它被传递到另一个函数作为参考,对该函数所做的更改也适用于传递的变量。