komplexvariablen oder einzelne?



  • wollt mal von euch wissen was vom speicherbedarf her das sinnvollste is, entweder

    int zahl[2];
    

    oder

    int zahl1;
    int zahl2;
    int zahl3;
    

    was verbraucht am wenigsten platz bei gleicher belegung?



  • das Array brauch weniger Speicherplatz, dafür kannst du darin aber nur 2 Zahlen speichern. 😉



  • du meinst wahrscheinlich int zahl[3] oder? wenn ja ist der speicherplatz doch genau der selbe. nur beim array ist der speicher hintereinanderhängend, bei den einzelnen variablen natürlich nicht.



  • hab um ehrlich zu sein das erste statement nich verstanden, bis heute. wieso kann ich nur 2 zahlen drin speichern?
    mein problem: meine arrayvariablen holen sich (ohne dass sie das sollen!) einfach von irgendwoher werte und arbeiten mit diesen, frei nach dem motto "wir machen was wir wollen". die startinitialisierung ist denen offensichtlich völlig egal; und als ich diese verräter in "normale" variablen umgewandelt hab, hat wieder alles funktioniert und die richtigen werte waren da. woran liegt das?



  • Berschoben nach ANSI-C



  • 1. Wieso kannst du nur 2 Zahlen speichern?
    hmmm:

    int zahl[2];
    zahl[0] = 23;
    zahl[1] = 12345;
    zahl[2] = 123456; /* Undefiniertes Verhalten */
    

    2. Was verbraucht weniger Platz?

    int zahl[2]; /* Zwei Int-Variablen */
    
    int zahl1;
    int zahl2;
    int zahl3; /* Drei Int-Variablen */
    

    Der Unterschied ist doch ersichtlich 😃

    3. Startinitialisierung

    int zahl[2];
    zahl[0] = 1;
    zahl[1] = 2;
    /* Jetzt haben die Variablen die Werte 1 und 2. Bis du sie wieder veränderst oder das Programm beendet wird. */
    


  • @ gary: also is es immer so, dass die zweite zahl in der reihe spinnt? wenn ja is das ziemlich hinderlich für leute wie mich ^^.
    und das mit dem speicherplatz ... also verbraucht

    int zahl[1];
    

    genauso viel platz wie

    int zahl1;
    int zahl2;
    

    ?



  • Die Zahl in den Arrayklammern gibt die Zahl der Elemente an.

    PS: Mal unter uns, stellst du dich absichtlich so an?



  • also nochmal:
    mit

    int array[3];
    

    erstellt man ein array mit länge 3!!!
    aber der computer zählt von 0 an!
    das heisst das erste element ist
    array[0]
    und das letzte
    array[2]



  • Ich krieg gleich nen Komplex, meinst du mit Komplexvariable Array?



  • ich weiss ich frag ziemlich oft sachen nach, die offensichtlich schon erklärt sind ^^. nein sorry für das nachfragen, aber ich wollts halt noch mal genau wissen. (thx für die ausdauer ^^ )
    trotzdem nochmal die frage: macht wirklich jede 2te zahl in der reihe, was sie will?



  • Original erstellt von SirNoname:
    trotzdem nochmal die frage: macht wirklich jede 2te zahl in der reihe, was sie will?

    NEIN!

    int array[2] legt ein array von 2 (zwei) elementen an. was auch sonst?
    array[0] - ist das erste element
    array[1] - ist das zweite element
    array[2] - ist das dritte element

    und jetzt erklär mir mal warum array[2] einen fehler verursacht.



  • ja ... das hab ich ja alles verstanden ....

    ich zitiere mal Gary:

    int zahl[2];
    zahl[0] = 23;
    zahl[1] = 12345;
    zahl[2] = 123456; /* Undefiniertes Verhalten */
    

    bei "zahl[2]" meint er "Undefiniertes Verhalten", was ich auch beobachtet habe (bei mir war es aber nicht die 2te, sondern die 5. oder 6. zahl in der reihe).



  • Okay, hat sich jetzt alles geklärt oder hast du immer noch ein Problem damit das zu verstehen? :o



  • Original erstellt von SirNoname:
    **
    bei "zahl[2]" meint er "Undefiniertes Verhalten", was ich auch beobachtet habe (bei mir war es aber nicht die 2te, sondern die 5. oder 6. zahl in der reihe).**

    undefiniertes verhalten heisst nicht das es nicht funktioniert aber wenn es das tut isses zufall. anstatt der 5. oder 6. könnte der fehler auch bei der 10000. auftreten



  • na bitte ... das wollt ich wissen! thx @ japro! ^^ ich will das ja nich ins extrem treiben aber wozu is das dann nütze wenn`s im endefekt eh bloss aufm zufallsprinzip beruht?! ich mein das kann doch nich so nach dem motto "jaja ... versuch`s einfach" funktionieren ....



  • Wie wärs mit Gehirn anschalten, das ist ja nicht mehr feierlich was du hier ablieferst. Es ist EIN FEHLER, auf ein Arrayelement zuzugreifen, was AUSSERHALB des Arrays liegt.



  • es ist nicht nach dem zufallsprinzip solang du nur auf elemente zugreiffst die innerhalb der angegebnenen grösse sind iss alles in ordnung und es is klar was passiert... nur wenn du auf elemente ausserhalb des bereiches zugrieffst ist ist das verhalten undefiniert.



  • Original erstellt von SirNoname:
    na bitte ... das wollt ich wissen! thx @ japro! ^^ ich will das ja nich ins extrem treiben aber wozu is das dann nütze wenn`s im endefekt eh bloss aufm zufallsprinzip beruht?! ich mein das kann doch nich so nach dem motto "jaja ... versuch`s einfach" funktionieren ....

    ich zitiere mich einmal und hebe ein bisschen hervor:

    int array[2] legt ein array von 2 (zwei) elementen an. was auch sonst?
    array[0] - ist das erste element
    array[1] - ist das zweite element
    array[2] - ist das dritte element

    was passiert wenn du einen leiter die 20 stufen hat bis zur 30. stufe raufkletterst?

    du fällst runter. warum sollte es bei der programmierung anders sein. ein array mit 2 elemnten kann kein 3. beinhalten.



  • ich will euch ja nicht zu nahe treten aber ich denke soviel ahnung hab ich dann doch dass ich nicht "die 30te stufe" auf einer "20er leiter" erklimme. ich hab den bereich des arrays sogar zu testzwecken um einiges grösser gemacht als benötigt, nur is der fehler dann trotzdem noch aufgetreten.
    und das mit meinem "(bei mir war es aber nicht die 2te, sondern die 5. oder 6. zahl in der reihe)" war nicht auf DIESE reihe bezogen, sondern auf ein array mit entsprechender elementanzahl.
    kurz: ich leg ein array an, initialisiere JEDES element (ja, auch "array[0]"!), will einfach nur die anfangsinitialisierung abrufen ABER ES KLAPPT NICHT, da nur unsinn dabei herauskommt.
    naja ... is ja jetz auch egal, jedenfalls habt ihr mir im großen und ganzen doch geholfen. das problem werd ich denk ich nich mehr haben, da ich in dem stress n andren lösungsweg gefunden hab. und das mit dem fehler: ich hab gelernt, dass computer manchmal sachen machen, die sich jeglicher logik wiedersetzen. (oder: "der fehler liegt gar nich da, wo man ihn vermutet")


Anmelden zum Antworten