我的意思是
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
有可能吗?
答案 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没有被修改。
指针和引用一起工作。使用指针声明函数并使用引用
传递变量