Multiple Rückgabe/Derefferenzieren
-
Moinsen,
ich beschäftige mich gerade mit C++ und habe eine Funktion, die mehrere Rückgaben haben soll. Das ganze passiert mit dem Aufruf
calcPos(dt, nx, ny, nBeam, nDeg, &sPos, &dPos);
dt, sind unputdaten, nx, ny, nBeam und nDeg konstanten (int) und sPos bzw dPos sollen rauskommen (double mit Sternchen).
Leider bekomme ich es nicht, dass ich nach dem Funktionsaufruf auch die selben Daten zur Verfügung habe, wie innerhalb der Funktion calcPos. Wie bekommt man sowas am besten gelöst? Ich würde danach gerne auf einzelne Elemente aus sPos und dPos zugreifen, um damit weiterzuarbeiten.MfG
-
Gibt doch bitte mal die Signatur von
calcPos
an! Wie wird das ArraysPos
/dPos
erzeugt?
-
Signatur aus dem h-file:
void calcPos(double* image, int nx, int ny, int nBeam, int nDeg, double* sourceP, double* detectorP);
Bisher:
double sPos; double dPos;
da ich nicht weiss, wie man das geschickter macht. Ich dachte man kann den Inhalt von sPos bzw sourceP nach dem Funktionsaufruf irgendwie casten, das klappt aber nicht.
Was ich machen möchte ist, dass ein Array beschrieben wird. Habe aber leider nicht genug Erfahrung (wie mir scheint), um mit den Sternchen und dem Derefferenzieren vernünftig umzugehen.
-
EDIT: Hab nicht richtig gelesen
Bin Anfang und weiß nicht genau was du meist.
Hier ein Beispiel.Vllt hilf es dir:
#include <iostream> using namespace std; void calcPos(int a, int* sPos, int* dPos); int main(){ int a[2] = {5,4}; int b[2] = {10,8}; calcPos(10,a ,b); cout << a[0] << " " << a[1] << " " << b[0] << " " << b[1] << endl; cin.get(); return 0; } void calcPos(int a, int* sPos, int* dPos){ sPos[0] += 1; sPos[1] += 2; dPos[0] += 1; dPos[1] += 2; }
-
Die Funktion calcPos arbeitet intern mit Indizes, das geht mit Referenzen scheinbar nicht (Compilern fängt an zu weinen).
-
JonnyTJay schrieb:
Bisher:
double sPos; double dPos;
Wie soll darauf mit einem Index zugegriffen werden? Das sind keine Arrays.
-
Was ich machen möchte ist, dass ein Array beschrieben wird
Dazu musst du ein Array erzeugen.
-
Ist ja ein Teil meines Problems.
Hmpf, ich dachte bisher, wenn ich ein pointer übergebe, bekomme ich am Ende nichts zurück, weil der Speicher woanders allokiert wird.
Ist es nun richtig, dass wenn ich er den Speicher mit
double* ssPos = (double *)malloc(2*nDeg*nBeam*sizeof(double)); double* ddPos = (double *)malloc(2*nDeg*nBeam*sizeof(double));
allokiere und dann den Aufruf per
calcPos(dt, nx, ny, nBeam, nDeg, ssPos, ddPos);
durchführe, all in der Funktion erzeugten Daten in ssPos und ddPos wieder "rauskommen"?
-
Ja, tun sie. Peinlich peinlich, aber wieder was gelernt