当我更改函数内部的参数时,它也会为调用者更改吗?

当我更改函数内部的参数时,它也会为调用者更改吗?

我在下面写了一个函数:

void trans(double x,double y,double theta,double m,double n){
    m=cos(theta)*x+sin(theta)*y;
    n=-sin(theta)*x+cos(theta)*y;}

如果我在同一个文件中调用它们

trans(center_x,center_y,angle,xc,yc);

会的价值xcyc改变?如果没有,我该怎么办?


江户川乱折腾
浏览 544回答 3
3回答

三国纷争

由于您使用的是C ++,如果您想要xc和yc更改,您可以使用引用:void trans(double x, double y, double theta, double& m, double& n){     m=cos(theta)*x+sin(theta)*y;     n=-sin(theta)*x+cos(theta)*y;}int main(){     // ...      // no special decoration required for xc and yc when using references     trans(center_x, center_y, angle, xc, yc);     // ...}如果您使用C,则必须传递显式指针或地址,例如:void trans(double x, double y, double theta, double* m, double* n){     *m=cos(theta)*x+sin(theta)*y;     *n=-sin(theta)*x+cos(theta)*y;}int main(){     /* ... */     /* have to use an ampersand to explicitly pass address */     trans(center_x, center_y, angle, &xc, &yc);     /* ... */}我建议查看C ++ FAQ Lite的参考文献,以获取有关如何正确使用引用的更多信息。

慕村225694

通过引用传递确实是一个正确的答案,但是,C ++ sort-of允许使用std::tuple和(对于两个值)返回多值std::pair:#include&nbsp;<cmath>#include&nbsp;<tuple>using&nbsp;std::cos;&nbsp;using&nbsp;std::sin;using&nbsp;std::make_tuple;&nbsp;using&nbsp;std::tuple;tuple<double,&nbsp;double>&nbsp;trans(double&nbsp;x,&nbsp;double&nbsp;y,&nbsp;double&nbsp;theta){ &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;m&nbsp;=&nbsp;cos(theta)*x&nbsp;+&nbsp;sin(theta)*y; &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;n&nbsp;=&nbsp;-sin(theta)*x&nbsp;+&nbsp;cos(theta)*y; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;make_tuple(m,&nbsp;n);}这样,您根本不必使用out参数。在调用者方面,您可以使用std::tie将元组解压缩为其他变量:using&nbsp;std::tie;double&nbsp;xc,&nbsp;yc;tie(xc,&nbsp;yc)&nbsp;=&nbsp;trans(1,&nbsp;1,&nbsp;M_PI);//&nbsp;Use&nbsp;xc&nbsp;and&nbsp;yc&nbsp;from&nbsp;here&nbsp;on希望这可以帮助!

慕田峪4524236

您需要通过引用传递变量,这意味着void&nbsp;trans(double&nbsp;x,double&nbsp;y,double&nbsp;theta,double&nbsp;&m,double&nbsp;&n)&nbsp;{&nbsp;...&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP