kostenloser Webspace werbefrei: lima-city


sizeof array geht nicht?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    krisi12345

    Kostenloser Webspace von krisi12345

    krisi12345 hat kostenlosen Webspace.

    Wenn ich die Größe eines arrays, z.B.
    float array[] = {15.0, 123.200, 40.220, 23.43};

    mit
    sizeof(array)/sizeof(float)

    berechnen will bekomm ich bei der Größe des arrays immer 0 oder einen falschen wert

    Die ganze rechnung ergibt dann immer 0

    Wo ist der Fehler?

    (Gestern ging es noch ?-: )
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Versuch mal array.length;
  4. Autor dieses Themas

    krisi12345

    Kostenloser Webspace von krisi12345

    krisi12345 hat kostenlosen Webspace.

    nikic schrieb:
    Versuch mal array.length;

    Fehler:
    error: request for member ‘length’ in something not a structure or union

  5. Leute das ist C++.
    Entweder du hast dein Array so definiert:
    Typ Array[Laenge];
    Typ Array[] = {...};

    Dann kennen du und der Compiler die Länge davon.
    Nette Compiler warnen dich dann, wenn du per Hand einen ungültigen Index eingibst aber versagen schon beim Einsetzen von Variablen und geben dir keinerlei Funktionalität zum abfragen der Länge.
    Das was du da mit sizeof() machst ist folgendes, du ermittelst den Speicher in Byte, den ein
    Zeiger auf floats hat, da jedes Array einfach nur ein Zeiger ist.
    Das kannst du leicht ausprobieren indem du angibst:
    float *array = {15.0, 123.200, 40.220, 23.43};

    Theoretisch sollte das sich genau gleich verhalten.

    Damit kommt bei sizeof(array) entweder 4 oder 8 raus (abhängig von 32/64Bit Systemen).
    Teilst du das dann noch durch sizeof(float) (4 Byte) dann sollte da 1(2 bei 64Bit) rauskommen.

    Merksatz: Du musst dir bei C++ selbst merken, wieviele Elemente in einem Array gespeichert sind. Niemand wird dich davor schützen Arraygrenzen zu überschreiten, da keiner außer dir sie kennt.

    Wenn du dir also nicht merken willst, wieviele Elemente in deinem Array sind, dann rate ich dir zur verwendung des STL-Containers Vector, der gleichzeitig noch dynamisch ist, dh eine "beliebige" Anzahl von Elementen aufnehmen kann.
  6. s********4

    krisi12345 schrieb:
    Wenn ich die Größe eines arrays, z.B.
    float array[] = {15.0, 123.200, 40.220, 23.43};

    mit
    sizeof(array)/sizeof(float)

    berechnen will bekomm ich bei der Größe des arrays immer 0 oder einen falschen wert

    Die ganze rechnung ergibt dann immer 0

    Wo ist der Fehler?

    (Gestern ging es noch ?-: )


    Wieso schlägst Du Dich mit Problemen rum, die eigentlich keine mehr sind wenn man die ganzen Macht von C++, sprich STL-Container verwenden kann?
    #include <vector>
    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    
    void Ausgabe(float a)
    {
    	std::cout << "Element: " << std::setw(10) << a << std::endl;
    }
    
    int main()
    {
    	std::vector<float> myArray;
    	myArray.push_back(15.0f);
    	myArray.push_back(123.2f);
    	myArray.push_back(40.220f);
    	myArray.push_back(23.3f);
    
    	std::cout << "Anzahl Elemente: " << myArray.size() << std::endl;
    	std::cout << "Belegter Speicher: " << myArray.size() * sizeof(float) << " Byte" << std::endl;
    
    	std::cout << "Inhalt des Arrays:" << std::endl;
    	std::for_each(myArray.begin(), myArray.end(), Ausgabe);
    }


    So ist man doch gleich viel produktiver....
    rya.
  7. Autor dieses Themas

    krisi12345

    Kostenloser Webspace von krisi12345

    krisi12345 hat kostenlosen Webspace.

    Das Problem ist anscheinend das der array am anfang leer ist und auch keine größe definiert werden KANN da die später sehr toleriert.
    Später wird der array aber mit Daten gefüllt. Die kann ich dann zwar mit z.B. array[4] rausholen aber sie werden anscheinend nicht zu der Größe dazugezählt.
  8. krisi12345 schrieb:
    Das Problem ist anscheinend das der array am anfang leer ist und auch keine größe definiert werden KANN da die später sehr toleriert.
    Später wird der array aber mit Daten gefüllt. Die kann ich dann zwar mit z.B. array[4] rausholen aber sie werden anscheinend nicht zu der Größe dazugezählt.

    sizeof() wird zur Compile-Zeit ausgeführt. Folglich werden nur die Werte berücksichtigt, die direkt bei den Initialisierung angegeben werden.

    Wenn du zur Laufzeit die Anzahl der Elemente ermitteln willst, dann musst du, wie scorcher24 schon gesagt hat, zum Beispiel auf einen STL Container zurückgreifen.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!