sizeof()



  • Hallo,

    ich hätte eine Frage zu sizeof().

    int main()
    {
        int list[10];
        int sizeOfList = sizeof(list) / sizeof(list[0]); 
    }
    

    Der Code gibt mir die größe 10 wieder. Wenn ich jedoch eine neue Funktion schreibe,

    void blabla(int* list)
    {
      sizeOfList = sizeof(list) / sizeof(list[0]);
      printf("Size of the list: %d\n", sizeOfList);
    }
    

    gibt er mir für den selben Array eine größe von 1 wieder ?

    Kann mir wer sagen was ich denn falsch mache ?

    Grüße



  • Wie kommst du auf die Idee int *list sei ein Array? Das ist ein Pointer!
    (Und gleich mal vorweg: int list[] funktioniert auch nicht. 🙂 Am besten du übergibst die Größe gleich mit.)



  • Du nimmt die Größe des Zeigers, nicht dessen, worauf er zeigt. Du wirst die Länge des Arrays als Parameter mitgeben müssen.

    Grundsätzlich: sizeof prüft nicht etwa zur Laufzeit Eigenschaften eines Objektes, sondern wird bereits zur Compilezeit durch eine Integerkonstante ersetzt. sizeof(list) nimmt also die Größe des deklarierten Typs von list, d.h. sizeof(list) == sizeof(int*).



  • Vergiss nicht, sizeof() liefert dir einen Wert in Byte!



  • transcend schrieb:

    Vergiss nicht, sizeof() liefert dir einen Wert in Byte!

    Das hat er doch richtig gemacht.
    Er teilt durch die Größe eines Arrayelements.

    Die Suche kann er aber nicht bedienen.
    Vor fünf Tagen das selbe Problem. Noch auf der ersten Seite sichtbar. 🙄


Log in to reply