[Playlisten] [Impressum und Datenschutzerklärung]

09D.1 Zeiger auf Strukturen an Funktionen übergeben


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

istdiese Funktion ?? mithilfe von Zeigern schreibenPunkt würde man das überhaupt tundiese Struktur Rechteck hierPunktweil sie hier Punkt HaarstrukturRechteckenthältzwei Punkte und einmal ein Materialjeder von diesen beiden Punktenenthält zwei double Zahlendas heißt hier bis zum Schluss in der Struktur Rechteckzweiter bezahl nochmals weiter bezahlen und die für das Materialeinen InternetshopYouTube ?? Rechteck ist ziemlich groß wenn ich sie durch die Gegend reichemuss Beistrich dass dafür bereitsbereitgestelltwerdenund es kostet eben auch die Strukturzu kopieren in den Speicherplatz die man der durch die Gegend schiebt das ?? typischerweise vermeidendas halb wenn ich diese Funktion hier habe möchte ich die eigentlich nicht so aufrufen dass ich dieFunktion jetzt kopiertdie Daten des Rechteck gebenan dieser Stelle sondern ich möchte dirlieberein Zeiger auf ein Rechteck gebendas wäre jetztder Job versuchen Sie das mal hinzukriegen hier kommt ein Zeiger auf ein Rechteck anfür die zu ?? Komma kopieren und in Oma neu zu schreiben?? diese Funktion aber sie soll jetzt einZeiger auf ein Rechteck kriegenalso Rechtecksternchenerundsie musste natürlich NC einen anderen Namen haben mit C plus plus könnte sie denselben Namen behaltender Compiler wird es in automatischen scheiden Pflicht ein Rechteck oder Richtanzeigeauf eine richtige C muss sie einen anderen Namen habenich schreib mal Mist berechnen Massezeigerum die auseinander halten zu könnenim Bundesanzeigerwas muss ich in dieser Funktion ändern damit das funktioniertseies kann hier nur da was ändern wo die Variable eher vorkommtwas muss jetzt hier passieren jährlich vorhereine Struktur in einer Variablen Rechteckund daraus möchte ich das Element imhabeneine Gruppenstrukturmit der ?? hier so sei die aus Struktur darin gibt es ein Elementeiner Tribut namens ähmjetztist er aber nicht mehrdirekt die Strukturer nicht nur eine Variable die eine Struktur enthält sondern er ist eine Variable die auf eine Struktur zeigt?? mit dem Sternchenwas passiert stattdessen also stehenja Möglichkeit einserderdie Variable mit Anzeiger verhält sich wie eine Reise können sagen mir was an der Stelle null stehtwas steht an der Stelle null an diesem Zeiger das ist jetzt ein Rechteck das könnte man schreibenwäre korrektsehr wahrscheinlich aber ehergewöhnungsbedürftigaus weildas könnte man meinen ?? wie ein Raygibt noch weitere Einträge gibt es auch eher in eckigen Klammern eins gibt's auch in eckigen Klammern zweiBuslinien wird auf jeden Fall schottisch weiter hinter oderdieses oderGips oder andererwas wäre vielleicht nahe liegender als die Minuten EintragLeerzeichenzeigen nun irgendwo in den Speicher reinwas soll ich deshalb auch nicht lernen sondern PRPRund PRverlinkt neunteranLeerzeichenjetzt Leerzeichen irgendwo in den Speicher gibt mir was an dieser Stelle alsvorderstes Element eines Arrays stehen würdedas ist also dann ein Rechteck davon kann ich immer fragenwie ginge das etwas direkterdas Markenzeichender Sternchen ihrSilvester steht schon RechtecksternchenPR PR ist der Zeigerdes Sternchen macht den Zeiger zum Rechtehier natürlich bei dieserSchreibweisesymbolischgemeint aber wenn jetzt wirklichaus dem Zeigerwas richtig machen will das echte Ding machen will Sternchen PRist das echte Dingund das echte Ding kann ich nun Fragenin das wir das jetzt schon so vielnach seinemElement ähmseinem Attribut ähm so Gottes auch funktionierendieses hier mit dem Sternchenklammern und Punkt das sieht außen bisschen aufwendig aus es gibt noch eine etwaskürzere SchreibweisePRund davonsehen ob resultierte jetztähm so könnte man das schreibenPR ist ein Zeiger auf eine Strukturkann ich schreibenminus größer alsWien Fall minus größer wie ein Fall davon ist mir ähmdas ?? ist dasselbe wie dieses hier hinten sieht etwas eleganter ausist es eleganter zu schreiben das wird man typischerweisederZeigerauf meine Strukturbesteht in PRunddaraus gibt mir nun mal aus dem Ding auf das das Zeichen gibt mir den Eintrag ähmso wie und was können sie da tun ich hab es ganz dreist stand er für das richtig PR für den Zeiger auf ?? richtig eingetragen was wenn sie da unten tungenau das wäre die geradlinige Lösung Sternchen PR-Macheraus dem Zeiger wie das echte Ding ?? wir das echte Ding jetzt eine Funktion übergebenmachen ProjectMacNumbers Aufnahme ?? herausist sie überhauptdas Inter tatsächlich so das wir natürlich jetzt bisschen unsinnig weil ich aus dem zeigerschlankenZeiger der Adresse im Speicherwieder das komplette Ding macheund es dann zur Funktion gebe das wäre nicht klug es wäre sinnvoller Funktion berechnet Fläche zu haben die auch Zeiger nimmteuch auch geradegroß I berechnete Fläche berechnen Masseberechnen Fläche das die Funktionberechnet Flächedabei ?? ich noch meine Variante dient Zeiger haben willPunktDick richtete sich auf ihr Sternchenwird es ?? PR damit es klar ist wenn ich jetzt hier PRPRwarPR PR schreiben würdees natürlich wieder falsch was muss ich da schreibendieselben Möglichkeiten wem können schreiben Sternchen PR-Tanzeswieder das echte Dingdas InseratePendant zu Sofiaoder sie schreiben PR von null sie tun so als ob seine ?? anfängtPunkt?? kann auch verstehenoder dasübliche wäre mit minus größerenFall zu bauen und dann versteht das auch soso will ich das mit demPfeilaus dem Zeige macht mir das echte Ding A und Bund dann geht das so weiterso könnte das auch funktionierendamit hätten wir jetzt eine Variante von Subventionen mit Zeigern funktioniert ich sollte die jetzt auch in der Header-Dateibeide Varianten sollte ich in der Header-Dateiihren hier alsoBerechneflächeendlich einmal so und ich hatte am ?? RechneflächeZeigermitZeigerbei der Berechnungmassedasselberechnen mussZeiger und sie's berechnen Massezeigernocheinmal wieder Aufrufjetzt aussehen?? ähm berechne Masse okayjetzt wieder selber noch mal macht dann ähm berechneZeigerdas wird jetzt nicht so funktionieren ?? was muss in dieser Zeile stehen damit funktioniertdas Kaufmannsunddas muss ich dann mal sagen alsmit demhier?? mit dem Sternchenmachen Sie den Zeigerzu dem echten Objektsozusagendas macht das Sternchenwas ich hier brauche ist jetzt das umgekehrteich muss das echte Objektzum Zeiger machen wo steht diesesObjekt gibt mir die Adresse von diesem Objekt das macht es Kaufmannsundalles Kaufmannsund sehen Sieeinmal als das logische undBusinessin dieser Formals den Operator der Saat gibt mir die Adresse von dem was dahinter stehtnebenbei das Sternchen hatte auch für mehrere Bedeutungen nicht der Sternchen finden Sie einmal somach mir das noch mit den Zeiger zum echten Objektder Sternchen finden Sie natürlich auch als Modifikationsseifen?? das wird mehrfach verwendet??weiche Medien derokay also aus dem B macht mir die Adresse wird für die beiden noch mal vor dass man den Unterschied einmal sehen kann einmal die alte Funktion der ich das gesamte Rechteck gebe die Daten des gesamten richtig?? in Kopiegeben??dagegen reinund ich danke ich ?? reindass die alte Funktiondie Pflicht wirklichdiese Daten hierin Kopie mitals Rechteck erjetzt zurückmit ?? die neue Funktionrechne Massezeigerdie neue Funktion bricht ein Zeigerdie Adresse im Speicher ihr hexadezimalnull neunE viereine Adresse im Speicher das es was die Nullfunktionunter dieser Adresse im Speicherso sagt uns hieran dieser Adresse im SpeicherSachsens EntwicklungUmgebung hier netterweise steht ein Rechteckmit folgenden Datenwas ich übergebe ist aber nicht das gesamte Rechteck was ich übergebe istdie Adresse nur die Hausnummer ist natürlich viel schlankerund die Entwicklungsumgebungweiß was gemeint ist und kann uns direkt sagen was denn an der Stelle im Speicher stehtaber unser Programm reicht eigentlich nur die Hausnummer durch die Gegend die Adresse hier hexadezimalnull neun E vierund damit wir dann weiter gearbeitetbesser noch einen wesentlichen Effekt haben soll normal eingehendieses Rechteck hier ist eine Kopievon meinem ursprünglichen Recht alle Daten einmal kopiert in diese Variable eherdieser Zeiger ihr derzeit auf mein ursprüngliches Rechteck es gibt kein zweites Rechteck im Speicherdieser Zeiger verweist auf das ursprüngliche Rechteckwenn ich hier jetztein Experiment veranstalteund sageverstellte mir doch mal aber verstärkte PRverstellen mir doch mal vom Punkt dadie X Koordinatestelledie auf zweiundvierzigPunkt nullKomma gerade was passiertPunkt das sollte hier auch malbei meinem anderen machendie alte Funktionsexperimentich stelle eher ?? Punkt A Punkt X auf zwei vierzehn Punkt null?? beide Funktionen sehen jetztdoch so ähnlich aus wie klassische Funktionohne Zeiger bei der ständig von den Punkt ADExkursen hat auf zweiundvierzig?? und hier die Funktion mit dem Zeiger bei der stellig die X Koordinate vom Punkt auf zweiundvierzigNetz guck ich mir in derFunktion hier mal an was passieren wirdimmer biszu dem Punkt dauerten von meinem Rechteck für dich die Masse berechnenich klappen wie auf ich Klappe A auf meine Funktionverstelltdie X Koordinate auf zweiundvierzigwas wir jetzt sehen wenn ich in den nächsten Schritt reingehe einen Schritt weiterzur nächstenzeiligführen diese Funktionaus jedoch die X Koordinate von A auf zwoundvierzig stellt was werde ich sehender Frage habe ich ?? heute schon gegeben nicht immer zu nächsten Schritt zur X KoordinateExkoordinateisteins Komma null ?? kriegen eine sehr komische Masse rausaber die X Koordinate ist eins Komma null bis eins Komma null geblieben warum ist die X Koordinate von meinem Rechteck eins Komma null geblieben obwohlich dochhier gesagt habe in der Funktion berechnen Masse Dicks Koordinateist Punkt also zwoundvierzig seinHerrsi mehrfach gesagt aber das geht eben unterdiese Variabledie kommt in Kopie an wenn sie normalerweisedenSeeprogrammvariablenübergeben hier die Anzahljedes Rechteckdann kommen die in Kopie anvon dem Original Rechteck was ich angegeben hatte hierdieses B von diesem Original Rechteck kriege ich hiereine Kopieund was passiert nun??ich habe meinem Hauptprogrammschafft das mal so Mengeimmer im Hauptprogrammhabe ich eine Variable sehenund in der Variablen B stecktein Rechteck drin ein Punkt und ein Punkt und an Materialund ich habemein Programmin dem ichdie Masse aus Rechnervergessen es heißtdarin habe ich eine variable Ärafür ein Rechteck der steht an Punkt Rinder steht an Punkt Rinde steht eineMasse trennenundzu Beginn des Aufruf dieser Funktionwird das hier da reinkopiertund dann stell ich den XL auf zweiundvierzigihr ständigden X wird auf zweiundvierzigund das heißt dieser hierder bleibt wie er istdas ist der Witz in der aufrufenden Funktion ähmhabe ich ein Rechteck in der Variablen Bdas wird kopiertin meiner Funktion wieder etwas ausrichten sollInsel kopierten Variante ändere ich die Exkoordinateaber ich ändere sie nicht in meinem Originalprogrammsozusagen bei dem Aufrufer jemand im Aufrufer steht immer nochder alte Wert Renn nicht zweiundvierzigin meinerFunktion der SD zwoundvierzig drinim folgenden des Ackerbaus und komischer Wert für die Masse rausrechnetjetzt hier mit dieserkomischen Ex Koordinate weiterund glich deshalb der unziemlichen Unsinn rausaber was ich nicht geändert habe ist das Rechteck hier das OriginalRechteck dieses Bist nicht geändert worden denn das ist nur in Kopie angekommenan dieser Stelledabin ich jetzt hier nähenokayalso das ist die klassische Art wie man arbeitet man übergibt Variablenals Werte so schön heißt bei Value der Wert wird übergeben in Kopie eine Kopie des Wertesjetzt das mit dem Zeiger ich übergebe die Hausnummerwas wird nun passierenda das muss ich jetzt innerlich fürs einmal vor da muss jetzt das X eins Komma null nachdem ich diesen grünen Schritt gemacht habe ?? jetztzweiundvierzigstehenich sage meiner Funktionwo wie das Rechteck im Speicher steht und meine Funktionarbeitetaufdiesem Rechteck im Speicher es gibt kein zweitesMal Klammer aufalso neue Situation jetztein Bildschirmneue Situationmähen und dieFunktion die aufgerufen wird in der Mailfunktiongibt es mein Rechteckmit zwei Punkten und sein Materialin der aufgerufenenFunktiongibt es jetzt aber kein Rechteck sondern nur einen ZeigerPRDiener genannt es gibt nur einen Zeigerich merke mir nurwodas Original Rechteck stehtund jetzt greife ich auf dieses PR zu oder über dieses PR passiert es richtig zu da verständlich was auf zweiundvierzigaber das ist im Original dann es gibt nur ein einziges Recht weg und das ist dieses hierin meiner Funktion gibt es nur noch die Hausnummer sozusagen von dem Rechteck die Adresse von diesem Rechteck ist im Speicher nur ein einziges Rechteckich spare ja Speicherund in diesem einzigen richtig verständlich jetzt über den ZeigerDax Koordinatedeshalb ändert sich das dass es bis in gefertigtes kann gewünscht sein auf diese Weise können Sie in FunktionenSachen verstellenaus ihrem Hauptprogrammdas ganze wünscht ?? es kann aber auch überNebeneffektsein wenn sie glauben sie dürften jetzt mit dieser Struktur machen was sie wollen upsaber sie haben gerade die Daten in ihrem Hauptprogramm ruiniert auf diese Weise schon sehr vorsichtig seindas es nicht nach hinten losgehtalso man spart sich das Kopierenmuss nicht die Kids darüber kopieren und bereits vereinigt rüberkopierenich brauch weniger Speicherplatzkein Duplikat anlegen musskann hilfreich seinweil ich dann tatsächlich Sachen einstellen kann verstellen dannaus anderen Funktionendie mich aufgerufen haben Komma kann natürlich nach hinten losgehen wenn sie Sachen wirklich verstellenauf diese Weiseglauben sie haben eine Kopie und dürftenGlauben sie machen was sie wollenaber ob seit Jahren keine eigene Kopiemüssen vorsichtig seindas geht mit Zeigern in anderen sprachengezogenerReferenzen insbesondere C plus plus gibt's Referenzen ?? sie das ganze etwas eleganter ausin Cgeht das dann soSpeicherbedarffür den Zeiger eben bei Speicherbedarf sie sehen hier immer wieder zu großzügigmit automatischen Variablen aber schon Prozesse funktioniertdas Themadannnicht seiner ?? den Speicherbedarffür denZeigerist da unten hin wiedie echte Strukturhat eben ein double und ein doubleund noch ein double und noch ein doubleundhier noch das Materialder Zeigerganz weitergehenKomma reingehender Zeiger sind wir hier in letzter Dezimaldarstellungder Zeiger hat auf diesem System zwei ByteAffen sechzehn Bit Rechner hatte Zeiger zwei Byte aufzwei ?? dreißig Bit rechnete der Zeiger eben vier bei den sechzig Bit Rechner der acht beidendiese Zeit bei das Wasser für den Zeiger speichert sechzehn Bitdass es viel weniger als für die gesamte DatenstrukturtypischerweiseZeiger viel kürzerals die gesamte Datenstruktur