[Playlisten] [Impressum und Datenschutzerklärung]

09A.1 Kästchenroboter, Teil 4, malloc, Zeiger wie Arrays


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

dasälteste Thema bei C und C plus plus das sind die Zeigeranihr könnte ich jetzt Zeiger verwendenverfolgen Effektwenn ich nicht schon beim Programmierenweiß wie groß dieses Feld wirdsondern erst zum Beispiel durch die Benutzereingabefeststelledas soll zwanzig mal dreißig Felder werden oder durch Messung feststelle ?? ich muss jetzt hier zehnmalzwölf Felder unterbringenhabe ich in kleines Problemder Compiler will hier ja wenn ich so schreibe sofort beim Kompilierenwissen wie hoch und wie breit das Feld ist ich kann ihn nicht später sagen wir und weites FeldFußnote in siebenundneunzigkann man das schon in in C plus plus kann man's nichtanden typischen Zeh aller Welt sie kann man es nicht in die das so schreiben baue mir ein Rehvon dieser Größe dann will der typische C-Compilerda wissenwie breit und wie hoch das Feld ist ohne wenn und aber das muss definiert sein das kann ich erst später mit der Benutzereingabezur Laufzeit des Programms kommenoder mit der Messung zur Laufzeit des Programms oder sinnlichen Gravitationsdateiengelesen werden es muss ein kombiniert sein wie groß es fälltamdas ist dieübliche Anwendung jetzt für Zeiger und für Speicherverwaltungich verwalte mein Speicherselbstnicht dass der Compiler das für mich tut das er das jetzt ein Licht acht mal sechsFeldoder Krach genauer gesagtsondern dass das zur Laufzeit selber machenwas mir vorschwebt ist das ich hier diese initial als Funktiondas ehrlich was mitgeben das ichmit die blutig Aufbauder indischen als Funktion sagen kann es soll so breit sein und es soll so hoch sein und die indische Leitfunktionbaut es dann so breit und so hochmal dieHubert H?? was mir vorschwebtdass ich hier bei Initialas schreibe irgendweit überlegen welche Reihenfolge sinnvollerweiseals die Breite entführt in Tight X Ydas wird mir vor ich möchte ähnlich ?? Funktion sagen jetzt macht und man stelltdreißig mal vierzigwasebendann endlich genauso was dann ebenso nicht mehr funktioniertemuss man sichetwas anders aus der Affäre lügenamdas heißt ich müsse auch in Maine den Aufruf an das haben in Maine müsse der Aufruf vier sein von den Schweiß sowasmacht mal acht breit undsieben hochaberdann ist das schon zu spät für dieses hier wärest du einfach schonzu spätamcompilerwilligeKonstanten sind der Compiler will keine Variablen sehendieim ?? übergeben werden zur Laufzeitan was ich also mache ist jetzt ich reservierenmir so viel Platz wie ich brauchezu Fußlassen sie dann hinkommenhabenalsomach das mal sinnvollerweise??ich will ja überall nach ?? wissenwieder ist der ganze Wald gut in dieser gesamten Zieldatei will ich wissenan was in dem Feld drin stehteine der ersten Geschichten von der man sich verabschieden muss ist es zweidimensionalzu machendes geht's unter gewissen Einschränkungen zweidimensionalsind nämlich die in der Dimension kenne ansonsten nicht ich muss mein Feld selbst umbauen ich mach es eindimensionaldass es dann was ich mehr Speicherin der Form steht das danach eindas hier wird ein Zeigerirgendwann speicherrein?? Hausnummer an dieser Stelle stehtein eins Seins Charakter den ich dann irgendwie setzen kann und auch wieder lesen kann?? ich sollte mir noch merkendas merke nie wie viel erstehen muss ich mir nicht merken weil ich mir merke mir Breite und Höheder Pflicht rausich merke mir nur noch die Hausnummer des erstenund ich merke mir hier jetzt nicht mehr ?? mit dem Design das Wassereher hässlich ich merke mir mit staticKindwas die Breite istund ich merke ich mich hiermit staticstatic inHöhe istPunktdie Höhe istgenau das ist nicht richtig gutwerdenwird ?? wird zwischen meine ich jetztmüssen vorsichtiger nehmen wenn ich mal W und den manchmal Haarschreiben kann okay wenn initial als aufgerufen wird dann sagen wir wohl ist gleichFeeund Hyde ist Gleichheitetwas altist gleichHso soll das aber funktioniert jemand ruft zu Beginn seines Programms initial Eis auf uns acht dreizehn zwoundvierzigund der möchte ich mir merken dreizehn soll jetzt demnächst die Breite seiner zwoundvierzig soll dieHöhe seinall das mit der die Gier verziert das nur in dieser Zieldatei sichtbar istKomma sind das habe ich jetzt hier umbenannt W und HkeineKomplikationen mit denNamen zu kommen das mach ich hier vielleicht auch malin der Header-Datei das wäre nicht nötig in der Header-Datei aberist weit leichter zu verstehen wenn ich hier auch wie und Haar schreibehier können Sie auch Karl und anderen Schreiben an der Stelle wird kein stören Hauptsache in Thatcherin der Johnwarenso damit habe ich mir gemerkt wie groß das Feld sein sollund jetzt möchte ich so viel Speicherplatzeinrichtendass es Memory Lockheedimmer wieder Location oder wie auch immer man diesen Befehl in Langschrift nenntMR LokanSpeicherplatzreservierenwenn sie so war ich muss ihm sagen wie viel Speicherplatzsie für Zellen brauche ich W mal H Bytes brauche ichdas Ding wie breit und Haar hoch sein soll als Thema?? zu sein so viel Bytes bitte reservierenund das liefertManuelKate dann zurückdie ersterdie Adresse auf das erste Byte Wasser reserviert hat in dieser Form und Schubser zu schreiben würde ich gezittert ?? sogar das schreibenSie bitte schon irgendwie Deichsel aber hübscher wäre dasso sieht das neue Hausgib mir mal einen Speicherbereichvon soundsoviel beimit seinen drei breit und vier hoch zwölf BytesMR Lok zwölf sagt ihm so ein Speicherbereichvon zwölf Bytesund gibt mir ein Zeiger auf das erstedavon zurück auf das erste weiter vonden Speichermedienmeiner Variablen fehltdem Hinterkopf weiß ich muss mir selber merken oder wann zwölf ?? drinund nicht dreizehnund fünfzehn so sieht das dann ausich bitte beim Systemim Speicher das es manuell okaydenn wenn Realität liefert irgendein Zeiger zurück es gehört sich das Ideenin den richtigen Zeigerumbiegen hier mit runden Klammern ?? schon von langsowas ja habenPunktlang von X Y das aber schondas X Svensson int istauf Venloumbiegendas ich wenn ich durch was anderes teile auch weiterhin mit der Größe verlangt ?? was ähnliches Karstenhier genauso was aus demBett rauskommt den Zeiger Karstenauf Anzeige von der richtigen Sorte ich möchte ja an SaintCharakters habenwieder stärker hinten Samtzeigerdieses fehlt es dann wie eine Hausnummernicht das echte Dingnicht das Haussondern die Hausnummer nur ein Zeigeraufund ich kann an ihm fragen was wir unter dieser Hausnummer wohnt sozusagenoder auch in der nächsten Hausnummer wohntwennich das hier machedenSpeicher reservierengehört sich eigentlich auch das ich am Ende den Speicher wieder freigebenwäre sinnvoll das heißtneben einer initial Eisfunktionim Hauptprogramm bin ich jetzt neben ein eine indische Bass Funktion soll es auch eine FunktionRelease oder free oder ganz konsequent benannt wäre feiner leistetdas meistens aber ?? ließ ich es erstmals eine Leitfunktiongeben?? ich zu diesem initial alsInitialeis baut alles auf in der Bibliothek und wenn ich sage feine Leistung ?? Willis oder Fidansollte dann alles wieder abgebaut werdenhatte noch eine extra funktionierenderBuddhaBeistrich der verdient es in Schloss unter FreudeinPreisfreutund die Funktionsoll Tintesystemeinfach sagen okay den Speicher brauche ich jetzt nicht mehr?? hier?? das ?? des Initialeis geschafft und Schillershier sage ichwiedas ist derBefehl um zu sagen wasder liebe System was du jetzt hier reserviert hast unter dieser Adressedas auch jetzt nicht mehr das ganze jemand anderem gebenoder irgendwas benutzendas sollte dann paarig sein?? problematisch ist wenn es nicht Beistrich istan wenn man mehr reserviertals man später wieder freigibt heißt dass man irgendwie Speicher Aufina und irgendwann Speicher fehltimmer mehr freigibt als man vorher reserviert?? wird das System irgendwannauf die Barrikaden gehen und sagen halt jetzt etwas faulamdieses Vieh passiert sowieso automatisch bei Programmende das machen die Betriebssystemoder auf dem Launch Pad gibt sind ein Betriebsystem das macht das System von selbstwenn sie das ganz zu ?? zum Ende vergessenwird aufgeräumt das müssen keine langsamen des Vergessensoder eines Programm abstürzt das ansonsten viel Speicher noch belegt ist das wir dann von selbst gemachter Programm Endenur zwischendurchmuss man aufpassendass mannicht zu viel Speicherverbraucht Komma nur reserviert und nur reserviert und nie wieder freigibtso das Komma dass paarigich habe ihr meine Bytesund nun kommt der Ärger dass ich es auf diese Bytes auch noch zugreifenmussdannwas ich schreiben kann ist viel vonihmaber sich nicht schreiben kann ist viel von ihr Jein Zeiger verhält sichwie ein eindimensionalRWEseit ich muss jetzt Unrecht ich habeein eindimensionalRWE mit der richtigen Breite und der richtigen Höheich muss ?? die ganze Zeit umanein wenig aus dreiTeilenund vier Spaltensowenn ich da nach dem Feld einszweiFrage heißt als gehe zur Zeile Nummer eins seine Nummer neue ZeileNummer eins das ist die Zeile Nummer einsund da gehe zur Spalte Nummer zwei Spaltennummer null Spaltennummer eins Spalte Nummer zwei hier sind wirder ?? ist dasdas im Speicher aber steht der Speicher ist in dem Sinne nicht zweitem ?? Komma was im Speicher einfach steht ist eine lineare Folgevon Bytes zwölf Byteszwölf Bytes stehen dafür im Speicherwenn ich so drauf zugreifenwenn es nicht so richtig auf das der zwölf Bytes stehenwo finde ich dieses bald das mit der Nummer zwei im Speicherin der Tat an der siebten Stelle mit ?? mit einzelnen Empfangszenin der siebten Stelle eins zwei drei vier fünf sechs siebeneins zwei drei vier fünf sechs sieben da Muster stehenda muss Systemspeicherin dieser Form hierist das so einfachhingeschriebenSpeicher stets anderskommenmit manueller Kälte zur nichtlinearenSpeicherdas heißt ich muss mir jetzt hier überlegen wie ich die Umrechnungmachewie rechnen sie um von eins und zweiwas ist das dieser eindimensionaleIndex der nicht ergeben musssieht etwas irritierend ist sich hiermit einfach ?? zu zählen hier in diesem den Jahren ähes ist also der siebtein diesem Bereich aber wenn ich jetzt sie Frage ist das ja null eins zwei dreivier fünf sechs das heißt sie muss sich die Zahl sechs geben wir den siebten zu kriegenund das ist dann anscheinendwarhier die eins sagt ich brauche die vier in der erstenZeiledann kommen noch die zwei dazu das habe ich dann tatsächlich rechnet einmal vierplus zweiso komme ich auf diese Zahl sechste ich Zedern übergeben muss also den zweidimensionalenLW habenich gehe in dieZeile mit der Nummer eins und in die Spalte mit der Nummer zweieiner Breite von viermüsste in diesem eindimensionalenRayin Andys Elementmit der Nummer einmaldie breit also die Zeilennummermal die Breite plusdie Spaltennummergehen das wäre die Umrechnungdieses hier machtsie automatisch beim zweidimensionalenMayalso wenn sie bei zwei ?? Personalräte mal was hinschreiben was sie zu großes N siehe untenfünf hundert reinschreibenversuchte jetzt nichtin die fünf hundertste Spalte zu gehen soll er macht einfach weiterweil er ganz dumm genau das rechnet was da unten steht und nicht andersdas ziemlich wenig Intelligenz in andere Sprachen sind ein bisschen intelligenter brauchen dafür noch mehr Zeitals die Umrechnung istwas in derEile steht die Nummer der Zeile mal die Breitelosdie Nummer der Spalte so komme ich von zwei dimensionalaufzehn Jahrendas heißt hierbei diesem Zugriffmittels Bandbei diesem Zugriff müsste also stehendie Nummer derZeiledass esoffensichtlichdie Nummer der Zeile mal die Breiteplus JPunktdas wäre jetzt wieder Zugriffumgemodeltauf eindimensionalkriegen wir das hinmit den ihrMannund das müsste ich jetzt überall tunpro dass hier benötigt wirdzehn mal zehn mal zehn mal sehenoder verschwandY von Xschwarz-weiß muss oder hinterdie Nummer der Zeile plus die SpalteY ist die Nummer der Zeileplus die Spaltedas ausGlaube dem ?? kleineren Baumangelsein Ex genau derselbe Y X derselbeunterzunächst ??schon selberIJdie Nummer der Zeilenmal die Breiteplus die Nummer der Spaltedas müsste noch in der Zwischenablagehaben aberdas sollte sein??sehen das jetzt wieder was zu Informatikwas ich geändert habe ist nur in der Zieldateiich habe die initial FunktionsweiseHeader-Dateigeändertman jetzt von außen sagen kann so breit und so hoch soll das Feld werdenabermein Hauptprogrammsansonsten gleich geblieben die Header-DateiSchnittstelle wieder so schön heißt es ansonsten gleich geblieben und die ganzen Änderung hier habe ich nur in der Zieldatei gemacht das ist Kapselungan was ich hier veranstalte der Zeder da es weitgehend vor der Außenwelt gekapseltdie Leute die diese Politik anwenden die sehen gar nicht ob sie das mit einem echten FA zu tun haben was zu Beginn reserviert worden ist oder ob ich selbsteinfach am Anfang gesagt habe Reserve viermal soundso viel Speicher stellendas wir nachher im zweiten Semester nochein dickes Thema werden Kapselungfrei wirdunddas Gegenteil mit Pawlikandenke daszeige ich jetzt mal was hier so passiert dann mal weg Punkt und gucken uns das angebautesTerminalnachdem Recht und Gesetz im Sinne Schloss hoffe ich ohneokayaus dem Initialeisist jetzt die Breite und die Höhe übergeben worden ist kein Platz mehr auf dem Bildschirm verseuchte Programmzogsie weiter die Höhe übergeben worden?? hates ?? gucken bei den stet X aber wirklich Breite und Höhe gesetzt hatzumindestder DexiaDaun hat jetzt dieweiterhinhabe?? hat jetzt die Breiteund die Höhe wirklich gesetzte sehen wegen static Schritte dahinter in der Datei pro Wortanden breit und will jetzt wirklich gesetzt auf vernünftige Werte und hieltviel steht auf einem Zeigerresistenzhexadezimaldie Adressedie in den Zeiger steht der Verbrauch auf eine Hexadezimalzahldasaber arbeiten mit den BitmusternKlammer auf mal vor wenn ich acht null hexadezimal hinschreiben dass sie das vorderste Bild angestellt habe oder so aber wo die Hexadezimalzahlam optischen Vorkommnis bei Zeigernzwei A sechsdas ist der Anfangdes Feldes nun diese die Funktion ihr diese System eigene Funktion ?? Katehat mir jetzt gesagt du willst zwölf Bytes haben okay ich lese wieder zwölf Bytes und das es was er zurückgeliefert hat die Adresse von den ersten dieser zwölf Bytes null zwei A sechs dass die nun zwölf Bytesin den michrum Fuhrwerken kanngroß man den Speicher andie duwiees jetzt irgendwie sinnvollnull zweiA sechszwei A sechssechsnullzweiäh die A sechsalso das wäre ein null A eins A zwei A drei A vier A fünf A sechshier würde das anfangen hundert zwölf Byteslangreichenund nun fang ich anan diese Speicher stellen Zufallszahlenzu schreiben das ?? das nächste was sie passiert ich gehe mit doppelten for-Schleife reinund schreibe Zufallszahlendas heißt hier müssten jetzt eins nach dem andern Zufallszahlenerscheinenseine Dias schreibennurwas war das null eins zwei drei vier fünf sechsvier bei den null müsse etwas stehenda Leertaste die erste Zufallszahl reingeschriebenan die erste Adresse dieser PointerSternchenvariablenzieltsagtwohin schreiben muss die Adresse Hausnummernull zwei A sechsData das jetzt hingeschriebenund der Zugriff wargenauso als ob Sun FA wäre sie sind vieles jetzt ein Freund aber ich kann damit zu arbeiten als ob sein RW wäre ein Amwayjetzt die die einfach nur mal die breite ?? erwägt in eckigen Klammern null das heißt das was da steht wo der Pointer gerade istnur die nächstenexistiert ein zweiterJ ist ein zweiterunternimmt jetzt Pointer und den eckige Klammern je mal null plus einsdas heißt er schreibt in die nächste Speicherstelle einda in den ?? Schweine Ständerat und so weiterändert sich nur der Hintern weg Punktalles ist gut zusätzlich ?? und Breakpointan sich gemeint die Mailfunktionund Sitz ihren Weg fortdaund jetzt müsste hier janoch ?? Palette an Zufallszahlenerscheinenokay das sollte vielleicht dann sogarZufallszahlensein sie sind das jetzige null zwei null drei null eins und so weiter das sind meineZufallszahlnatürlich jetzt nicht zwölftes weit über zwölf ich hätte gesagt acht siebenamdas hier ist jetzt mein zwei dimensionales Feldmitsechs fünfzig Einträgen nicht zwölf in dem Beispiel sonntägliche sechsundfünfzig Einträgen diese Zahlen ?? null null was kann ich ?? schon dazunull eins zwei drei vier fünf die ?? dazu die nur zweiter fängt es an bei der null zwei fängt an und die bei der null drei Standes aufzuhörendas sind die sechs ?? fünfzig Zahlen aus meinem Feldich stehe tatsächlich zwei Dimensionen im Speicher sowieso nicht auf den zwei immensen Raserei baut den zweidimensionalenSpeichen stehen immerin Jahr hinter einander im Speicherhabe ich den Ärger das ich jetzt damit arbeiten musswenn ich den Speicherweb selbst reserviert habe ich muss jetzt selbst um rechnendie soundsovielteZeilenvision sowie die Spaltewo steht in dieser linearen Folge wird das entsprechende Elementinsoferndass man keine Angst vor Zeigernsie können Zeiger so verwendenals obdie Namen von Amway sindhier gerade da bin ichin viertes Anzeige aber wenn sie so schreiben vierzehn gar nicht mehr auf das Zeiger ist Manganzeiger so verwendet wie die Namen von Gracesagen dann einfach gib mir mal den Sohn zu fehltenhinter dieser Hausnummerwenn sie so umschreiben umgekehrtin den Propheten hinter dieser Hausnummer namens vier schreibreinwas ich ihr sageund ob es unten bei dem desRentnerist das Kind hier es ist genau umgekehrtandiese Hausnummerdahinter der soundsovielteholdir mal raus und gib mir den zurückdass das schöne AC C++dass die Namen von Zeigern so verwendbar sind wie die Namen von ?? Basic können hier jetzt gar nicht sagen ist das eine ?? oder ist das vierte ein Zeigeram?? interessiert an der Stelle auch gar nicht es verhält sich gleichdie Frage ist wo's herkommtwenn sie so bauensagen sie den System gibt mal soundsoviel Bytes auf zwölf hundert sechsundfünfzigund Speicher in vier ?? wo denn das anfängtwas du da reserviert hastund was man nicht vergessen sollte was bei den ?? weist eben auch automatisch funktioniertwas man nicht vergessen sollte ist am Endeaber mir man fertig istso zu suchenund fertig ist sollte man auch nur sagen das ?? fertig ist das wieder freigeben