C# 在I';我寄出去了?

C# 在I';我寄出去了?,c#,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 这样x在调用函数之前计算为8.5 但是,我可以问一下为什么需要这样做吗?可能是这样的: double x=5; double k=Func(x+3.5,h+1.2); double

我是说

我想在发送时更改它

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
这样
x
在调用函数之前计算为8.5


但是,我可以问一下为什么需要这样做吗?

可能是这样的:

double x=5;
double k=Func(x+3.5,h+1.2);
double y=x;//x=8.5
这样
x
在调用函数之前计算为8.5


但是,我可以问一下为什么需要这样做吗?

您的问题是您通过复制而不是引用来传递x变量。这就是为什么函数完成后x仍然是5。您应该将函数h从:
h(整数x,整数y)


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

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


指针和引用一起工作。您使用指针声明函数,并通过引用传递变量

您的问题是通过复制而不是引用传递x变量。这就是为什么函数完成后x仍然是5。您应该将函数h从:
h(整数x,整数y)


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

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


指针和引用一起工作。使用指针声明函数,并通过引用传递变量。请不要这样做。是。这就是我的答案

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

h(int * x, int *y)
上述内容[几乎总是]在赋值时编写得更好,因此副作用与函数调用本身是分开的:(在大多数情况下,两种形式具有相同的语义)

快乐编码


如果您确实希望使用
out
/
ref
,请记住,使用变量作为
out
/
ref
参数才有意义:表达式
x+3.5
不是一个变量——它不能被赋值——因此不合适。(我相信VB.NET也允许属性。)


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

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

h(int * x, int *y)
上述内容[几乎总是]在赋值时编写得更好,因此副作用与函数调用本身是分开的:(在大多数情况下,两种形式具有相同的语义)

快乐编码


如果您确实希望使用
out
/
ref
,请记住,使用变量作为
out
/
ref
参数才有意义:表达式
x+3.5
不是一个变量——它不能被赋值——因此不合适。(我相信VB.NET也允许属性。)


那么
h
呢?您似乎在声明一个
双h
,然后在调用该方法之前使用该
h
并添加
1.2
。这是我的错误。不是h而是
k=Func(…)h-另一个参数。如果有可能改变x,我会对h使用相同的方法。你的评论和代码不一致。这个问题被标记为C#,但是下面使用了一些指针?不大可能发生的(闻起来像C/C++,但可能“不安全”)。请在问题中发布完整的代码和错误消息,包括
Func
,并验证标记。那么
h
呢?您似乎在声明一个
双h
,然后在调用该方法之前使用该
h
并添加
1.2
。这是我的错误。不是h而是
k=Func(…)h-另一个参数。如果有可能改变x,我会对h使用相同的方法。你的评论和代码不一致。这个问题被标记为C#,但是下面使用了一些指针?不大可能发生的(闻起来像C/C++,但可能“不安全”)。请在问题中发布完整的代码和错误消息,包括
Func
,并验证标记。我调用function1,然后更改值h,x。然后我调用函数2,然后改变值h,x。然后我调用函数3,然后改变值h,x。所以它将是7行。但是当我在函数调用中更改值时,我只需要3行。如果你只是想在行上剪切,那么我的答案就足够了。但是,如果您还想更改函数中变量的值,那么应该看看Adel Boutros的答案。请记住,更少的行并不总是转换为“更好”的代码,在函数调用中更改变量的值会使代码更难“读取”。如果我的函数是
func(double*a,double*b)
并且我有一个方法
get(double*x,double*y)
double alha=func内部调用(*x+h/2,*y+h/3)
为什么我总是出错?我认为你还不太了解指针。如果你不想改变函数中变量的值,那么你就不需要指针,去掉所有的
*
,看看我的答案。如果你需要指针,那么我建议你在这里读更多:我调用函数1,然后改变值h,x。然后我调用函数2,然后更改值h,x。然后我调用函数3,然后更改值h,x。所以它将是7行。但是当我在函数调用中更改值时,我只需要3行。如果您只是尝试在行上剪切,那么我的答案应该就足够了。但是,如果您还希望更改函数中变量的值,你应该看看阿德尔·布特罗斯的答案