Da Sie C++ verwenden, wenn Sie möchten xc und yc Zum Ändern können Sie Referenzen verwenden:
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);
// ...
}
Wenn Sie dagegen C verwenden, müssten Sie explizite Zeiger oder Adressen übergeben, wie zum Beispiel:
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);
/* ... */
}
Ich würde empfehlen, sich die anzuschauen C++ FAQ Lite-Eintrag zu Referenzen für weitere Informationen zur richtigen Verwendung von Referenzen.
wenn ich c++ verwende, sollte ich hauptsächlich mit trans(x, y, theta, &xc, &yc) oder trans(x, y, theta, xc, yc) aufrufen;
– Lisa
9. November 2009 um 1:39 Uhr
Chris Jester-Young
Das Übergeben als Referenz ist in der Tat eine richtige Antwort, C++ erlaubt jedoch die Verwendung von Rückgaben mit mehreren Werten std::tuple und (für zwei Werte) 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);
}
Auf diese Weise müssen Sie überhaupt keine Out-Parameter verwenden.
Auf der Anruferseite können Sie verwenden std::tie um das Tupel in andere Variablen zu entpacken:
using std::tie;
double xc, yc;
tie(xc, yc) = trans(1, 1, M_PI);
// Use xc and yc from here on
Hoffe das hilft!
Sie müssen Ihre Variablen als Referenz übergeben, was bedeutet
Wie oben gesagt, müssen Sie als Referenz übergeben, um geänderte Werte von ‘m’ und ‘n’ zurückzugeben, aber … ziehen Sie in Betracht, alles als Referenz zu übergeben und const für die Parameter zu verwenden, die nicht in Ihrer Funktion geändert werden sollen, dh
Verwandte Fragen: stackoverflow.com/questions/410593/pass-by-reference-value-in-c, stackoverflow.com/questions/1322517/…
– aussen
9. November 2009 um 1:34 Uhr