Ein seltsames Array kopieren
-
Ich habe eine Funktion zu implementieren und dazu brauche ich eine Kopie des übergebenen Parameters. Jedoch ist der Typ davon sehr seltsam, bzw. ich weiß nicht wie der Pointer zu casten ist, damit das funktioniert.
Die Funktion sieht zunächst einmal so aus:
static void whatever(float (*a)[3], int len) { ... }
Nun wollte ich eine Kopie von dem Array innerhalb der Funktion anlegen. Allerdings schaffe ich es nicht den Pointer korrekt zu casten, bzw. fehlt mir die Vorstellungskraft wie dieses Array überhaupt verschachtelt ist. Es sollte ein Pointer auf ein Array von float-Arrays der Länge 3 sein.
float (*copy)[3]; copy = ??? malloc(sizeof(float[3])*len);
Nur egal was ich ausprobiert hatte, ich bekam immer ärger mit dem Compiler.
-
copy = (float(*)[3]) malloc(sizeof(float[3])*len);
Allerdings wäre das mit einem typedef wahrscheinlich einfacher.
-
Danke. Nur frage ich mich jetzt wo diese seltsame Syntax herstammt, bzw. wie man die in Worten lesen könnte. Erscheint mir auf den ersten Blick nicht sehr logisch. Also insbesondere wozu die Klammer um (*) da ist.
-
Mal ohne Gewehr
float copy[3]; int len_copy; copy[0] = *(a[0]); copy[1] = *(a[1]); copy[2] = *(a[2]); len_copy = len;
-
Ohne die klammern wäre es ein Array bestehend aus 3 float-Zeigern
So ist es ein Zeiger auf einen Array bestehend aus 3 floats
Klar?