Pointer als Parameter und Rückgabewert

in C++ machst du das mit einem PointerPointer, etwas so könnte man das machen:
Code:
    float **t_f;
    t_f = new float*[20];
    for(unsigned int i(0);i<20;i++)
        t_f[i] = new float[20];
 
Wie macht man dann das in C++? Da benutzt man doch nicht auch "calloc"? :confused:
Nein, da nimmt man new[].

Allerdings kann man mit new[] natürlich auch nicht direkt ein mehrdimensionales Array anlegen. Es funktioniert analog zu C. Bsp. um ein float Array der Dimension 20x30 anzulegen:
C++:
const int dim1 = 20, dim2 = 30;
float** array2d = new float*[dim1];
for (float** p = array2d; p != array2d + dim1; ++p) {
  *p = new float[dim2];
}
Die Freigabe erfolgt dann mit delete[] in ähnlicher Weise.

Gruß
 
Zuletzt bearbeitet:
deepthroat, ich bezweifle das dein Quelltext einwandfrei läuft.
sizeof(array2D) wir dir die Größe eines float** zurück geben, dieser dürfte 32bit/64bit groß sein(je nach Zielsystem), sizeof(*array2d) wird genau die gleiche größe haben.
würde es sich bei array2d um ein echtes Array handeln, dann würde dir sizeof die Array größe zurückgeben, so aber nur die des Pointers.

mfg
SGSSGene
 
Hmm oder man macht es sich noch viel einfacher und guckt sie an wie der Speicher das wahrscheinlich verarbeiten wird, kommt dann auf die Idee das man das direkt auch so machen kann und rauskommen tut dann folgendes:
C++:
// anlegen (aufm heap)
type* ptr_array(new type[width * height]);

// zugriff (x, y)
ptr_array[y * width + x] = type(...);

// freigeben
delete [] ptr_array;

Tja und wenn man sich das rumspielen ersparen will:
C++:
std::vector< std::vector <type> > array_2d;
... denn sonst machen hier die meisten glaub ich paar Fehler ;)
 
Danke an Alle!:)

Der reservierte Speicher im Heap wird er als Parameter übergeben, damit dieser dann in der betreffenden Funktion genutzt und zurückgeliefert wird?

Denn dieser soll ja über mehrere Funktionen in verschiedenen Dateien nutzbar sein.
 
Zuletzt bearbeitet:
Danke an Alle!:)

Der reservierte Speicher im Heap wird er als Parameter übergeben, damit dieser dann in der betreffenden Funktion genutzt und zurückgeliefert wird?

Denn dieser soll ja über mehrere Funktionen in verschiedenen Dateien nutzbar sein.
Ja. Das wäre eine gute Möglichkeit. Du brauchst den Zeiger aber nicht unbedingt wieder als Funktionswert zurückgeben, denn die Daten werden ja direkt bearbeitet so dass sich z.B. Änderungen auch direkt auswirken.

Gruß
 
Zurück