我在发送变量时是否可以更改变量?

时间:2011-12-25 01:54:42

标签: c#

我的意思是

double x=5;
double k=Func(x+3.5,h+1.2);//I send x=8.5
double y=x;//x=5;

我想在发送时更改它。

double x=5;
double k=Func(x+3.5,h+1.2);
double y=x;//x=8.5

有可能吗?

3 个答案:

答案 0 :(得分:3)

请不要这样做。是的。这是我的答案。

然而,可能是,因为根据定义的带有副作用的赋值语句可以用作表达式。我删除了似乎不适用的额外代码。

void Func (double _x) {
    // do nothing
    // _x = 8.5 when invoked from below
}
double x = 5;
Func(x = x + 3.5);  // or Func(x += 3.5)
// x = 8.5

以上[几乎总是] 很多使用赋值更好地编写 - 因此副作用 - 与函数调用本身分开保存:(在大多数两种形式都有相同的语义。)

x += 3.5;
Func(x);

快乐的编码。


如果你希望使用out / ref,请记住仅使用变量作为out / ref参数:表达式x + 3.5不是变量 - 无法分配给 - 并因此不适合。 (我相信VB.NET也允许属性。)

void Add(ref double _y, double s) {
    // _y = 5
    _y += s;
    // _y = 8.5
}
double y = 5;
Add(ref y, 3.5);
// y = 8.5 

答案 1 :(得分:1)

也许是这样的:

double x=5;
double k=Func(x+=3.5,h+1.2);
double y=x;//x should be 8.5

这种方式x在调用函数之前求值为8.5。

但是,请问为什么需要这样做?

答案 2 :(得分:1)

您的问题是您通过副本而不是引用传递x变量。这就是为什么在你的函数完成后x仍然是5。你应该改变你的功能h:
h(int x, int y)

h(int * x, int *y)

编辑:

使用指针传递变量x并对其执行所有操作。如果没有指针,该函数会创建变量x的副本并对其进行处理,然后在函数结束时销毁它。所以真正的x没有被修改。

指针和引用一起工作。使用指针声明函数并使用引用

传递变量