laenge eines (int)Arrays



  • Hi, wollt mal fragen, ob/wie man die länge eines Arrays (Integer) herausfinden kann???

    also wenn ich z.B.
    int array[5];

    mache, gibt es dann eine Funktion, die dir als rückgabewert 5 gibt,
    etwa wie int laenge = len(array);

    cu und thx...



  • hi,

    nimm2 schrieb:

    gibt es dann eine Funktion, die dir als rückgabewert 5 gibt,
    etwa wie int laenge = len(array);

    keine Funktion, aber einen operator, den sizeof-Operator.
    probiers mal so

    sze=sizeof(array)/4; 
    //sizeof() gibt anzahl bytes zurück, die der datentyp belegt
    

    b4sh0r



  • Hi,
    Eine kleine Ergänzung noch.
    Ich würde es so schreiben!

    int array[4];
    sze=sizeof(array) / sizeof(int);
    

    oder bei anderen Datentypen halt denn Entsprechenden Datentyp in sizeof schreiben. Ist meiner Meinung nach einfach besser Programmiert.
    MfG schirrmie



  • Ergänzung zu schirrmie
    Möglich wäre auch folgendes

    size_t n = sizeof(array) / sizeof(array[0]);
    

    Aber bitte nicht wie /bin/bash0R, da Typen von Plattform zu Plattform unterschiedlich gross sein können.



  • jo thx, da haette man auch selber drauf kommen MÜSSEN ^^

    naja, bin halt java-kind, da gibts fuer fast alles schon funktioenen .p

    cu....



  • ok ok, sorry, das ist mir klar -> datentypgröße auf verschiedenen maschinen.
    bin von der üblichen größe eines int ausgegangen und die ist 4Byte.
    Das ist natürlich dann nicht sehr portabel. 😞



  • frage:
    funktioniert das "sizeof" nur bei statischen arrays, oder bei dynamischen auch?
    (oder wird bei dynamischen die größe des Pointers ausgegeben?)

    mfG (c)h



  • Bei "dynamischen Arrays" (also 'int *p = malloc(...)' oder so) passiert genau das, was Du vermutest, und er holt sich die Größe des Zeigers.

    Es gibt allerdings neuerding (seit 99) in C Arrays, deren Länge zur Compilezeit noch nicht feststehen muß. Also so etwa:

    #include <stdlib.h>
    
    int main() {
        int r = rand()%123;
        int arr[r];
        return sizeof r/sizeof *r;
    }
    

    Da funktioniert dann sizeof wie gewünscht.



  • Ähmm, sollte es nicht eher

    sizeof arr/sizeof *arr
    

    heissen? 😉



  • @Daniel E.:
    DAS geht bei mir (noch) nicht!

    mfG (c)h



  • TactX: Äh, doch n'türlich. Gut, daß du das richtiggestellt hast. Danke.



  • nimm2 schrieb:

    Hi, wollt mal fragen, ob/wie man die länge eines Arrays (Integer) herausfinden kann???

    also wenn ich z.B.
    int array[5];

    mache, gibt es dann eine Funktion, die dir als rückgabewert 5 gibt,
    etwa wie int laenge = len(array);

    cu und thx...

    Ich frag mich bei der Frage immer (ja diese Frage war schon öffter da), warum man sich die Größe nicht einfach merkt, wenn man sie doch eh schon weiß.


Anmelden zum Antworten