当我改变一个函数内的参数时,是否也改变了调用者?

我已经写了一个函数如下:

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的值会改变吗? 如果不是,我该怎么办?

由于您使用的是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); /* ... */ } 

我build议查阅C ++ FAQ Lite的参考资料 ,了解如何正确使用引用的更多信息。

按引用传递确实是一个正确的答案,但是,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将元组解包到其他variables中:

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

希望这可以帮助!

你需要通过引用来传递你的variables

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

如上所述,您需要通过引用来传递“m”和“n”的更改值,但是…考虑通过引用传递所有内容,并使用const来指定您不希望在函数内部进行更改的参数

 void trans(const double& x, const double& y,const double& theta, double& m,double& n)