Noch ein Array-Problem



  • wie schaffe ich es denn, herauszufinden wielang ein Array von Objekten ist?

    mit sizeof(ganzesArray)/sizeof(ganzesArray[0]) ging es irgendwie nicht...
    dabei is das zweite sizeof nämlich größer als das erste...



  • DaHunger schrieb:

    mit sizeof(ganzesArray)/sizeof(ganzesArray[0]) ging es irgendwie nicht...
    dabei is das zweite sizeof nämlich größer als das erste...

    Dann ist ganzesArray vermutlich kein Array, sondern nur ein Zeiger.



  • Diese Konstruktion funktioniert unter gegebenen Voraussetzungen (d.h. nur solange du das Array direkt vor Ort hast). Und es ist die einzige portable Lösung des Problems:

    int count(double arr[])
    {
      //funktioniert nicht - arr ist ein Pointer, also bekommst du idR 1 zurück
      return sizeof(arr)/sizeof(arr[0]);
    }
    
    //funktioniert
    double array[100];
    int arr_size=sizeof(array)/sizeof(array[0]);
    

    Wenn du ein Array viel durch die Gegend reichen willst, kannst du dessen Größe entweder überall mitgeben oder du nimmst Container für diesen Zweck - vector<> und Co. haben eine Methode size() dafür.



  • Ist das ein Sport bei euch wer schneller auf threads antwortet? 😃

    Spaß beiseite, danke für die schnelle Antwort !

    Mein Array ist quasi ein Attribut einer Klasse,
    dessen Größe später festgelegt wird in einer Operation.

    Funktioniert das sizeof also direkt nach der Initialisierung des Objekt-Arrays in der Operation?

    Okay ich probier eben mal weiter rum!



  • Mehr Input!

    Wenn Dein Array ein Member eine Klasse ist, dessen Größe später festgelegt wird, ist es vermutlich garkein Array, sondern nur ein Zeiger, dem später ein Array auf dem Heap zugewiesen wird. Dann liefert sizeof Dir die Größe eines Zeigers.

    Funktioniert das sizeof also direkt nach der Initialisierung des Objekt-Arrays in der Operation?

    Sizeof auf einem Array liefert immer die Größe des Arrays, auf einem Zeiger immer die eines Zeigers. Mit Initialisierung / Operation hat das nichts zu tun.

    BTW: In welcher Operation überhaupt?



  • Ok ich hab das Problem gelöst,
    direkt nach der Initialisierung des Arrays funktioniert das sizeof

    das Array wird durch eine Operation einem Objekt zugewiesen.
    In dieser Operation funktioniert es wiederum nicht mehr.
    Also wird direkt an der Stelle an der das Array seine größe bekommt die Länge ausgerechnet und dann der Operation mitgegeben

    Puh, wenn nochmal jemand behauptet der Umstieg von Java auf c++ und anders herum sei kein Problem... Zumindest in meiner Richtung ist das nicht gar so einfach 😉 Von der Programmlogik zwar schon aber man muss bei c++ viel mehr beachten. Aber an sich find ich die Sprache schöner 😃 (also c++ > Java)

    Gruß DaHunga



  • DaHunger schrieb:

    Ist das ein Sport bei euch wer schneller auf threads antwortet? 😃

    Wenn du schon so fragst: Ja 😃

    Mein Array ist quasi ein Attribut einer Klasse,
    dessen Größe später festgelegt wird in einer Operation.

    Funktioniert das sizeof also direkt nach der Initialisierung des Objekt-Arrays in der Operation?

    sizeof wird vom Compiler ausgewertet, d.h. du bekommst nur dann korrekte Werte, wenn du das Array direkt vor Ort liegen hast.
    (Randfrage: Wie initialisierst du dein Array?)



  • Naja, es kommt direkt per dieser Operation in das Objekt als Parameter übergeben.
    Aber is ja nu eigentlich auch egal oder?^^



  • DaHunger schrieb:

    aber man muss bei c++ viel mehr beachten

    bzw man benutzt einfach vektoren, die verhalten sich doch schon fast wie arrays bei java...
    aber jez ma ehrlich: die anzahl der vertizes soll die erste und wichtigste variable bei deiner ganzen model-klasse werden. (oder was auch immer du grad bastelst) Diese größe brauchst du doch sonst auch andauernd, wäre irgendwie umständlich, die jedes mal mit irgendwelchen sizeof() dingern neuberechnen zu lassen...



  • ja deswegen sollte sie einmal berechnet werden und das wars dann. Das funktioniert aber nicht, da daas Array von außerhalb der klasse kommt. also wird erst die länge berechnet und anschließend das Array an das Objekt übergeben, wo die Länge dann in einem Attrbut steht.

    Und ja es soll so etwas wie eine model Klasse werden... Sie soll eben Normalenvektoren berechnen. Damit hab ich auch in Problem siehe
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-176041.html

    😉



  • Da weiß auf jeden Fall derjenige, der das Array erzeugt hat, dessen genaue Größe - also sollte ER sie dir am besten auch mitteilen 😉

    (oder - auch auf die Gefahr hin, redundant zu werden - nutz' lieber std::vector<> anstelle des Arrays)


Anmelden zum Antworten