[Playlisten] [Impressum und Datenschutzerklärung]

09C.1 Beispiele für Adressen, Zeiger, Zeigerarithmetik


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

dieZeigerich tippe mal wasdann der Gedanke wäresichschreiben gestaltete ich mal nichts mitAHA sondernüberlegen sich was denn das bedeutetwas hier passiertpaar Zeilen mal mit Zeigernhoffe iches wird daran noch mal sehen was sind das jetzt eigentlich macht??lustvoller stehenund setze dich hier gerne ein Drehunter soll drin sein?? eins und die Zahl zwei und die Zahl dreiPunkt hiermerke ich mir dasden Anfang vom ähdas ?? nicht nicht den Anfang so sollnoch ?? Variablen gleichermaßen noch fertigalso einfach mal ein mehr oder minder und undurchdringlichesStückchencekotund ich möchte mit ihnen überlegen was denn dasbedeutetwas denn da nun passiertich mach gerade mal Protectmegin der Hoffnungdass ich richtig getippt habe und der vom unter Compiler nicht meckertokayKomma nochalso das ist eine Warnung die wurdeeingerichtetaber niemals referenziertokaydie Frage ist nun was passierthaben alsoA B C D Efünf Variablenwas passiert eigentlich jetzt mit diesen fünf Variablen was und was die Bedeutung der fünf Variablen kann man von einigen sagen was drinnen steht man einen kann man nicht sagen was drinnen steht sondern nur was die prinzipielle Bedeutung des von anderen Komma wirklich eine Zahl angeben die drinnen stehtüberlegen Sie sich das malalles einfachste Weg mit dem Compilerdas zu kompilieren und einmal laufen zu lassen aber überlegen sich tatsächlich mal was da drin stehtmuss es nachher lesen könnendass der Computer das kann es keine Frage aber muss lesen können und dann auch schreiben zu könnender erste Schritt etwas lesen zu können und dann kann man später auch schreibenso nun in Aktionwas passiert der wirklichschöne bei solchen Sachen ?? mir will ich nachgucken in der Mathematik ist das manchmal schwierig nach zugucken aber beimProgrammieren komme ich nachgucken was das Gretchen so macht ich will nicht dieses MB haben ich willdie Logos habennaja der erstes Geschenkstrichtereine Ganzzahlvariablenamens A ein und schreibe zwoundvierzig der Rhein dessen geschenkt so wird jetzterst mal mit Zeigern hier wasSternchenmacht einen Zeiger zu dem echten Ding und Kaufmannsundmachtdas echte Ding zu einer Adressemit Kaufmannsund holen Sie die Adresse von der Variablen A wo steht ein Speicher wo steht hier die zwoundvierzig im Speicherdass man sie mit dem Kaufmannsundund hier richten Sie eine Variable ein die Anzeige ?? ist eine Adresse ?? istB enthält eine Adresse eine Zeiger Variabledas angucken von der Schreibweise ?? ist das wieder durchaus logischder Sternchenmacht den Zeiger zu dem echten Dingder Sternchen macht den Zeiger zu dem echten Ding ?? vom Typ int deshalb diese Schreibweise mit in Sternchenzu sagen B ist ein Zeigerauf eine ganze Zahl nicht die ganze Zeit selbst aber ein Zeiger auf eine ganze Zahl die Adresseeiner ganzen Zahlüber diese beidenSachen interessant ist der Westen ?? zeigen eigentlich geschenkt Kaufmannsundist die Einrichtungund Sternchen ist die andere Richtung KaufmannsundRot die Adresse von einem Dingund Sternchen macht die Adressezu dem echten Ding das ich da mitreden kannund es angucken ?? passiert diese Zeile ausführenB ist jetzt die Adresseder Variablen A wie sehen die Konten typischerweise hexadezimalweil so viele Bits will keiner sehen und hexadezimalkann ich auch besser verstehenwo das jetzt liegt im Speicherdeshalb eigentlich die ganze Zeit hexadezimaldas ist übliche Anwendungsadressenwerden hexadezimalangegebenPunkt sie können sie aufklappendas geht in den meisten Entwicklungssystemskönnen sie aufklappen und ?? sagt in die Entwicklungsumgebungwas den an dieser Stelle ?? Speicher drin stehtaber die Variable B selbstist dieser hexadezimalwirddie Stelle an der die zweiundvierzigim Speicher steht das Komma Sitz anguckenund heute ?? youMemoryKomma Platz viernull neun sechswenn wir ?? ?? zu viel Speicher wir uns hierglaubtweismachen zu müssen null neun F sechsnada ?? null neun D nullnull neun elf null ?? das ist null eins zwei drei vier fünf sechswir haben jasechzehn Bit auf dieser Maschine sechzehn Bit für das indas ist dann hoffentlich jetzt die zweiundvierzigzwei A hexadezimalzweimal sechzehnzweiunddreißigA sind zehn zweiundvierzigdas hier sind die zweiundvierzigdiese Variable B hiersagthexadezimalnull neun F sechs und sie sehen in dieser Auflistung von dem was im Speicher ist null neun F sechsist die Adressevon der Variablen A denn sie sind Speicher da die zwoundvierzig drin die Hausnummer sozusagen der variablen zweit wird sich die Variable selbst belegt zwei Bytehier jetztdiesem System der inssechzehn Bit hat zwei Bytes lang ist für die Variable zwei Byteder Zeiger zeigt auf den Anfang davonnull neun elf nullnull dass die eins ist die zweite Sissi drei vier fünf sechs auf dieses Byte zeigte zeigesonächster Schritt das Sternchenmacht den Zeiger zu den echten Ding das echte Ding wird auf dreizehn Gesetz mit anderen Worten die VarianteA wird auf dreizehn gesetztwas auch immer an dieser Stelle im Speicher steht wird auf dreizehn gesetztes die Variable Ada sind sie ganz nebenbei wird auf dreizehn gesetzlich habe nicht von A geredet?? denselbenSpeicherbereich zugegriffen da sehnsüchtig S null die null null D waren sich immer noch erinnert hexadezimal dreizehnhier steht dreizehnund nebenbeidiese null null sind die höheren acht Bitund dieses nur die sind die unteren acht Bit ich hab vorne achtBits null null null null null null null nulldie hohen stellen und hier kommen die niedrigen Stellen ?? null null null nullund dann für das die eins einsnulleinsdassollte Fertigung und sang gesanglich nennt man Sachen ?? sie sehen das die hohen acht Bits später im Speicher stehen als die tiefe Nacht mitdass es von Prozessor zu Prozessor im Zweifelsfall verschiedenda muss man aufpassenokaysojetzt ?? was ganz schlichtes ich erhöhe A um eins das Geschenkentweder vierzehn drinjetzt wird ein Rayleighangelegtmit den Einträgen eins zwei drei?? Bytes braucht dieses irre im Speicherdie Zahl eins belegt zwei Bytes des MB eben gesehen ihr bei der variablen Art will ich zwei Byteszweimal acht Bit sechzehn Bitdas sind Events auf dieser Maschine sechzehn Bit sich die Zahl eins belegt sechzehn Bit seit zwei belegt sechzehn wird die Zahl drei Pflicht sechzehn Bit jeweils zwei Byte zusammen sechs Bytejede von diesen Zahlen belegt hier zwei Bytes als ?? habe zusammen sechs Byteirgendwie werden circa sechs Speicherstellensehen müssendiebelegt sind mal sehensoauch diese netterweise was geändert hat ??es ist direkt dahinter angelegt wordenhier steht die Zahl einsdas höhere Bytesauf diesem Prozessorweiter hinten im Speicherund die einst erfordertdie Zahl zwei das höre weit hinten im Speicher das untere Byte zweiund die Zahl drei das sind diese sechs Bytesfür dieses Gerätso der ?? ist jetzt wieder Schema F Kaufmannsundvon einem Ding sagt wo das steht im Speicherund speichert es hier in den Zeiger die diese Zeigervariable?? Pointerdie Adresse wird in diesem Zeiger die gespeichert über siehe oben hatten damals die Adresse von der Variablen Aindie Variable B gespeichert hier ist es die Wired diewas drinnen landet istwo stehtder Eintrag Nummer zwei steht die drei im Speicher zehn von zweites die dreiwo steht das hier im Speicherdiskursablesen ?? null neun F nullnull eins zwei drei vier fünf sechs sieben acht neun A B C SIS C D E FI S C also null neun FCdieses Ding muss man null neun FC stehen wo steht der Eintrag mit der Nummer zwei null neun FCnull neun FCgut geratenalso kriegen Sie jetzt ein Zeiger auf den Eintrag mit der Nummer zweider nächste das ?? überraschend glaube ich Beistrich dran gewöhnen aber das ein wesentlicher Trick in C und C plus plus dieser nächste hierentsteht jedoch nur der Name des Geräts C einfach der Name des Arrays ohne Kaufmanns und ohne allesKomma sich Knoten ins Taschentuch weil das es extrem wichtig in C und C plus plus das ständig verwendetder Name eines Rays ist ein Zeigersie müssen nicht ausdrücklich ?? Kaufmannsund von einem Reh sich geben lassen wo das Reh stehtder Name des RS ist der Zeiger sie könne so direkt zuweisenmit dem Zähler hintereinfachwow einen neuen Zeigernamens Eund schreibenda reinwo das Reh anfängtden Namen des Kreises Anzeige auf den vordersten Eintragmit anderen Worten also wurde jetzt nulleins zwei drei vier fünf sechssieben acht Semester sein achtenull neun F acht müsse seinbegabtsodass es ganz billig mit Interesse können fragen wo ein bestimmter Eintrag in den ?? steht aber typischerweisenimmt man einfach das den Namen des RS und damit es gut das ist ein Zeigersolange seine AdressekeineBürger stehen zu lassen ?? ist eine Zeigervariableund sie ist eine Adresse soll ich sagen ?? speichern diese Adresse in der Zeigervariablender Hirte war etwas überraschenddann noch weiter überraschend C plus plusbei jetzt rechne ich ja mit einem Zeigerund sage nicht das worauf E zeigt erhöhen oder wie hier das worauf B zeigt auf dreizehn setzen ich sage den Zeiger selbst erhöheneine Hausnummer weitergehen das ist der Gedankedas hat eben andere Bedeutung als wenn sie Sternchen C plus plus schreiben würdenwas andere geklammert werden müssen ?? wenig zu wie auf einer ?? machen??ich rede definitivnicht von dem worauf das Ding zeigtich rede von den Zeiger selbst von der Hausnummer die Hausnummer wird erhöhtder geht hier ein zweitermit dem worauf er zeigterhöht nichtdas Wasser steht im Speichersondern erhöhtdie Hausnummergeht hier?? und lasse mit jeglicher Flächen wird etliche gehen Asiens am Rechner netterweise gesehen Beistrich fragenwir unser Rechner teilweise gesehen schon ?? geht aufAR geht nicht auf neun F neun geht auf SA und das macheG zwei weit weiterweil ein indisches zwei Bytes lang auf dieser Maschine wenn sie das machen mit einem Zeigergeht der Zeiger um eine ganze Hausnummer sozusagen weiterwenn diese Interviews haben immer zwei Bytes haben Gitter und zwei weiterweißes Zeiger findet jawenn sie den erhöhen geht um zwei weiterwenn sie schlimmere Geschichten haben ständiges Takt vor die B zwei ?? vierzig Einträge hatten wird und zwei vierzig weitergehengeht immer um ein ganzes Haus dann sozusagen weiter das ist hier die berüchtigteZeigerarithmetikich rechne mit Zeigernrechnen nicht mit den Sachen auf die gezeigt wirdkann ich auch das es einfach ich rechne mit den Zeigern selbst ich kann Zeiger schön in einer Schritten verschieben oder Behinderte Schritten verschieden rückwärts und vorwärtsnimmt was drauf addiere oder was subtrahierenmöchten zeigenwas extrem gefährlich ist der sie vor sie addieren eine Million drauf und dann dann sonst wodas ist alles nicht super sicherdie modernen Sprachenversuchen das zu vermeidenoder verbieten es sogar insgesamt ?? aber verbietet es insgesamtalso ?? mit den Zeigerverbogen er zeigt jetzt auf den nächsten eintragerfahrenesanguckenihr null eins zwei drei vier fünf sechs sieben acht neun Aer zeigt auf den Eintrag in den zwei steht derzeitwowjetzt der Gedanke mit dem FA rückwärtsder Name eines Rays ist die Adresse des vordersten Eintragskönnen auch rückwärts verwendenhier haben Sie ein Zeigerwenn sie sagen Zeiger von null tut er so als ob dieser Zeiger den Ameisen Restwertund schreibt an die vorderste Stelle jetzt von null die zwei vierzig ??da steht jetzt die zweiundvierzigUhr vor die zwei hattein dieses EE zeigte inzwischen auf diese Stellewurde vor die zwei hatte hatte jetzt die zweiundvierzigwar sie können den Namen eines Arrays verwendenals Zeigerund umgekehrt wenn sie ein Zeiger habenkönnte eckige Klammer dahinter machenund so tun als ob das andere wäredazu der Zeiger auf den Anfang eines Arbeits ??lassen soganz übliche Tricks in Cwie gesagt inmodernen Sprachen wird sowas das Wasser abgestelltweil es extrem gefährlich ist ?? nie so genau weiß wo in der Zeiger gezeigt?? über irgendwelche Grenzen gerade gegangen ist man sich vertan hat ?? Programmierfehler drin hat der Zeiger zeigt in längliche Blödsinn stellen dannjeden Unsinn mit veranstaltenes ist total effizientfür solche kleinen Maschinen damit man das machenje konnte sie das Wirts und je mehr Internet man drin hat umso vorsichtigerseinnoch mal hier das ?? spannt also ist diese nur bezieht sich jetzt nicht auf das Originalgerätsoll auf das FAanfangen bei den Zeiger eherst mal Zeichen E auf den Anfang von dem rät sie also auf die Stelle der etwa die eins stehthier sag ich gehe mit dem E einen Schritt weiter und zeigt äh auf die Stelle an der derzeit die zwei stehtund dieses E von null heißt dieses äh wird jetztgelesen wie ein Rehich weiß nicht mehr Überce ich lese verstehe dieses ewige eine Ray und der vorderste Eintrag von diesem Bereichsind derzeit die zweite ?? mit auf die zwei vierzig gesetzt weiß nichts mehr von den zehnder Grundwasser durch schon aberdie Bedeutung dieser Zeit ist so das wir nicht mehr von den Zinseneine sehr gute Frage was passiert wenn wir eh von eins einsetzenKomma vorführenvon einsgleich hundertInnung ?? durchJesus hier viel Krempelsokann uns ja angucken was hier in C drin stehtdiezeigte janach dieser Erhöhung auf die Stelle in der vor die zwei Standwird stets weit wird sie drin war wir haben zwei vierzig eingeschriebenE von einsSie betrachten diesen Zeiger eh wie ein Raydieses Ravefängthier anan der Stelle vergisst ihre AnführungszeichenIan bei der zwei das hier wäre der Eintrag nullfür dieses quasi ihre nahm sie und die drei das wäre der Eintrag Nummer eins für dieses quasi ehrenamtlichegehen dann wieder hübsch inüblichen Schritten weiter das heißt es wird gleich innig die drei drin stehen sondern es wird die hundert stehen??nunwas mich ist das total verwirrend aber ich glaube das ist nötig es gibt noch andere Art wie kann ich den selben Effekt machenwie können Sie auch diese Speicherstellemit IE erreichen irgendwas hinschreiben mit Eligleich sei nur ein hundert und einsden selben Effekt erreichen diese Zeilemitdem Zeiger ewig an den auch noch anders schreiben vielleicht sehen Sie dasauf jeden Fall aber zeigenjaalsonicht C++weil dann würde ich ja den Inhalt von E ändern das Reich nicht gut?? ich da zwar gemacht aber soweit ich gute Inhalt von ihr zu ändern ?? sie können auch E-Plus eins rechnen das auch wieder Zeigerarithmetikauf den Zeiger ein Draufaddieren gibt in einen neuen Zeigerund jetzt will ich wissenwas an der Stelle steht das ist das Ding was an der nächsten Stelle steht ist diese Bedeutungeh von den eckigen Klammern eins hat dieselbe Bedeutung wie SternchenE-Plus einnur dass das hier untenwissen will keiner wichtiger verstehtder nicht schon zwei Jahre C programmiert hatdie um das es viel leichter zu verstehennehme den Zeigergerein zweiterganzen ZeigerarithmetikGeschichten werden immer in ganzen Häusern sozusagen gerechnet ?? sie gehen nicht ein Byte weiteraußer ihr Datentyp ist ein Byte lang die gehen so zu viele ganzeEinheiten von dem Datentyp weiter Siggi Jensen Stellezwei Bytes weiter E-Plus einsdieser Stelle zwei weiß weiter und dann Sternchen und zu sagen gibt mir daswas da steht oder rede mit dem was da steht soll ich besser sagen spreche das an was verstehtich bisher nicht wesentlich mehr Schreibenan den selben Effektwie dieses E von einsdas ist schon bisschen Vokabeln zur ?? aber das ist C Folklorein praktisch jedem Zielprogramm sehen Sie genau sowas mit den Sternchenmit dem Kaufmannsunddiese Schreibweise unten ist bisschenabstrus war würde in jedem Fall die von eckigen Klammern eins schreibe ich wollte das ?? Vorführ mit der Zeigerarithmetikdes Wiki fusioniert zur E von einssind jetzt die drei wir zu hundertund jetzt muss die hundert zu hundert eins werdenBeistrich die hundert EinzelbedeutungZeigerarithmetikin Aktiontritt das irgendwie zusammenfassendals ?? das Kaufmannsundmachtein Objektzu seiner Adresse sozusagen?? sozusagendas Sternchen macht die Adresse zum ObjektGegenrichtungman hätte auch andere Symbole wählen können ?? in C hat sich dieses handliche Symbol nun irgendwie ergebenmanund dann die Zeigerarithmetiksie können auf Zeiger was drauf addieren sie können von zeigen was subtrahierenZeiger zu multiplizieren macht keinen Sinnich kann immer nur sinnvoll Gänsefüßchen zuweitergehen und sonstige Schritte zurückgehenund hier addiere ich eins drauf ich dir eine ganze Hausnummer weiter nicht nur ein Byte in zwei ?? zwei hier eine Hausnummer weiter und sage dannspreche mit dem was da wirklich steht wo das jetzt hin zeigtdass sie es Zeigerarithmetikin Aktion