为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
江户川乱折腾 2019-07-23 15:09:28
当我更改函数内部的参数时,它也会为调用者更改吗?我在下面写了一个函数: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);会的价值xc和yc改变?如果没有,我该怎么办?
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

由于您使用的是C ++,如果您想要xcyc更改,您可以使用引用:

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的参考文献,以获取有关如何正确使用引用的更多信息。


查看完整回答
反对 回复 2019-07-23
?
慕村225694

TA贡献1880条经验 获得超4个赞

通过引用传递确实是一个正确的答案,但是,C ++ sort-of允许使用std::tuple和(对于两个值)返回多值std::pair

#include <cmath>#include <tuple>using std::cos; using std::sin;using std::make_tuple; using std::tuple;tuple<double, double> trans(double x, double y, double theta){
    double m = cos(theta)*x + sin(theta)*y;
    double n = -sin(theta)*x + cos(theta)*y;
    return make_tuple(m, n);}

这样,您根本不必使用out参数。

在调用者方面,您可以使用std::tie将元组解压缩为其他变量:

using std::tie;double xc, yc;tie(xc, yc) = trans(1, 1, M_PI);// Use xc and yc from here on

希望这可以帮助!



查看完整回答
反对 回复 2019-07-23
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您需要通过引用传递变量,这意味着

void trans(double x,double y,double theta,double &m,double &n) { ... }


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信