[Playlisten] [Impressum und Datenschutzerklärung]

09D.2 Beispiele für das Rechnen mit Pointern


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

okay eine Fingerübung zu den Zeigernalte Klausuraufgabedieses FragmentC Programmcode ist gegebenund die Frage ist was wird jetzt am Ende der Ausführungvon diesen Fragmenten Variablen A und B und C stehen Punktwir können also den Rechner laufen lassen und gucken was raus kommtder Sinn ist natürlich das sie so lesen könnenvon soll ich an jeder Stelle ersten Rechner laufen lassen Komma soll es gefälligst so verstehen können was ist hier mit diesen ganzen krummen Geschichten eigentlich gemeintwas wird passierendas es jetzt sagenwie die unregelmäßigenVerben im englischen das muss man ?? mal so lesen könnenohne nachzuschlagenversuchen sie's mal zu lesen was mussin A B und C stehen wenn sie das hier dekodierenzu Fuß nachvollziehen müsste Rechner machen mussgucken uns das mal im Detail an am besten tatsächlichindie Bagger ihr das man wirklich sieht was der jetzt im Speicher passiert alsolocker als die Werte für meine Variablenund you?? memory MemoryZiffer meinso amKomma von vorne aneine Ray einrichtenmit drei indische Einträgenan der Stelle null steht die fünf drin an der Stelle eins steht die sechs trennenes weder dritte ich initialisierennicht den Eintrag mit der Nummer zweiwird automatisch null werden sobald sie initialisierenin zehntenwenn alle nicht angegebenen null oder Volks oder was auch immer gerade praktisch istalsoist die drin fünf sechsmache den Schritt mal ?? gucke mir das anfünfsechs nullso weit so gutKomma eine schon beim Speicher gucken müsste wo stehtaber gleicheine ganz normale Variable V eine ganze Zahl die auf hundert gesetzt werden solldort eine ganze Zeit ?? hundert ?? gesetzt werden sollGesetz Bandan das Kaufmannsundholt die Adressevon einem Ding von der Variablen V gibt mir die Adresse wo steht die im Speicherdas speichere ich dann in einer Variable von richtigen Sortevom richtigen Typ in Sternchenmit Sternchen ist eine Variable sich ein Zeigerauf ein Kind merkt die Adresse eines insInternet als solches ist variabel für normale Zahlen in Sternchendas wird eine Variabledie auf eine Entvariablezeigt die Adresse einer Zahldas Städtchenalso ich hole die Adresse von V und schreibe sie in wäre einjetzt weiß ich die Adresse vonVist nämlich hexadezimalnull neunzweiso sehen die Hausnummern in diesem Spiel auswichtigen Rechners sozusagenist die Hausnummer nicht zwei Bytes langsamen vier Bytes lang oder heute acht Bytes langist sie zwei Bytes lang die Hausnummerund typischerweise hexadezimalwird uns haarsträubend würde das noch zu verstehen ?? null neun F zwei des Promotionen angucken null neun F zweineunzweinull neun elf null sehen sie so in der Zeile hier sechsvier null nulldas soll wohl meine Zahl hundert seinander Stellenull neun F zweigemerkt steht die Variable V sechs vier null nullhexadezimaleinmal umgerechnet sechs mal sechzehnplus vier sechs mal sechzehnsechzig plus sechsunddreißigplus vier sind tatsächlich hundert als ihr nicht ?? lassen sechs wird hexadezimalhunderthier steht die Zahl hundert im Speicher zwei Bytes langab der Stelle der Adresse null neun F zweiund in dieser VariablenwieVariablen wiemit Interesse gemerkt nicht die Zahl selbst nicht gewundert sondern wo sie steht im Speichernull neun F zweikönne sie aufklappen??kann auch direkt verfolgenwas steht denn dann da wohin diesesnull neun F zwei zeigte stetenNachdruckso weit dasso jetzt hole ichVerse des Samariter schreibenähm siezeigtaufVjetztkommt der nächste hierder Name dieses weißder Name des Hinweises gleichzeitigein Zeigerauf den vordersten Eintragdie Adresse des vordersten Eintragshaben und das Beistrich in einer Zeigervariablenamens Xzu Xzeigtaufden vorderstenEintrag meines Raysnamens Bruhnund den anXdas ist jetzt null neunvier mein FAnamens U fängt also Speicher beihexadezimalnull neun F viernull neun elf?? wie das Los fünf sechs null Überraschungdas ist es seltendiese sechs Bytesnull fünfsechzehn Bit für die Zahl fünf null sechs sechzehn Bit für die Zahl sechs null nullwie besprochensechzehn Bit für die Zahl null wieder hinten stehtund in der Variablen X steht die Adresse davon hier vorne was die Hausnummer von dem Anfang hier null neun F vier null neun null ist der hier null neuneins null neun F zwei neun hundert drei null neun F vier dass es meine Reden jetzt wirklich Speicher zu sehen Text bei Zisternenfür jedes Kind zwei Byte auf diesem System sechzehn BitX plus plusXzeigte Aufrufvon null jetzt gehe ich mit X plus plus ein zweiterHammer Doppel hat sie schon verstanden ein zweiter wird jetzt in richtigen Einheiten gerechnet ?? es ist nicht ein weit weiter im Zweifelsfallsondern es ist eine Speicherstelleweiterein in X ist ein Zeiger auf ihn X geht jetzt ein Kind weiter alsozwei ByteX wird nicht mehr auf die fünf zeigen hier sollen auf die sechs Zeugnis gucken uns anJ plus plusist jetzt die Adresse null neun F sechsund neun F null eins zwei drei vier fünf sechs hier ist null neun F sechs X sei jetzt auf die null sechsX zeigtaufRichard sicherheitshalbervon einsmuss ?? ruhig weiterhin dieich seit Aufruf von einsoSternchen wie ist gleich siebenwas an dieser Stelle hier stehthätten gesagt wen zeigt auf Vwas an dieser Stelle steht soll bitte auf sieben gesetzt werden mit dem Sternchen machen Sie aus dem Zeiger das echte Dingwas also an der Stelle steht auf die B zeigt mit auf sieben setzenaufzeigt wie es die Variable Vnull neun F zwei an dieser Stelle darüber jetzt die sechs vier steht dezimal hundert hexadezimalsechs wird da sind wir jetzt also die Zahl siebenund zwarjetztund markiert was ich was geändert hatund das heißt im Endeffekt Business hiereine VariableV ist gleich sieben gewordenan dieser Stelle im Speicher steht ja die Variable V und ich habe sie hinterrücks auf sieben gesetztin dem ich gesagt habe ?? was an dieser Stelle null neun F zwei im Speicher steht soll sie seinFouls zu oder Frau auf sieben setzenso damit es klar was A ist Arbeit also ?? sieben werdenmit sieben werden jetzt guck ich nach was ist Fonds beimeinem Rating habe ich nie was angetanZeiger irgendwas veranstaltet aber ich hab bei mir drei U nie was angetandas heißt Ruf von zweiist immer noch nullda hat sich nichts geändertsich der Wert von B und der letzte hier ist X von nullXwas steht an dieser Stelle Speichernull neun F sechssteht eine Stelle nur eine sechsten SpeicherzahlsechsSpeicherdenndamals gemerkt X zeigt Aufruf von null abernach X plus Pluszeichen X Aufruf von eins und das ist die sechsalso bis jetzt sind siedie Zahl sechs stehen so geht das ??des Videos im Barnim niemand soim Detail nachvollziehen was wie Swiss gerade gemacht haben man hat es dann irgendwannauswendig draufsowie Fahrradfahrenwas bedeutet dieses Kaufmannsundund jetzt wird hier plötzlich ein REder Name eines Restanzeigerzugewiesen und so weiterdas was man dann einfach irgendwann auswendigversuchtesie mit dem X von null ?? Klammer zuwerdendie behandelndenZeiger X soals ob an dieser Stelle eine Ray anfängt im Speicherwelche Stelle war das die Stelle X sieben null neun F sechs diese Stelle hier ich tue so als ob hier ein Ray anfängt im Speicher und sage dem Rechner gibt immer das vorderstewenn das hier ein Revier was hier anfängtgebe meinen vordersten Eintrag und der S sechs der vorderste Eintrag von diesem Rechtist es fies das so zu schreiben hiermit Zeigerund den Zeiger dann so zu verwenden als aber der Name eines Arrays wäre das können Sie in der letzten Zeile alternativ schreiben ständigunser Mann von nullgenau sie kriegen die fünf dass es raffiniertes Komma vier kleines X in die fünf in dem sie X von minus eins machen was fürchtete ich mal vormalseinen Gastmann in Staunen versetztin DD ist gleich X vonminus ein Verfahren sicher hallo das ist aber höherer Blödsinn jetzt ist es kein höherer Blödsinn mehrich weiß jadass sich ein Schritt zurück gehen kann ich weißals Programmierer weiß ich an dieser Stelle steht wirklich was sinnvolles im Speicherich kann ein Schritt zurück in X von minus eins muss jetzt funktionieren gibt mir das was einstvor dem steht?? auf das X zeigt ein ins nach links gehen sozusagenmichmagisch und so weiter ich doch eher mal für das normal aus das heißt indem müsse die fünf stehtinD steht die fünf als es wirklich das erlaubtNix von minus einswahrscheinlichim Fragenwas könnten sie statt X von null auch geschrieben habenwas vielleicht etwas freundlicher aussehe als von nullSternchenkönnen Sie auch schreib ich schon hier weiterdie Nachwelt das war die fünf Komma in?? ist gleichSternchen X macht dasselbehier sollte gefälligst auch wieder die sechs rauskommen aber zwang uns alle Mallieber einmal guckenweichen sichert aber dazu sagen so Experimentemit dem C-Compilersind gewagtines kann seine Sitte zufällig rausbekommenzufällig ist nicht ?? sowie das falsche rausbekommenwenn sie nicht aufpassenzumal die Variablen nicht initialisiertsind eine in der Blödsinn drin stehen und wer weiß was aus dem Blödsinn passiert also Vorsicht eine Stelle wenn sie mit dem C-Compiler Experimente machenmuss dass sie nicht einmalselber nachdenken ?? es wirklich hinhaut unter allen Umständenso was ?? versprochen Sternchen X soll wieder die sechs einheitlich versprochendes Indexes wieder die sechsdasselbeNix Anzeige ist ob sie XP kann man wohl schreiben oder ständig schreiben das dasselbedieses Jahr wenn sieX von irgendwas habenheute sechs von minus eins Kindist gleichX von minus eins was derCompilerda eigentlich veranstaltetist das S acht X minus einsvon der SpeicherstelleeinenElement von dir sollte weitergehen also zwei Bytes rückwärts gehenund dann gib mir Wasser stehtdas ist ein ?? was hier passiert bei X von minus ein ?? von zweiUfern zwei ist eigentlich SternchenKlammer zu plus zwei Klammer aufjeweils minus eins von der Adresse X hier einen Schritt nach links nach hinten Kommaund dann gib mir Wasser steht an der Adresse das ist dasselbe wenigstens eins da kommt wieder fünf rausausprobiertund es wenn sie das verstanden habe was der Compiler machtes der Compiler aus X minus eins dieses hier machtkönnen Sie auf solche Gedanken kommenkönnen Sie alle Leute irritieren wollen schreiben sowas nullvon Xwas ergibt null von Xdiese Ersetzungsregeljetzt aus den eckigen Klammern wird Sternchen mit runden Klammern intern in CompilerSuite machen also machen Sternchenvonnull ?? plus XBeistrich der darausauch wieder sechs zwei null plus XistZeigerarithmetikder Zeigeraufder Zeiger in X die Adresse wenig steht und null weiter gegangenund über was da drin steht als dieses wird tatsächlich von Zinnen sieht absurd ausin den ?? machen das auch nicht mehr aber in C und C plus plus Garnison Unsinn veranstaltenbei der Compiler einfach intern die eckigen Klammern immer durch Sternchen runde Klammer zuersetzt also man kann in C und C plus plus aufschreiben achtundneunzigdie Klammern ABC eckige Klammer zuwas haarsträubend aus sie die Firma des sich mal vor das zu richtigen Ergebnis führt??sobis dahinsoeins davor das müsst ihr bitte die fünf seines ist die fünf wieder ausdehnteund jetzt hier die Spezialkonstruktionnull eckige Klammer Xist sechswieangekündigt