Wie kann man array Elemente Zählen?? wie bei PHP cont??



  • Hi,
    wenn ich einen Array declariere z.B.

    int array[][4];
    

    wie kann ich die Anzahl der Vorhanden Elemente testen ??
    also

    array[x]

    so würde es in PHP aussehen

    i=count(i = count(array);

    Wie macht man das jetzt in C/C++??

    thx
    wdsl



  • sizeof(array) / sizeof(array[0])
    und
    sizeof(array) / sizeof(typ_von_array)

    Funktionier aber nur mit Arrays nicht mit Zeigern.



  • AnsiString LegalRootFiles[][3];

    ===========>

    int count = sizeof(LegalRootFiles) / sizeof(AnsiString);

    Stimmt das so??
    weil ich bekomme einen Fehler
    Kein Zulässiger Typ.

    mfg
    wdsl



  • Wenn das wirklich so im Quelltext steht, steht die Groesse des Arrays ja <edit>zur Compilezeit</edit> auch nicht fest. Da musst Du schon

    AnsiString LegalRootFiles[10][3];
    

    o.ae. schreiben.



  • gibt sizeof nicht die Größe zur Laufzeit wieder?

    Mein Problem ist ja ich möchte feststellen wieviele Array vorhanden sind zu Laufzeit weil sie auch zur Laufzeit erstellet werden. Bei PHP ist dies auch möglich leider weis ich nicht wie man das C/C++ macht.

    mfg
    wdsl



  • aösp nochmal als kleines Resüme:

    zunächst mal zu sizeof:

    sizeof ist ein Operator, der nix anderes macht, als die Größe des verwendeten Datentypes zurückzugeben. So wird sizeof (char) oder sizeof (bool) 1 sein während sizeof (int) wahrscheinlich 4 zurückliefern würde, weil ein int 4 bytes groß ist. Bei elementaren Datentypen macht sizeof nicht den megasinn, interessant wird es wenn du strukturen oder klassen erstellst und jeweils die größe haben willst. In den meisten fällen ist es auch egal, ob du den Datentyp angibst oder deinen Bezeichner. Meistens heisst hier bei den elementaren datentypen und bei Strukuren, die über keine Zeichenketten verfügen. Sobald chars oder strings ins Spiel kommen, wird es komplizierter. Der Trick mit sizeof ist eigendlich einfach:
    Wenn du eine Menge voller Äpfel hast und die jetzt kleinschneidest (in gleich große Stücke) kannst du dir merken, wie viele Stücke zu einem Apfel gehören. Teilst du nun die gesamtanzahl deiner Stücke durch die Stücke die zu einem Apfel gehören, bekommst du wiederum die Anzahl der ganzen Äpfel. Du siehst das ganze ist ein rein mathematisches Problem. Die Stücke der Apfel ist dein Datentyp, welcher deinem Array zu grunde liegt. Nen int hätte hier 4 Stücke, nen char nur ein stück usw. Wenn du nun deine Menge von Daten die du hast durch die größe deines Types teilst, bekommst du die Anzahl der Elemente in deinem Array.
    Bevor ich mich noch mehr verquatsche...weiter zum nächsten

    Arrays und Zeiger:

    Im Gegensatz zu Zeigern sind arrays statisch. Das heisst, eine dynamische Speicherverwaltung wie es mit Zeigern möglich ist (du fragst nach wie viel speicher du brauchst, reservierst diesen und schreibst die daten) ist mit arrays nicht möglich. Von daher sollte die Datenmenge von vorn herein feststehen. Es gibt zwar noch die Möglichkeit über Initialisierungslisten einen array teils dynamisch zu machen, allerdings setzten diese wiederum voraus, dass die daten im quelltext eingegeben werden und die anzahl dadurch auch wieder bekannt sein müsste. Wenn du also dynamisch mit arrays arbeiten willst, musst du dich den zeigern bedienen. du kannst übrigens deinen zeiger ganz einfach in einen array umwandeln. Array und Zeiger sind zwar nicht das selbe, doch wird ein Array eh in einen Zeiger umgewandelt, wenn der quellcode compiliert wird. Von daher hast du dadurch keine nachteile. Wie bei einem Array kannst du die größe auch hier durch den sizeof operator zurückliefern lassen. Das gilt hier sogar in besondernen maße, da der sizeof operator hier auch auf mehrdimensionale zeiger angewandt werden kann (zeiger auf zeiger). Die Abfrage musst du nur in einer for-schleife bewerkstelligen, deren maximaler index die anzahl der elemente in dem eindimensionalen array ist. Stell dir das ganze vor wie eine matrix (du musst für jede zeile jede spaltenzeile überprüfen).

    so und nun viel spass beim knobeln....



  • Wenn die Implementierung Die gehört kann Dir vllt. std::vector helfen.


Anmelden zum Antworten