#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 + Multi-Zitat Zitieren
#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^^ + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#5 10. September 2011 AW: Arrays ok danke. aber wieso macht man ein char spieler [50]; Arry statt einen ganz normalen char spieler; ? + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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". + Multi-Zitat Zitieren
#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?!! + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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). + Multi-Zitat Zitieren