[C/C++] Arrays

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von BladeFire, 10. September 2011 .

Schlagworte:
  1. 10. September 2011
    Arrays

    Hallo,


    Ich bin zurzeteit bei den Arrays. Funktionen schleifen kann ich schon. Bei Arrays bin ich aber ein wenieg stecken geblieben weil ich den sinn dahinter nicht verstehe das [] bei zb:

    char Spieler [50];

    was gibt das [50];

    ich weiß bzw denke ich das das die bits oder byts sind die benutzt werden können. Aber was nützt einen dies?


    Danke
     
  2. 10. September 2011
    AW: Arrays

    naja dei eckigen Klammern stellen die Anzahl der Felder im Array dar.


    Als Beispiel:

    int array[5] = {3,5,6,8,9}

    dann ist array[0] mit dem wer 3 befüllt, array[1] mit 5 etc. und das array hat insgesamt 5 felder.


    Das Array in C++


    und jetzt üben und lernen^^
     
  3. 10. September 2011
    AW: Arrays

    Der Wert 50 bestimmt einfach die größe des Arrays. Du kannst also maximal 0-49 "Schubladen" ansprechen, ist nicht so wie in z.b. PHP, wo du einfach soviele Array-"schubladen" haben kannst, wie du willst.

    Es geht auch in C++, aber soweit kenn ich mich in der Sprache nicht aus =/

    EDIT:// Ne Minute =D
     
  4. 10. September 2011
    AW: Arrays

    Bei char-Arrays musst du aber aufpassen. Du hast jetzt zwar ein Array mit 50 Elementen erstellt, kannst darin aber nur 49 Zeichen speichern. Das liegt daran, dass der 50. Eintrag ein Nullbyte ('\0') sein muss, der das Ende des Strings markiert.
     
  5. 10. September 2011
    AW: Arrays

    ok danke. aber wieso macht man ein char spieler [50]; Arry statt einen ganz normalen char spieler; ?
     
  6. 10. September 2011
    AW: Arrays

    Also.

    Arrays dienen dazu mehrere Werte in einer Variable zusammenfassen zu können.
    Gehen wir davon aus, dass eine Person sich gerade irgendwo beworben hat und das Unternehmen bei dem bevorstehenden Gespräch 3 Personen zur Verfügung gestellt hat, die das Verhalten des Bewerbers/der Bewerberin nach Punkten bewerten sollen. Nun findet die Bewertung statt und Person 1 gibt 5 Punkte, Person 2 3 Punkte und die letzte Person 4 Punkte.

    Das Ergebnis sähe so aus:

    Code:
    int Wertung[3] = {5, 3, 4};
    oder:

    Code:
    int Wertung[3];
    
    Wertung[0] = 5;
    Wertung[1] = 3;
    Wertung[2] = 4;
    Wir haben also mehrere Werte in einer Variable gesichert.

    Jetzt zu deiner letzten Frage:
    aber wieso macht man ein char spieler [50]; Arry statt einen ganz normalen char spieler; ?​


    Wie Du mit sicherheit merken wirst, ist in einem einzigen char nur begrenzt Platz und zwar nur für ein Zeichen. D.h. Der Mensch, der sich bei dir als Spieler einträgt dürfte nur einen einzigen Buchstaben benutzen um sich zu identifizieren. Bei 50 Zeichen ist garantiert, dass sich der Benutzer vollständig eintragen kann, jedenfalls für die gängigen Namen.​

    @pyro

    Bei char-Arrays musst du aber aufpassen. Du hast jetzt zwar ein Array mit 50 Elementen erstellt, kannst darin aber nur 49 Zeichen speichern.

    Ich weiß worauf Du hinaus willst, allerdings kann ich das nicht so ohne weiteres stehen lassen. Du gehst von einer Zeichenkette aus, die dann mit den üblichen ANSI C Funktionen bearbeitet werden kann, aber nicht muss. Man kann bei einem char-Array natürlich auf alle Felder zugreifen und einen beliebigen Wert speichern, bei einer Zeichenkette sollte man aber auf das Terminierungszeichen achten!
     
  7. 10. September 2011
    Danke

    Jetzt weiß ich den sinn. das mit int war mir schon klar wobei ich denke das man das mit int besser normal machen kann. Nur halt unübersichtlicher.

    Das mit char ist mir jetzt auch klar. habe vergessen das mann nur einen Buchstaben eingeben kann.

    Danke.

    Mfg Simon

    ----------------

    noch eine Frage.

    Kann man einen Unentlichen wert eingeben zb bei
    char Spieler [10000];

    Dieser Speicherplatz wird ja Reserviert oder?

    Zwar verbraucht es dann Speicherplatz aber sind ja Bits und Speicherplatz ist ja keine mangelwahre.



    // Beiträge zusammengeführt
     
  8. 10. September 2011
    AW: Arrays

    Alle Arrays die schon zur kompilierzeit eine feste Größe besitzen, befinden sich im Stack. Der Stack ist meistens limitiert, also gibt es auch da irgendwann eine Grenze.

    Solltest Du mehr Speicherplatz benötigen würde ich dir empfehlen mit den STL-Typen vector zu arbeiten. Nachzusehen im Referenz-Sticky. Ansonsten müsstest Du das ganze
    mit new und delete selber regeln, das würde ich dir aber aus Sicherheitsgründen vorerst nicht empfehlen, ohne damit schonmal geübt zu haben.

    PS Bitte editier deinen alten Beitrag, solltest Du noch eine Frage haben, denn Doppelposts sind zu vermeiden!
     
  9. 10. September 2011
    AW: Arrays

    Man sollte noch erwähnen, dass 1 Char = 1Byte entspricht, und du somit hier Bytes und nicht Bits reservierst

    Auch noch erwähnenswert:
    Abhängig vom OS sind in einem
    32bit System: 2^32Byte=> 4294967296Byte=4GB
    und in einem
    64bit System: 2^64Byte=> 18446744073709551616Byte=16Exabyte
    theoretisch benutzbar...


    mfg
     
  10. 16. September 2011
    AW: Arrays

    Nur als kleiner Zusatz:
    Das ist Architektur-abhängig. Die "xx Bit"-Angaben beziehen sich auf die Breite der ALU, dem Rechenwerk der CPU. Oder meinst du, 8-Bit CPUs können nur 256 Byte adressieren? Der Gameboy - in dem ein 8-Bit'er, der Z80, werkelt - hat 8 kB RAM und konnte diese dank seinen zwei 16-bit Indexregistern auch (in)direkt adressieren.

    Deine Angaben stimmen bei x86 im "Protected Mode" bzw. x64 im "Long Mode".
     
  11. 16. September 2011
    AW: Arrays

    Nene ich hab das ganze aber auch jetzt eher
    an der Software festgemacht. Oder ist es möglich mit
    nem 32bit Windows mehr als diese 4GB anzusprechen?
    Denn wenn man ganz normal (was man auch immer sich
    darunter vorstellen mag..) C++ programmiert, dann übernimmt
    doch das OS die Speicherreservierung?!!
     
  12. 16. September 2011
    AW: Arrays

    Mit Windows afaik nicht. Unter 32-Bit Windows kannst du als Programm gar nur 2 GB ansprechen, unter bestimmten Bedingungen auch 3 GB. Dennoch ist es auch mit x86 afaik rein prinzipiell möglich, mehr als 4 GB zu adressieren.
     
  13. 16. September 2011
    AW: Arrays

    Mehr als 4 GB wirst Du mit deiner Software unter einem 32-Bit Windows nicht verwenden können.

    Das Betriebssystem wird die maximale Speicherkapazität zwar erkennen, kann sie aber durch die Limitierung der CPU nicht an deinen Prozess weitergeben und das liegt am PM (Protected Mode), denn unter dem PM ist es nicht möglich direkt auf eine physikalische Adresse zuzugreifen. Es muss ein Umweg über virtuelle Adressen gegangen werden und das geschieht über Paging. Es gibt zwar mehrere Paging Modi, was aber nicht heißt, dass dir deine CPU, oder ggf. dein BS, dir die nötige Unterstützung dafür liefern. Wie auch immer. 32-Bit CPUs können phys. Adressen bis zu 52 Bit verwalten (Kommt ganz auf die CPU an) und von diesen 52 Bit kann dir dein Betriebssystem max. 32 Bit an virt. Adressen raushauen.

    //Edit:
    @razor90 2 GB hatte ich auch im Hinterkopf, das konnte man allerdings irgendwie (Glaub durch ne Option im PE-Header (kA) erweitern).
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.