Array Initialisierung??



  • Kann mir einer vielleicht einen Tip geben??

    Ich weiß net wie ich einen Int Array initialisieren soll sodass man ein leeres Feld erkennt!
    Wenn man den Array einfach deklariert werden die Felder ja mit irgendwelchen wirren Werten gefüllt!

    Wei? da jemand was??



  • Stichwort Initialisierungsliste:

    int data[100] = {4711};
    

    (das erste Element des Arrays wird mit 4711 gefüllt, alle nachfolgenden mit 0)



  • Das bringt mir nix!

    Ich will ja Wert die vom Benutzer eingegeben werden in einem leeren Array Feld speichern.
    Eine weitere Funktion ist es das Wert ersetzt werden können!

    Das Problem ist das ich die Felder des Array nicht so lassen kann!
    --> Da alle Felder schon mit Integers belegt sind

    Mit 0 Initialisieren!
    -->Geht net weil 0 auch ein Integer ist!

    Mit 4711 genau das gleiche!!

    Gibt es nicht wie unter Pascal oder Delphi sowas wie Nil womit ich die Felder initialiseren könnte????

    Eine Möglichkeit wäre natürlich einen 2 Dim Array!!
    --> Eine Dimension (Boolean) als Flag ob belegt oder nicht und eine Integer für die Werte!!

    Aber ich will und muss glaub ich auch das ganze mit einem 1 dim Array lösen!!

    ??????



  • Wenn Du ein Array von Integern hast, passt in ein Element davon genau das rein: Ein Integer. Entweder Du legst einen Wert aus dem Bereich des Integer als "ungültiger Wert" fest (z.B. -1) und prüfst diesen entsprechend, oder Du musst einen anderen Datentyp nehmen, der das erlaubt was Du vorhast.

    Wie wäre es mit sowas?

    struct SwitchableInt
    {
        bool enabled;
        int value;
    };
    
    struct SwitchableInt data[100] = {}; // alles auf 0, sprich enabled ist überall false
    
    data[10].enabled = true;
    data[10].value = 4711;
    


  • Ein Array-Element hat IMMER einen definierten Wert (und "leere" Elemente gibt es nicht). Du könntest dir höchstens einen Wert aussuchen, der die Bedeutung "hier ist nichts" hat - bei Gleitkomma-Werten wäre NaN verwendbar, bei int's je nach Zusammenhang 0 oder -1.

    (in C++ hättest du noch eine Möglichkeit - Container wie vector<> wachsen bei Bedarf mit, so daß du jeweils am Ende neue Elemente anfügen kannst)



  • CStoll schrieb:

    (in C++ hättest du noch eine Möglichkeit - Container wie vector<> wachsen bei Bedarf mit, so daß du jeweils am Ende neue Elemente anfügen kannst)

    was hat das mit der frage zu tun?
    auch in deinen 'tollen c++ vectoren' kann man nicht mittendrin elemente für ungültig erklären.
    🙂



  • nicht schon wieder 😞 schrieb:

    auch in deinen 'tollen c++ vectoren' kann man nicht mittendrin elemente für ungültig erklären.
    🙂

    Das nicht - aber man kann sie gleich komplett löschen, wenn man sie nicht mehr braucht.



  • Andere Frage:

    Wenn ich ein Array von beispielweise float-Werten initialisieren will, dann Gibt es doch die Möglichkeit das bei der Definierung zu machen

    float fArray[]={.1F,5.F,5.6F};
    //oder
    float fArray2[3]={.1F,5.F,5.6F};
    

    Kann ich das Array auch getrennt von der Definition initialisieren?
    Ich dachte Das geht

    float fArray[3];
    fArray={.1F,5.F,5.6F};
    

    Tut es aber nicht. Warum? Ist doch das selbe Prinzip 😕



  • musst halt normal zuweisen
    fArray[0]=0.1f



  • Trutti schrieb:

    Ist doch das selbe Prinzip 😕

    ist es nicht. ersteres schimpft sich 'initialisierung' (werte werden beim anlegen eines objekts festgelegt). damit können compiler und linker die nötigen schritte vornehmen, damit das array vor dem starten des programms bereits definierte inhalte hat. würde das später geschehen, müsste ein heimliches 'memcpy' in den code eingebaut werden, womöglich an verschiedenen stellen. sowas wird von C aus gutem grund nicht gemacht (mit ausnahme von zuweisungen an structs).
    🙂



  • Danke 😃 👍


Anmelden zum Antworten