länge eines array



  • Arrays sind doch Zeiger... die Berechnung von numElementsOfArray macht nur Sinn wenn "Array" ein Zeiger auf ein Array ist.

    wenn ich die Anzahl der Elemente eines Funktionszeigers ausrechne brauche ich nicht erwarten, das dabei etwas Sinnvolles herauskommt - das meinte ich mit wilde Zeiger



  • Gehts bei Char nicht mit

    strlen(const char*)
    

    ??
    Wie es bei anderen Sachen geht habe ich keine Ahnung, zur not halt selber ne Schleife schreiben und warten bis das "elemnt" NULL oder \0 kommt??
    Gruß eXitus



  • Vertexwahn schrieb:

    Arrays sind doch Zeiger...

    Nein...

    int Array[10];// Kein Zeiger
    

    die Berechnung von numElementsOfArray macht nur Sinn wenn "Array" ein Zeiger auf ein Array ist.

    Eigentlich gibt es keine Zeiger auf ein Array. Nur Zeiger auf den Anfangswert eines Arrays.

    wenn ich die Anzahl der Elemente eines Funktionszeigers ausrechne brauche ich nicht erwarten, das dabei etwas Sinnvolles herauskommt - das meinte ich mit wilde Zeiger

    Ein wilder Zeiger ist z.B. das

    int* i = new int; // i zeigt auf einen Speicherbereich
    delete i; // Dieser Speicherbereich wird gelöscht
    // Nun zeigt i immer noch auf den gelöschten Speicherbereich -> Wilder Zeiger
    

    Die Berechnung von "numElements" klappt nur, wenn Array ein nicht-dynamisches Array ist.
    EDIT: Blöder Satz -- gestrichen -- 🙂



  • eXitus schrieb:

    Wie es bei anderen Sachen geht habe ich keine Ahnung, zur not halt selber ne Schleife schreiben und warten bis das "elemnt" NULL oder \0 kommt??

    Du gehst davon aus, dass nicht allokierter Speicher automatisch auf NULL steht. Das muss aber nicht unbedingt so sein. Ausserdem würde so ein NULL-Element ja hinter den Arraygrenzen liegen. Und sobald du über diese Grenzen hinaus gehst, kann dein Programm jeden Moment vom OS gekillt werden :).



  • ich bin davon ausgegeangen, dass du sowa wie

    int array[100]
    

    hast, und wissen willst, wie viel davon besetzt ist. Und ich habe geseagt, weil ich gedacht habe, dass du das wissen willst, das du bis zu dem Terminationszeicvhen des Arrays in einer Schleife suchst. Ich hab dich aber lweider wahrscheinlich missverstanden sry

    Gruß eXitus



  • eXitus schrieb:

    Gehts bei Char nicht mit

    strlen(const char*)
    

    ??
    Wie es bei anderen Sachen geht habe ich keine Ahnung, zur not halt selber ne Schleife schreiben und warten bis das "elemnt" NULL oder \0 kommt??
    Gruß eXitus

    strlen ist aber nur für null-terminierte Strings gedacht. Für "normale" Arrays ist das natürlich absoluter Käse, genauso wie die iterative Nullzeichen Suche.

    godlikebot schrieb:

    Du gehst davon aus, dass nicht allokierter Speicher automatisch auf NULL steht. Das muss aber nicht unbedingt so sein. Ausserdem würde so ein NULL-Element ja hinter den Arraygrenzen liegen.

    Ähnlicher Käse.

    eXitus schrieb:

    Und ich habe geseagt, weil ich gedacht habe, dass du das wissen willst, das du bis zu dem Terminationszeicvhen des Arrays in einer Schleife suchst.

    Siehe oben. Ein Array hat kein Terminationszeichen. Alles andere ist Definitionssache.



  • okok, ich hab scheisse geschwallt, ´nur bitte nicht so beachten, ich terminier meine Arrays immer (immer ein NULL oder /0 am Schluss), dann kann man das auch ganz leicht machen....

    Gruß eXitus



  • Hallo

    ich mal dieses Template mal gefunden :

    // Template zum Ermitteln der Länge des festen Arrays
    template<class T, std::size_t N>
    std::size_t countem(T (&)[N])
    {
      return N;                             // Länge zurückgeben
      }
    
    // anwenden :
    int x[10];
    std::size_t y = countem<>(x);
    

    Ich finde das sehr praktisch, auch wenn ich kaum noch feste Arrays einsetze.

    bis bald
    akari



  • Stand der Aufruf tatsächlich so im Beitrag? Richtigerweise reicht folgendes vollkommen aus

    std::size_t y = countem(x);
    


  • Hallo

    Stand der Aufruf tatsächlich so im Beitrag? Richtigerweise reicht folgendes vollkommen aus

    nein, denn Aufruf habe ich mir selber als Beispiel schnell zusammengeschrieben. Natürlich kann man die Klammern weglassen. Immerhin weiß man mit Klammern sofort, das es ein Template ist.

    bis bald
    akari


Anmelden zum Antworten