[Titelmusik] Sprecher 1: Hallo, alle zusammen. Willkommen zurück in Abschnitt. Lovely day out-- weshalb bin ich Sicher, es gibt nur vier von euch hier und nicht unsere übliche Packung. Ich war krank an diesem Wochenende. Also ich habe keine Starburst für euch. Und ich kann anfangen zu husten furchtbar überall diese. Also einfach mit mir tragen. Ich werde wirklich versuchen und durch diese erhalten erste, aber bevor ich einen Hustenanfall. Aber nur einfach auf mich ein sein wenig bit-- das ist alles, frage ich. Also unsere Agenda für today-- nur reminder-- Ihr Quiz ist nächste Woche. Ich sagte Ihnen, diese letzte Woche, damit es würde nicht fangen Sie unvorbereitet. Also bin ich wieder daran erinnert. Nächste Woche Ihres Quiz. Zu diesem Zweck nächste Woche Abschnitt wird viel mehr sein von-- Ich werde versuchen, Arbeit in irgendeiner Bewertung. Also, wenn euch könnte helfen Sie mir, indem Sie mir Dinge, die Sie bequem mit, dass Sie sich Sorgen machen, Themen, die Sie für möchten mich zu decken, dass wäre toll. So kann ich versuchen und arbeiten sie in unserer Sektion der nächsten Woche oder zusätzliches Material oder prep senden Ihnen dass Sie nicht an anderer Stelle bekommen könnte. Yeah! Mehr Menschen kommen! Ich dachte, ich habe zu tun, dass schlecht letzten Woche, dass niemand will zurückkommen? Ich habe Angst. So dass die anderen drei Dinge dass wir gehen, gehen über sind Umleitung, Datei-I / O und dann Zeiger und dynamische Speicher. Ich bin sicher, du bist alles super aufgeregt über pointers-- locker Thema so einfach zu verstehen. Ich bin sicher, euch alle haben, oder? Also das Wichtigste zuerst, redirection-- Dies ist im Grunde nur eine Möglichkeit zu steuern, wie Sie Eingabe Dinge in Ihr Programm, wie Sie Ausgabe Dinge aus Ihrem Programm. Die wichtigsten Möglichkeiten, wie Sie Jungs haben mit ihm interagiert worden ist nur durch die Standardausgabe mit dem Druckbild hier. Aber es gibt Möglichkeiten, pipe-- wie wir hier sehen, ist eines unserer Wörter des Art von Rohr, das Informationen oder die Daten in einer Datei von einer Datei. Es ist nur verschiedene Möglichkeiten, Getting Things in Ihr Programm und aus Ihrem Programm, statt nur auszudrucken, um diesen Bildschirm oder Eingeben Dinge von der Kommandozeile. Also zuerst ein wenig ist größer als Caret. So output-- er druckt nur die Ausgabe in eine Datei statt auf dem Bildschirm. Also, wenn Sie etwas, das gedruckt hatte "Hallo, Welt!" den Bildschirm, wenn Sie es nennen, statt um output.text, dass erstellt diese Datei namens output.text. Und wenn Sie es öffnen, wird es sagen: "Hallo, Welt!" drin. Dies kann super nützlich sein wenn Sie eine Tonne von Störungen haben tatsächlich, wie wir sehen in dieser. Wenn Sie zwei Caret tun, werden sie drucken Sie die Fehlermeldungen. Also, wenn Sie ein Problem mit gerade Kompilieren, hat es eine Menge von Fehlern und du bist zu verzetteln bei dem Versuch durch in der Befehlszeile, um zu blättern durch alle, man kann sie nur drucken sie in eine Datei, öffnen Sie die Datei, so dass Sie durch sie leichter zu navigieren. Ich tatsächlich verwendet, dass eine viel, wenn ich das Debugging meine 181 psets für maschinelles Lernen. So kann es super nützlich später sein. Es ist auch nützlich, wenn Sie ein Programm haben dass vielleicht erzeugt eine Bibliothek oder erzeugen ein Satz von Strings und müssen in der Lage zu sehen, dass sein es richtig Erzeugen sie. Dies ist der Weg, das zu tun. Also, wenn man sie in einer Datei, die Sie drucken möchten, leichter untersuchen sie, nicht wahr? Versus versuchen, blättern durch Ihre Befehlszeile. Und dann eine Sache zu beachten ist, dass mit nur der größere als Caret, wenn Sie schreiben in einer Datei, die bereits exists-- so wie, wenn wir liefen diese die erste Zeit, setzen wir es um output.text, und dann hatten wir ein zweites Programm dass diese ausgedruckt als Programm zwei und tat eine größere als output.text, es wird überschreiben dass-- so schreiben, was jemals war in diese Datei zu beginnen. Also, wenn Sie angehängt werden soll in einer Datei, wie wir hier sehen, Sie gerade tun, zwei mehr als Zeichen. Und es wird, um es anzuhängen. Es wird nicht überschreiben. Also, wenn Sie mehrere ausführen müssen Programme und Art zu halten verfolgen, was alle von ihnen sind Rückkehr in die Sie in einer Datei, das ist ein Weg, um es zu tun. Wenn es dir egal ist, was in Ihrem Datei und es ist erlaubt, überschrieben werden, können Sie einfach ein einzelnes größer. Ist das sinnvoll, um alle? PUBLIKUM: Wie Punkt-Schrägstrich hallo größer als Ausgabepunkttext, wie zweimal, es werde einfach nur auf die Produktion zeigen dot Text ein zweites Zeit-- Sprecher 1: Richtig. So wäre es im Grunde nur komplett schreiben, was dort zu beginnen. Wenn diese Datei hier der output.text bereits vorhanden ist, im Grunde, was Sie nennen dass wieder mit einem einzigen größeren als man nur daran zu denken als wie es die Datei ersetzt. Wie, wenn Sie das Speichern eines Word- Dokument und Sie als speichern, und Sie denselben Namen beibehalten und es vollständig überschreibt es-- das ist das gleiche Art der Sache. Wer Fragen zum Thema haben nur Ausgabe in eine Datei? Genial. So offensichtlich, wenn Sie umkehren Pfeilrichtung, es Eingangs tun können. Also, wenn Sie Jungs hatten wie Cäsar oder Visioneer und man musste Eingangs etwas, Sie eine Befehlszeilenargument hatte dass tatsächlich Eingangs es. Dies ist ein weiterer Weg, um das zu tun. Also anstatt zu warten, für eine Eingabeaufforderung wie wenn Sie gebeten Ihre Nachricht in Caesar oder Visioneer, wenn Sie eine Textdatei hatte dass Ihre Botschaft hatten, Sie konnte ihn einfach in das. Also, wenn dies wie dot slash Caesar 3 weniger als Pfeil Eingabetext, die ist Ihre Botschaft, dass wäre wunderbar laufen. Wenn Ihr Caesar Programm tatsächlich für die Eingabe von dem Benutzer gebeten, es wäre schon deshalb, weil Sie in dieser Datei eingegeben haben. Das ist nur ein weiterer Weg. Nur eine Umkehrung output-- nur Eingang für Ihre Daten. Und dann die letzte ist Rohr. Also das hier ist ziemlich cool. Da es Ihnen erlaubt, nehmen den Ausgang eines Programm und legen Sie sie als Eingabe in ein anderes Programm. Ich weiß nicht, ob jemand von euch mit dem entziffern gespielt dass CS50 haben könnte euch gegeben, aber es wäre können Sie einige Beispiel zu nehmen Datei, geben Sie ihn in Ihre Verschlüsselung, und dann von dort geben dass in Ihre Entschlüsselung um sicherzustellen, dass es stellte sich heraus das gleiche. Also ist es eine Art, wie Dreiwegeschleife. Go for it. PUBLIKUM: Wenn ein Programm hat mehrere Eingänge, gibt es eine Möglichkeit, es zu sagen, welche Eingangs um die Textdatei oder die Ausgabe für den Einsatz? Sprecher 1: Es hat mehrere Eingänge. Was auch immer Ihre Datei input-- wenn es Bitte um Input, der zum ersten Mal, ist es davon ausgehen, ich denke, es ist werde Rohr in der gesamten Datei. Also, wenn Sie mehrere Eingänge haben, sind Sie werde in mehrere Dateien kochend werden. Also, wenn Sie für Nachrichten fragst dreimal in Ihrem Code, du gehst zu setzen sind in drei verschiedenen Dateien. Und es wird verrückt. Und Sie sollten nicht zu haben, Sorgen um, dass gerade jetzt. Aber das ist die Idee. Also ja, ist Rohr nur Ausgang eines Programm verwendet Eingang in die andere. Jeder gute da? Cool. Ok. Sie werden wahrscheinlich nicht haben zu viel zu tun. Aber Sie sollten verstehen, Möglichkeiten, dies zu nutzen. Und es gibt einige Fälle, möchten Sie vielleicht, es zu benutzen. Also Datei-I / O- Ich weiß, was du bist saying-- wir auf das Lesen aus gebrauchten und Schreiben auf unserem Bildschirm gibt, Das ist Standard in und Standard aus. Und das ist, was euch gewesen Dabei seit Beginn der Klasse hier. Aber Sie können auch Dateien lesen und schreiben, die alle Datei-I / O- so Datei eingegeben wird, Ausgang ist alles es steht. Also im Grunde bedeutet, dass können Sie Ihre Daten jetzt speichern. Wenn Sie nur drucken, um die Bildschirm, es ist im Grunde gegangen, nicht wahr? Sobald Sie machen "Hallo Welt "und run" Hallo Welt " er druckt "Hallo Welt" auf dem Bildschirm. Aber du nicht wirklich tun können etwas mit ihm von dort. Wenn Sie in einem Text speichern Datei, dann plötzlich Sie diese Daten, die darfst du haben zu manipulieren oder legen Sie sie in eine Datei, oder legen Sie sie in ein Programm später. Einer der Gründe Deshalb tun wir dies nur als eine Möglichkeit, um Daten für eine spätere Verwendung zu speichern. Ich habe ein paar Schritte hier nur zu Fuß über Standard I / O. Im ersten Schritt können Sie müssen einen Verweis erstellen zu der Datei mit allen Caps FILE Sterne-Datei. So daß schafft einen Zeiger auf eine Datei. Also dann, um es zu öffnen. Und Sie sagen, buchstäblich, nur Datei gleich fopen. Und das wird zu einer Rückkehr Zeiger auf die Datei, die Sie gerade geöffnet. Ich sah ein paar von euch Jungs bei der Bürozeiten. Aber eines der Dinge, ist remember-- Zeigern kann irgendeine Adresse oder null, richtig? Wenn wir jemals einen Fall, wo haben etwas kann null zurück, was wir zu tun haben bevor wir es überhaupt? Wir müssen, wenn zu überprüfen es ist null oder nicht, oder? Weil einige von euch vielleicht gehabt haben die Frage, wo jedes Objekt, wurde in Breakout zurückgekehrt war null. Sie haben versucht, durchführen eine Funktion auf sie. Und Ihr Computer Website bemängelt. Richtig? Ich wette, ein paar von euch kann dieses Problem gehabt. Also mit fopen, wird fopen entweder einen Zeiger auf die Datei, oder wenn etwas schief geht, es wird null zurück. Also immer müssen Sie prüfen, daß es nicht null zurück bevor Sie versuchen, etwas anderes zu tun. Das ist wie ein Standard-Paradigma dass du gehst zu hier benötigen. Wenn es überhaupt eine Chance, dass etwas könnte null zurück, überprüfen, um sicherzustellen, dass es nicht, bevor Sie fortfahren. Ansonsten wirst du zu schönen Ort Fehler bekommen. Und niemand mag, um mit denen umzugehen. So wie wir hier sehen, das erste Argument ist nur der Pfad zu der Datei. Wenn diese Datei nicht existiert, es geht um die Datei zu erstellen. Und ist es nur geht leer zu sein. Und dann das zweite Argument ist die, dass Sie den gewünschten Modus. Wollen wir aus dieser Datei gelesen? Wollen Sie daraus zu schreiben? Wollen Sie anhängen? Also eigentlich das, was ich gerade said-- wenn die Datei nicht existiert und Sie versuchen, aus dem gelesen sind es, es geht um einen Fehler zu werfen. Wenn die Datei name-- mögen, wenn file.text existiert noch nicht und Sie schreiben wollen auf, wird es zu erstellen eine leere Datei file.text für Sie aufgerufen. Und wenn Sie anhängen möchten, Sie sollten das gleiche tun. Ist das sinnvoll? Wenn Sie versuchen, aus dem gelesen sind eine Datei, die es noch nicht gibt, es wird ein Fehler ausgegeben. Andernfalls wird die Datei zu erstellen für Sie tun, was Sie es wollen. Cool. Jetzt können wir aus der Datei gelesen. Und dies ist nur irgendwie geht durch die verschiedenen Funktionen dass wir für Datei-I / O. Dieser Wille sein in dieser Woche die pset notwendig, wenn ich mich richtig erinnere. Ja, es ist absolut sein notwendig in dieser Woche die pset. So fgetc gibt das nächste Zeichen. fgets nur eine Textzeile zurück. Es wird alles bis zur Rückkehr eine neue Linie, und es wird zu brechen. So fread liest eine bestimmte Anzahl von Bytes, und legt sie in ein Array, das ist etwas, das Sie vielleicht will mit Wieder size-- tun könnte nützlich sein. Wie viele Menschen haben gelesen die pset spec, übrigens? Ok. [Unverständlich] Sprecher 1: OK. In Ordnung. Definitiv lesen dass-- es ist ein Spaß pset. Sie erhalten eine gelöschte Speicher erholen card-- wirklich aufregend, wenn es funktioniert. Aber auf jeden Fall, dem Lesen beginnen, dass. Kommen Sie mit mir reden, wenn Sie Fragen über sie. OK, so wie ich schon sagte, fread liest eine bestimmte Anzahl von Bytes. Das ist einige beliebige Anzahl dass du gehst zu setzen. Und dann fseek nur bewegt in eine bestimmte Position. Also vielleicht haben Sie nicht interessieren über die nächsten 10 Bytes. Sie wollen einfach nur nach vorne zu springen. Sie kümmern sich nicht um diese. Sie möchten ab dem Byte 11. fseek ermöglicht Ihnen, das zu tun. So erlaubt es Ihnen, selektiv sein über das, was Sie lesen. Weil fgetc, fgets und fread lesen von einer bestimmten Stelle in der Datei. Ein Weg, um dies zu denken ist, wenn diese ist unsere Datei, wenn Sie zunächst öffnen, Sie diese Position in der Datei haben das beginnt am Anfang. Wann immer Sie nennen fgetc, fgetf oder fread, es wird aus starten Dieses Positionsmarkierung. Angenommen, Sie haben gerade lesen möchten Dieser Teil des Speichers hier. Man kann nicht einfach anrufen. Sie haben hier zu suchen und dann von dort zu lesen oder lesen, bekommt, oder getc, je nachdem, was Sie wollen. Also suchen nur ermöglicht es Ihnen, überspringen Teile des Speichers. Und das ist die einzige So können Sie die Dinge überspringen ohne sie zu lesen in Ihrem Puffer. Ist das sinnvoll, um alle? Offensichtlich gibt es eine viel parallel hier-- unserer Ausgang oder Eingabeumleitung, Sie gelesen haben und schreiben. So fputc gerade schreibt ein Zeichen in der Datei. fputs schreibt ein paar Zeilen. Fprintf druckt eine formatierte Ausgabe. Also, wenn Sie Register aufweisen, oder Raum, oder was. Und dann schreibt fwrite einige Array von Bytes in einer Datei. Dies ist also die gleiche Art und Weise fwrite und fread sind analog opposites-- fgets, fputs und dann fputc und fgetc-- Lose verrückte, schnelle Sachen. Nur irgendwie diesen handy-- halten Du unterschiedlichen Zeiten haben wo vielleicht wollen Sie nur ein Zeichen zu einem Zeitpunkt. Vielleicht möchten Sie eine ganze Zeile. Mit Ihrem Wörterbuch pset-- Das ist in zwei pset- Ich glaube, wir geben Ihnen eine ganze Wörterbuch in einem Textformat was sich jedes Wort durch eine Linie getrennt. Also, wenn Sie lesen wollte in einem Wort zu einem Zeitpunkt, was könnte man verwenden, wenn Sie lesen und sie sind alle auf neuen Linien getrennt, und Sie wollen einfach nur ein Wort zu einer Zeit? PUBLIKUM: fgets Sprecher 1: Richtig. Fgets-- denn das gibt was auch immer auf einer Linie. Und wenn jedes Wort ist seine eigene Linie, können wir fgets verwenden. Cool. Macht das Sinn, alle? Cool? Ja, wir gehen zu erreichen der lustige Teil mit Zeigern sehr bald, wo Sie bekommen, um etwas Mathematik zu tun. Und es wird groß sein. Letzte step-- Ihre Datei zu schließen. Mit so viele Dinge hier, einer unserer Paradigmen ist, wenn sie zurückkehren können null, überprüfen Sie den Wert null. Wenn Sie etwas zu öffnen, Sie lieber schließen. OK, so dass Sie nicht getan, bis Sie getan, wenn Sie es geschlossen haben. Ein bisschen wie es ist noch nicht vorbei bis die fette Dame singt. Das ist wie das Schließen Ihrer Datei. So heißt es hier, nur zu wiederholen, immer öffnen Sie Ihre Datei vor du bist Lesen oder Schreiben zu. Und immer schließen Sie es, wenn Sie es geöffnet haben. In Ordnung? Cool. Also hier ist ein Beispiel. Wenn ja tiny-- ich kenne dich nicht Jungs können das sehr gut zu sehen. Wenn wir nur erhöhen könnte die Helligkeit irgendwie. Lassen Sie mich eigentlich tun, wenn ich kann. OK, kann euch nicht wirklich sehen, dass überhaupt, können Sie? OK, wir gehen, dies zu tun, dann. [Unverständlich] Ich nehme an, das ist viel besser zu sehen. Kann jemand sehen, wo meine Maus ging ist die Frage? Ah, da es ist-- was kämpft! Ok. Grundsätzlich sollten Sie Jungs Art haben einer Idee, was dieser tut. Es ist nicht perfekt. Aber ich möchte lieber erklären als zu verbringen mehr Zeit mit dem Versuch, um es richtig zu formatieren. Grundsätzlich wie Sie hier sehen, beginnen wir mit Datei geöffnet. Und wir haben einige Datenbankdatei, die wir sind Öffnung, die sagt, es ist unsere Studenten. Und wir werden, es zu schreiben. So natürlich, null zurück. Also müssen wir für null überprüfen. Und dann, wenn es nicht null, gehen wir durch. Und wie Sie sehen, sind wir Looping durch hier. Es gibt Studenten. Studierende ist Hash definiert als drei. Und was wir tun ist, wir sind Drucken auf die Datei, oder? Also, was sind wir den Druck, um unsere Datei? PUBLIKUM: Die Noten dass in dem Array sind? Sprecher 1: Ja. Die Noten, die in sind die array-- genau. So eröffnen wir diese Datenbankdatei, die Ich nehme an, eine Art Notendatenbank. Und wir sind nur Ausdruck der Partituren der einzelnen Schüler zu dieser Datei. Cool? Gut. Genial. Ok. Lassen Sie uns zurück zu-- PUBLIKUM: Ich habe eine kurze Frage. Ist der printf nicht in der for-Schleife? Das ist nur in der if-Schleife? Sprecher 1: Nein, es ist in der for-Schleife. Ich kann nicht sehen, meine Maus sehr gut hier oben. Also bin ich kämpfen, um Format, das richtig. Diese Halterung sollte verschwunden sein. Es sollte hier unten sein. Dies ist, was in Ihrem for-Schleife. Da. Jetzt ist es hübsch. Also das ist, wie es sein sollte, außer be-- für die letzte Klammer, die ich entlassen. Ok. Ist das sinnvoll, um alle? Ok. Wir werden weiterziehen zur nächsten Sache dann- was, eigentlich, Sie gehen zu müssen, um den Code zu sehen. Also ich bin gerade dabei, kopieren, dass mehr als jetzt. Ok. Also werde ich Sie diesen Code, um zu zeigen Jungs. Und ich möchte, dass Sie versuchen, Figur herauszufinden, was es tun soll. Also gegeben dass-- eine Minute dauern. Versuchen Sie herauszufinden, was hier vor sich geht. Irgendwelche Ideen? Wir wissen, dass wir mindestens zwei Argumente in der Kommandozeile, oder? Ich nehme an, von denen sein wird dass [unverständlich] unseres Programms ist und dann etwas anderes. Denn wenn [unverständlich] weniger als zwei, wir schreien sie an. Richtig? Und die aus der Nutzung, es sieht aus wie es geht um eine Art von Datei sein. Wir alle stimmen zu, dass? So jetzt, was ist die Schleife zu tun? Wie ist es durchmacht? PUBLIKUM: Alle Dateien. Sprecher 1: Genau. Es ist durch gehen den ganzen Dateien, die wir haben Eingang gibt. Also für jede Datei, ist es eröffnet eine Schnur gibt. Es öffnet sich die Datei. Richtig? Und es ist von ihm zu lesen. Natürlich überprüft, ob es null. Und dann ist es zu drucken. Wenn es null, es ist nur sagen uns dass das nicht eine Datei, die existiert. Denn denken Sie daran, mit lesen Sie unsere Datei zu bestehen hat. Richtig? Mit Schreib- und append, Sie bekommen können mit ihm weg. Aber mit Lese-, hat unsere Datei zu existieren. Und dann, wenn es existiert, Was tun wir hier? Lassen Sie uns gerade hier zu beginnen. Was ist das do-- dieses erste Zeichen. Was ist zu tun? Er bekommt ein Zeichen, oder? Was also ist das da? Es wird das erste Zeichen. Wer weiß, EOF? PUBLIKUM: Ende der Datei? Sprecher 1: End of file-- genau. Also, es wird durchgehen die gesamte Datei, oder? Und dann, es wird durch aktualisieren bekommen jedes nachfolgende Zeichen. Richtig? Und was tut sie? PUBLIKUM: Putting, dass in-- Sprecher 1: putchar Drucke zu Ihrem Bildschirmschoner. [Unverständlich] das Zeichen. Und dann, wenn es [unverständlich] Dies wird die Datei schließen. PUBLIKUM: Haben Sie nicht brauchen einen [? sonst? ?] Sprecher 1: Nicht unbedingt. Ich meine, es ist eine Art in diese impliziert werden. Denn dies gibt, obwohl, wie lange da dies nicht fangen diese, du bist in Ordnung. Ich meine, es ist wahrscheinlich gut üben, um eine anderes zu tun. Aber ein anderes ist nicht immer notwendig vor allem wenn du etwas haben wie eine Rückkehr, die bedeutet, dass in diesem Fall, wenn es auch es, Ihr Programm geht zu Ende und es wird nie dazu kommen. Es ist mehr für den Fall, dass Sie nicht unbedingt der Rückkehr etwas. Denn wenn dies nicht Rück nichts, es würde bedeuten, dass, wenn das wahr wäre, der Rest würde noch laufen. Und in diesem Fall gegebenen würde ein falsches möchten. Wenn es zurückkehrt, und Ihr Programm Ende, ein anderes ist alles nicht nötig die Zeit, abhängig vom Kontext. Jakob, hast du eine Frage? PUBLIKUM: Yeah. Also tut fgetc das nächste Zeichen zu bekommen? Wie funktioniert der Charakter zu erhöhen? Sprecher 1: Ja. So fgetc bekommt das nächste Zeichen. Sie können es wie C ++ in einem gewissen Sinne zu denken. PUBLIKUM: Also, was EOF war? Sprecher 1: EOF Ende der Datei. Es ist nur eine Markierung, die Sie wissen lässt dass Sie am Ende der Datei. Also das wird gedruckt zu Ihrem Standard heraus. Und dann es geht um zu schließen die Datei, wenn es fertig ist. Und dann lassen Sie uns gehen die nächste Datei, oder? Also insgesamt, was bedeutet das Programm? [Unverständlich] Sprecher 1: Ja. Er druckt einfach alles da. Also, wenn euch je benutzt habe CAT und dann die Namen irgend file-- Ich weiß nicht, ob jemand von euch immer das getan auf Ihrem Terminal. Aber wenn Sie jemals verwenden die Befehl CAT-- C-A-T-- und dann unabhängig von Datei Sie dort-- es druckt es aus, um Ihre Terminal, das kann super praktisch für einige Dinge. Ich benutze es eine Menge. Ist das sinnvoll, um alle? Cool? OK, damit Ihre Aufgabe now-- entweder durch sich selbst oder mit den Leuten um Sie-- ist es, schreiben Sie einfach ein einfaches Programm das wird nur schreiben "Hallo Welt!" in einer Datei. [Unverständlich] [Unverständlich] Sprecher 1: Ich war wie, tat Ich tun, dass schlecht letzte Woche? Ich glaube nicht, es war so schlimm. Ich bin froh, dass Sie alle hier sind. Es macht mich wirklich glücklich. Ich bin ein Mädchen von einfachen Freuden. Ich möchte nur, wenn mein Abschnitt besucht. Also ich bin gerade erst diese begann für euch, damit wir zusammen Code kann. Ich mag es nicht Putting jedermann auf der Spot, wenn Sie wollen. Gruppe: für das Quiz, zu tun müssen wir ein Programm zu schreiben? Sprecher 1: Sie können die gestellt werden schreiben einfache Programme von Hand. Jawohl. PUBLIKUM: Das Quiz ist nächste Woche, oder? Sprecher 1: Das Quiz ist am kommenden Mittwoch. Das heißt, es ist ein schönes [? CSE?] Einstufung Party danach, die bedeutet, dass Sie Ihre Ergebnisse bekommen Rücken, zu welchem ​​Zeitpunkt night--? Wer weiß? Aber es wird an diesem Abend sein. In Ordnung. Wie wollen wir dies an? Ich gebe Ihnen ein hint-- beginnt mit diesem. PUBLIKUM: Sie haben, um eine Datei zu öffnen. Sprecher 1: Ja. Also, was wollen Sie diese nennen? Haben Sie nur wollen, um es "Datei" zu nennen? Machen wir es einfach. So fopen-- was unsere Ausgangstest sein wird? Nennen Sie es "Hallo." Und was ist unser Modus? Was tun wir, um diese Datei? PUBLIKUM: Lesen. Schreiben. Sprecher 1: Wir sind daran zu schreiben. Lovely. OK, also diese Datei haben wir jetzt. Was brauchen wir, um zu tun? PUBLIKUM: Überprüfen Sie, ob es null. Sprecher 1: Prüfen Sie, ob es null-- genau. Das ist, was Ich mag zu hören. Das sollte automatisch erfolgen, vor allem so ziemlich von diesem Punkt an. Wenn Sie Speicherzugriffsfehler zu starten, werden Sie wahrscheinlich nicht für null überprüfen irgendwo. In neun von zehn, das ist gehen, um Ihre Fehler. Also, wenn du könntest einfach in das zu bekommen Gewohnheit, immer überprüfen, wenn es null, Ihr Leben geht zu sein schön und easy-- oder einfacher. So überprüfen Sie, ob es null. Also, wenn es nicht null ist, dem ist das, was der Knall ist gleich means-- nicht null-- es ist gültig. Was wollen wir tun? Wir drucken möchten gerade auf diese Datei, nicht wahr? Also, was sollen wir benutzen? PUBLIKUM: Fprintf Sprecher 1: Fprintf-- schön. Und fprintf dauert zwei arguments-- wo es geht und was wir wollen gedruckt. Also, was ist der erste? Wo ist es hin? PUBLIKUM: Datei. Sprecher 1: Es wird in einer Datei. Und was wollen wir gedruckt? "Hallo, Welt!" In Ordnung. Wir haben eine letzte thing-- ein weiterer großer Paradigmen hier. PUBLIKUM: Schließen. Sprecher 1: Schließen. Dort gehen Sie. PUBLIKUM: Ist das passiert wenn die Datei null? Sprecher 1: Nein, das ist, wenn es nicht null. PUBLIKUM: Oh, wenn es nicht-- OK. Für die fopen und dann die zwei Argumente, die hineingehen, was hat das erste Argument wieder bedeuten? Sprecher 1: Das Argument ist wie der Name der Datei, dass Sie wollen, um zu gehen. So, nachdem diese läuft, würden Sie haben einige Datei namens "Hallo" das hatte "Hallo Welt" in ihr. Das ist alles. Nur der Name. PUBLIKUM: Und da es das Schreiben, das Datei muss nicht bereits existieren. Ist das, was Sie gesagt haben? Sprecher 1: Richtig. Genau. Wenn "Hallo" als Datei noch nicht existiert, ist es werde eine Datei namens erstellen Hallo "und schreiben, um es für Sie. PUBLIKUM: Wenn Sie sagen das Programm zum Schreiben an der Datei, Warum schreiben Sie "Datei" statt der Name der Datei und fprintf-- Sprecher 1: Denn in diesem Fall haben wir dass große FILE-- alles in caps-- Stern, einreichen. So ist es ein Zeiger auf den Datei dass du redest. Dies ist der Weg, wir einfach darauf verweisen. Also in diesem Fall, können Sie kann der file-- aha denke, wir this-- Datei hier verwenden bezieht sich auf die Eröffnung des "Hallo" und lässt sie zu schreiben. PUBLIKUM: Könnten wir einen "Hallo" statt [? von nur?] f-Datei? Sprecher 1: Nein, denn "Hallo" muss offen und beschreibbar sein. Datei hier ist wie ein Bezeichner, die OK sagt, wir haben diese file-- hello-- dass wir auf der Suche. Es wurde geöffnet. Und wir werden, es zu schreiben. Wenn Sie einfach "Hallo", was darin eingekapselt. Also, es wird ausflippen. Ich meine, man könnte es genannt haben. Sie könnten Datei getan haben, Stern, "Hallo", ist gleich, dass. Aber der springende Punkt ist, dass Sie dringendst eine Datei Sterne Zeiger um in der Lage sein, um diese Funktionen nutzen zu können. PUBLIKUM: Können Sie Datei, Sterne, file, "Hallo" oder haben Sie zu setzen Datei Stern, Datei, indem es? Sprecher 1: Du könntest do-Datei, Stern, "Hallo." Sie können dies ändern welchem ​​Namen auch immer Sie wollen. Es ist völlig willkürlich was das heißt. Sie können es nennen nichts. Nennen Sie es fliegen Spaghetti, wenn man wollte. PUBLIKUM: Was ist das "w" in Anführungszeichen zu? Sprecher 1: Das "w" ist nur der Modus. Also sind wir in diese Datei zu schreiben. Jeder gut? Klar? Ja. PUBLIKUM: Also, wenn es dies schreibt Datei, wo finden wir dann diese Datei? Sprecher 1: Es wird in der gleichen sein Verzeichnis, das Sie sind momentan in. Wenn Sie in pset drei sind und Sie dies, innerhalb Ihrer pset laufen drei Ordner sein wird Diese Datei namens "Hallo." Cool? Jeder gut? Ich fühle mich wie du bist alles es zu bekommen, das ist toll. Ok. Also zurück zu meiner Dia show-- Ich liebe es, wenn Dinge funktionieren. OK, pointers-- Seid ihr aufgeregt? Zeiger sind groß. Sie nehmen ein wenig um den Kopf wickeln um. Dies ist mein zweites Jahr Lehr Zeigern. Und ich glaube, ich habe es endlich. Also, wenn Sie zu kämpfen, ist es OK. Wie ich schon sagte, das Zeichnen von Bildern hilft viel mit Dingen in CS, so viel wie ich glaube, die Leute sind in der Regel zu denken, oh, die an einem Computer können wir. Wir sollten einfach Code. NO- Zeichnung Bilder hilft Ihnen wirklich. Und ich ermutige Sie, Versetzen Sie sich in Kindergartenseite und bringen Buntstifte oder Marker und Unentschieden. Denn es wird dir helfen. Und wenn du mich im Büro zu sehen, ich wird um Stapel von Papier tragen mit Stiften zeichnen Dinge aus. Also vor allem mit pointers-- Bilder zu zeichnen. Und ich bin sicher, dass wir tatsächlich zu sein zeichnen einige Bilder hier. So euch allen lernte Binky sehen dieses coole claymation Sache. Und wir denken, es ist wirklich lustig, wenn er explodiert in einen Haufen von Stücken. Es ist einige Comic Relief für die Klasse. C [unverständlich] diese große Fähigkeit um Speicher zu steuern. Und es ist eines der Dinge, die wirklich macht es wie eine mächtige Sprache. Aber mit großer Macht kommt große Verantwortung. Und verrückte Dinge passieren können Wenn Sie nicht vorsichtig sind. Also, wenn Sie verwenden Zeiger, machen möchten Sie sicher, dass Sie wirklich verstehen, genau das, was du tust. Hoffentlich wird das nächste bisschen Zeit wird Ihnen helfen, wirklich zu verstehen, Zeiger, wie man sie benutzt, und wie man sie zu manipulieren. So memory-- Ich bin sicher, wir haben gesehen dieses Diagramm. Also das ist nur ein einfaches Diagramm wie sich die Dinge vielleicht Speicher abgelegt werden. So haben Sie grundsätzlich diese riesige Felder von einem Byte-Blöcke ist, was wir haben hier-- leichten um eins jedes Mal. Dies ist in hex [unverständlich] so Acht-Bit-Blöcken. Und jeder Block zugeordnet mit etwas Hexadezimaladresse. Also, wenn Sie jemals sehen die 0x, das ist nur die Notation dass es eine hexadezimale Adresse. Sie können davon ausgehen, bedeutet dies, irgendeine Adresse im Speicher. Wir reden über Speicheradressen sprechen wenn Sie sehen, hexadezimal. Wir haben ints sind Variablen, Schwimmer sind Variablen, die gespeichert werden. So ints store ints. Floats Speicher schwimmt. So haben wir auch Zeiger diesem Speicher Speicheradressen. Das ist eine Art von Mapping. Zeiger sind ausschließlich für Speicheradressen. Also das ist, wie Ihre Art gibt. Ihr Gerät ist 32-Bit, was bedeutet, dass Ihre Speicheradresse ist vier Bytes. So dass jeder Zeiger, die Sie haben wird sich auch bis vier Byte. Oder aber, wenn es vier Bytes, Speicher vier Byte. Pointers Speicher Speicher. Daher sind sie vier Byte. Cool-- will nur verstärken, dass. Sie sollten diesen Comic jetzt. Ich weiß nicht, wie viele von euch sind xkcd Fans, aber ich liebe xkcd. Es ist toll. In Ordnung. So schaffen pointers-- wie gesagt, es ist ziemlich genau wie alles andere. Sie haben einen Typ. Sie haben einen Namen. Richtig? Das ist, was wir da haben. [? Hex?] Sterne bedeutet, es ist ein Zeiger, und dann was auch immer Sie es nennen wollen. Also der Typ repräsentiert was Sie speichern können. In Ordnung? In der gleichen Weise, dass, wenn wir tun, ints, wir wissen, dass wir Speichern eines int gibt. Mit einem Zeiger, das hält eine Speicheradresse. Aber was es bedeutet, hier, wo ist dass-- eine Zeichnung wird sich als nützlich erweisen. Also in diesem Fall, wir haben einige value-- sagen wir vier. Vier ist an der Adresse ein. OK? Dieser erste bedeutet hier dass es ein Zeiger 2x. Richtig? Es ist einige Zeiger x. x kann etwas sein, was auch immer. Was auch immer x ist-- sagen x ist vier. Es wird in den Laden Speicheradresse hier. So int, Stern, ist x-- diese einige andere Schlitz in memory-- wer weiß, was das ist. Aber es geht um hier eine Adresse zu speichern. Also das wäre like-- in diesem Fall, was auch immer, bei 0x1-- gespeichert, was gespeichert wird unter der Adresse, die unsere Zeiger hält, hat mit passen was wir bezeichnet. So zumin 0x1, in diesem Fall ist dies x. Dies kann immer nur sein ein int, während wir mit diesem. Und falls wir weiteres 1J, unabhängig Adresse ist gespeichert mit einem y ein char-- gleiche Sache mit z sein. In der gleichen Weise, wenn Sie versuchen und tun INTX gleich 0,4, es geht um dich schreien und sein wie nein, Sie sagten, Sie wollten einen int. Dies soll ein int sein. Hören Sie auf, es ist ein Schwimmer zu machen. Also lassen Sie die Dinge sein, was sie sein wollen. Lassen Sie die Dinge selbst zu sein. So große Ding ist nur Welche Art von Zeiger ist es, das ist die einzige Sache, die Sie dort speichern kann. OK? Mit der Praxis, wie mit letzte Woche, alles scheint wirklich Art abstrakter. Wir werden einige Übung zu tun. Es sollte mehr Sinn machen. So Referenzierung und dereferencing-- es ist wirklich wichtig, diese gerade zu bekommen. Ich habe noch zu erfrischen hin und wieder. Und ich bin wie Warte, die man will ich? Also das kaufmännische wird tatsächlich geben Sie der Referenz oder Adresse. So ist es die Adresse im kehrt Speicher davon Variable gespeichert. Also, es wird tatsächlich zu Ihnen zurück hexadezimal, während Dereferenzierung es ist eigentlich los, um Ihnen die Daten, die dort gespeichert ist. OK? So werden wir ein Beispiel an wirklich schnell, oder tatsächlich nächsten. Ok. Also müssen wir wirklich denken sorgfältig darüber. Also hier haben wir einige Integer x. Ich werde versuchen, und ziehen Sie diese aus, um das Beste aus meinen Fähigkeiten. Also werden wir diesen Slot x haben. Und es ist die Speicherung fünf. Seine Adresse ist 0x4. Cool? Alles gut. So, jetzt haben wir diesen Zeiger. Es war hier. Und das Und-Zeichen gibt uns die Adresse von etwas. So, in diesem Fall ist es die Adresse x. Was ist die Adresse x? 04-- und dieser Zeiger auf 0x08. Cool? So kann man darüber nachdenken Zeiger, 04, weist nur hier. Und sie heißen Zeiger weil, wie wir mehr in diese, Sie gehen, um zu sehen, die auf die Dinge. Und einem Block zum anderen zeigen Block macht viel mehr Sinn. Also hier sind zwei. Und dann haben wir einige haben Kopie, die what-- 0x0c ist. Und es ist zu gehen Dereferenzierung unseren Zeiger. Also, was es sagen will, ist OK, hier ist unser Zeiger. Der Wert speichert er ist 0x04, Und was es sagt wird an diese Adresse gehen und sagen Sie mir, was drin ist. Also das ist effektiv was dieser Pfeil tut. Sie können sich das wie Ihre Sterne denken. Also OK, wenn wir Sterne, bedeutet dies, zu folgen. Gehen Sie zu dieser Adresse. Und das ist im Grunde nur folgende Dieser Pfeil auf diesen Speicher Brocken. Und geben Sie uns, was drin ist, was 5 ist. Es ist, warum unsere Kopie gleich 5 ist. Ist das sinnvoll? Hat jemand brauchen mich zu durchlaufen dass es noch einmal oder langsamer? Du willst mich zu gehen durch sie ein weiteres Mal? Ok. Wir werden es wieder neu zu zeichnen. Wenn wir beginnen, sind wir uns einig wir einige Teil des Speichers, die eine Variable ist x, die wir auf gleich 5. Wir kontrollieren nicht, wo es im Speicher ist. Also dieser Punkt ist nur willkürlich zugewiesen. Gut gibt es? Ok. Dann initialisieren wir einen Zeiger auf eine int. Deshalb ist es ist erlaubt, darauf hinzuweisen x, weil wir eine int hier. Wir haben ein anderes Stück Speicher, da dieser Zeiger ist eine Variable genau wie alles andere. Es ist willkürlich zugeordnet etwas Platz im Speicher. Und was es speichert die Adresse x. Ampersand bedeutet Adresse x. Also, was ist die Adresse von x? PUBLIKUM: Es ist zero-- Sprecher 1: 0x04. Also dann- letzte. Wir haben einige copy-- wieder nur eine weitere Variable. Lassen Sie uns also etwas beliebiger Stelle zuordnen. Und wir Dereferenzierung unseren Zeiger. Ein Stern bedeutet, gehen Sie zu der Adresse in meinem Zeiger gespeichert. Sagen Sie mir, was da ist. Also die Adresse gespeichert in unserem Zeiger ist 0x04. So gehen wir an diese Adresse. Es ist auf diese Adresse zeigt. Was ist in diesem Speicherblock? Es ist eine fünf. Also das ist, was wir unseren Kopie zuordnen. Jeder gut? Cool. Again-- Bildern. Also die Verfolgung der Werte hier-- Ich bin gehen zu lassen, euch darüber nachdenken. Wir können ein anderes Bild zu zeichnen. Aber ich möchte, dass Sie versuchen, und Grund durch diese auf eigene Faust für eine Minute. Da sie nicht geben, uns ein Beispiel Adresse, Ich werde einfach kaufmännisches Und x-- tun was soll helfen fahren sie nach Hause. Ampersand bedeutet Adresse. So in der ersten, jeder gehen Sie mit der ersten Zeile. Einige x Satzes five-- einige Zufalls Schlitz in Erinnerung. Int Sterne Zeiger gleich an die Adresse von x, nicht wahr? Int Sterne Zeiger erstellt dieser Block, ruft es Pointer, und weist es die Adresse x. Ich bin schrecklich Ampersands. Nun, was wir tun ist, dass wir sagen, OK, Dereferenzierung unseren Zeiger. Also gehen wir OK, was ist in unserem Zeiger? Es ist Kaufmanns-x. Zum Kaufmanns-x und weisen Sie es. So, jetzt ist Ampersand x werde 35 sein. Also im Grunde, wenn Sie unterwegs sind Dereferenzierung, gehen Sie auf OK. Du wirst sein Zeichnung Bilder wie diese. Du wirst sein Zeichnung Ihre Pfeile über, wo sie ist. So gehen an diesem Schlitz im Speicher und entweder gib mir diesen Wert zurück, oder ändern Sie es. In diesem Fall, da wir in diesem sind Wert, wir Zuordnung zu 35 sein. Während in der letzten ein, wenn Sie bemerken, wir wurden Zuweisen was war in hier um etwas anderes. So haben sie diesen fantastischen Tisch. Es ist nicht so schlimm. Ihr Jungs arbeiten daran. Ich werde es auf dem Brett ziehen. Wir werden es gemeinsam ausfüllen, OK? Also schnappen Sie etwas Papier, Halte ein Partner, der Arbeit beginnen. Ich werde eine bekommen größeres Stück Kreide. Denn es geht um eine Menge sein. Ok. PROFESSOR: OK. Beginnen wir mit der ersten Reihe starten. Wir werden dort starten, dann euch kann vielleicht durch einige mehr. Ok. a gleich b mal c, so was ist ein? Es ist nicht eine Fangfrage, das verspreche ich. STUDENT: 4 mal 5. PROFESSOR: 4 mal 5. 20. Also, was ist b? STUDENT: 4. PROFESSOR: und C? STUDENT: 5. PROFESSOR: 5. Und dann wird diese gerade dabei, Ampersand werden ein, kaufmännisches Und b, Und-Zeichen c, oder? Nicht schlecht. Es ist einfach genug. Ok. Also die nächste. A gleich a mal c, für den Fall, jemand nicht vertraut war mit dem. Ist jeder vertraut mit der Zeit entspricht? OK, alles means-- dies Abkürzung für a gleich a mal c. Sie können es auch tun, mit Teilung, Zusatz mit Subtraktion. Sie können A gleich zu tun, oder ein Plus gleich c bedeutet, dass ein gleich ein Plus C, A minus gleich c wäre ein gleich ein Minus c. Es ist nur syntaktischer Zucker. So, in diesem Fall wird eine gleich ist Male c uns was geben würde? Auch nicht eine Fangfrage. STUDENT: 100. PROFESSOR: 100. Hat etwas anderes ändern? Nein. Vielleicht werde ich endlich besser auf meine kaufmännische Und. STUDENT: OK, sorry, wie haben Sie 100? PROFESSOR: OK. Also ein gleich a ist mal c, so a mal c. STUDENT: Oh, Sie verwenden ein für die previous-- PROFESSOR: Ja. Also das sind unsere letzten Werte. Diese sind, was Sie sein sollten Verwendung, wie wir nach unten zu verschieben, OK. Also ist b die einzige Sache Wechsel, oder? Also lasst uns in allem, was sonst noch zu füllen. B. Was ist b sein wird? Sein oder Nichtsein, das ist hier die Frage. Was also ist das da? Was ist der Star pa tun? STUDENT: Code auf den Standort der pa. STUDENT: Nein, nicht ganz. Das ist also ein d Referenz. Student: b ist handed Wert pa. PROFESSOR: Ja, so ist pa Die Adresse einer, oder? So ist es verständlich zu, wobei a gespeichert und geben ihm den Wert. Also, was ist b? STUDENT: 100. PROFESSOR: 100. Perfect. OK, so pc ist, was sich ändert. Alles andere bleibt gleich. Was ist PC sein wird? Einfache Zuweisung. Pc gleich pa, und was ist pa? STUDENT: Ampersand ein. PROFESSOR: Perfect. Jetzt bekommen wir interessant. OK, lass uns diesen einen brechen. Erstens, was ist b mal c, weil das ist, der einfache Teil dieses einen, nicht wahr? B mal c ist-- STUDENT: 500. PROFESSOR: Ja, so was dieses tun, Wenn es Sterne pb, ist, was ändert sich? STUDENT: Was ist in the-- PROFESSOR: Was ist in b? STUDENT: Was ist in dem Raum dass pb zeigt auf. PROFESSOR: Und pb wird Zeige zu-- STUDENT: B. PROFESSOR: B. So ist die einzige Sache Wechsel ist b, rechts. Also b mal c, 500. Also das ist, was ändert sich nun. Cool. Lovely. Ihr Jungs geht es gut. Alles klar, brechen diese eine nach unten. C verändert, oder? So können wir bei allem, was sonst noch zu füllen. Mal sehen. Ok. Wir wissen, dass c wird den sein Produkt zweier Zahlen, nicht wahr? Welche zwei Zahlen, obwohl? STUDENT: A und C? PROFESSOR: So eine ist rechts für den ersten. Also sind wir d Referenzierung P einer, oder? P eines Punkte auf a, so wissen wir, dass das wird 100 mal was? Mal was tut pc Punkt? Verweist auf eine. Also 100 mal 100 ist 10.000. Macht das Sinn macht? Cool. Geraden, Jungs, letzte Reihe. Ok. Was ändert sich hier? STUDENT: A. PROFESSOR: A. Perfect, so alles andere kann gleich bleiben. Ok. Und was ist ein? So ist es ein mal was? Dies ist star pb. Also Sterne pb bedeutet hier pb, pb Punkte auf b. STUDENT: 500. PROFESSOR: 500. Wir haben also 500 mal 100. Das ist 50.000. Puh! Schau dir das an. STUDENT: Warum haben wir die & c für den last-- PROFESSOR: Sorry. STUDENT: Oh, OK. PROFESSOR: Meine schlecht. Viele Schreiben. Jeder gut? Nicht schlecht, oder? Nur dauert ein wenig während die durchzuarbeiten. Wenn Sie es brechen, verstehen, was die einzelnen Teile wird zu-- als Verweisung mit allem, was es ist, yes-- es auf die kleine Pause Probleme und dann rekombinieren, und Sie einige tolle Sachen machen kann. Es sind die Antworten, aber wir haben das. Zeigerarithmetik. Ah. Meine Hände sind alle kalkhaltigen. So addiert oder subtrahiert int stellt den Zeiger durch die Größe von der Art des Zeigers. Erinnere dich, wie jede Art hat eine andere Größe? So wie ein Doppel- oder ein langer lang ist acht und int ist vier, sondern char gehört. Also, was Sie tun möchten, ist-- eine Sache zu erinnern ist nur, dass, wie viel Ihr Zeigerwert tatsächlich ändert erfolgt nach Maßgabe des Zeigertyp ist. Jeder gute mit diesem? Kann ich löschen kann? Wir sind gut? Genial. Also, wenn wir einige Zeiger dass-- das wird be-- Ich bin werde es ein int-Zeiger zu machen. Er speichert diese. Wenn Sie Zeiger sagen würde plus eins, was es tun wird wird, es wird aktualisiert es durch die Größe eines int denn das ist die Zeigertyp ist. Mit C ist alles sehr streng und geregelt. Die int-Zeiger wird sich durch aktualisieren Die Höhe des Raumes ein int würde. Ein int vier Bytes. Also, was würde dies in zu verwandeln? Sie sind einfach nur mit vier auf diese. Nun möchte Ihren Zeiger be-- OK. Also, wenn es ein Zeichen und wir taten Zeiger plus eins, was wäre das jetzt sein? Wenn es started-- vorgibt wir started-- jetzt ist es 0x08. Lassen Sie uns jetzt sagen, dass dies ein char-Zeiger, und wir hinzugefügt ein. Was würde es ändern? Wie viele Bytes ist ein char? PUBLIKUM: One. Sprecher 1: One. PUBLIKUM: Also 0x09. Sprecher 1: So wäre es neun sein. Also einfach etwas zu erinnern. Gerade wenn man ein hinzuzufügen, ist es nicht Hinzufügen eines, es sei denn, es ist ein Zeichen. Es ist das Hinzufügen, wie viele Bytes der Typ, der sie ist, weshalb wir haben diese Gleichung hier oben. So ist es int fache Größe von der Art des Zeigers. Also das Beispiel haben wir hier. y wurde auf diesen Wert, 0x4 zugeordnet, als wir y zzgl gleich eins. Was ist drin, was ist in x, ändert sich nicht. Was bedeutet Veränderung ist, was in y. Die in y gespeicherte Adresse durch vier aktualisiert weil es vier Bytes in einem int und es ist ein int-Zeiger. In Ordnung. So, jetzt haben wir eine andere Übung. Die Frage ist also, was gedruckt wird. Irgendwelche Ideen? PUBLIKUM: Die Anzahl der Zeichen in glückliche Katze? Sprecher 1: Genau. So gerne mit Ihrem String. Hat jeder das bekommen? Wollen wir, um durch sie gehen? Ja, OK. Also, was haben wir hier-- I wie dieses so viel mehr. Ich weiß nicht zu haben, [Unverständlich] lächerlich. So haben wir unsere String hier, glückliche Katze. Lovely. Wir haben einige Zähler, wir die Verfolgung. Also haben wir etwas char * Zeiger dass nur gleich str gesetzt. Was dies tut, ist es Zuweisen einige Zeiger an den Anfang der Zeichenfolge. Denn ich bin mir sicher, da es wurde im Vortrag erwähnt, wir haben euch dies gegeben Datentyp namens String. Aber wirklich Saiten sind nur ein Array von-- wie char *. Es ist ein Zeiger auf eine Reihe von Zeichen die zusammenhängenden Speicher sind. Also das setzt sie nur gleich jede Saite ist von denen identifiziert Das erste Zeichen ist. So ist dies nur die Einstellung irgendwann gleich zu Beginn der Zeichenfolge. Jeder gute da? Cool. Das ist also unsere Dereferenzierung Zeiger. Also es ist eigentlich los, um geben Sie uns etwas Wert in hier, in unserem String, wir reden. Und wir sind so lange sagen es ist nicht null-Terminator. So weitermachen, bis Sie an das Ende der Zeichenkette. Aktualisieren Sie Ihre Zeiger um eins. Also r, es wird tatsächlich durch eine Aktualisierung jedes Mal, denn dies ist ein Zeichen, die char *. Also es geht um durch zu gehen. Es wird zu aktualisieren. Also das erste Mal in dieser verläuft, es wird hier bei h betragen. Es wird zu aktualisieren. Es wird ein a sein. Es wird eine p, y, und so weiter und so fort. Wir Zähler zu aktualisieren. Wenn er das Ende erreicht, wird es nur druckt, wie weit es gekommen. Ja. PUBLIKUM: Also Sie zählt der Raum als einer, oder? Ok. Sprecher 1: Denken Sie so. Ist das ein question-- PUBLIKUM: [unverständlich]. Sprecher 1: Keine Sorge. Das habe ich getan. Alles klar, so eine Sache, ich verstehen ist, dass mit einer Reihe, Sie können auch behandeln es als ein Zeiger, weil Arrays sind nur kontinuierliche Spots Speicher. So können Sie es behandeln die gleiche Weise. Sie können sie zu manipulieren mit Zeigern, auch. Also anstatt das zu tun, in diesem Fall die analoge Sache wäre Array 0 gleich 1. Aber in der gleichen Weise, ein String bestimmt vom Beginn wobei seine erste Zeichen ist, eine Anordnung bestimmt wird durch wobei das erste Element ist. Weil wir wissen, wir sind gewährleistet ist, dass diese gehen kontinuierlich sein Speicherblöcke. Das ist, was erlaubt uns, dies zu tun. Wir wissen, dass sie kontinuierliche Speicherblöcke. Also in diesem Fall, durch Dereferenzierung nur Array, das uns sagt, OK, an den Anfang der zu gehen Ihr Array, das hier ist. So können Sie es gleich eins setzen können. Und in diesem Fall, was auch immer Ihr Array Typ ist, wenn Sie es aktualisieren, indem man, Das ist genau wie die Aktualisierung es auf die nächste Index. Sie können das tun, weil Sie wissen, was in Ihrem Array. So weiß es, wie viel zu aktualisieren Sie den Mauszeiger durch, welche Adresse um es so zu aktualisieren, dass Sie bei der nächsten Steckplatz. Also das ist nur eine andere Art der Schreibanordnung 0 gleich 1 ist, Feld 1 gleich 2, array Halterung 2 gleich 3. Es ist nur ein weiterer Weg, um darüber nachzudenken. Weil sie stetig sind Blöcke im Speicher, Sie können sie entweder auf die durch die Anordnung notation-- was ich persönlich finden easier-- aber vielleicht Sie manipulieren müssen streng von Speicheradressen. Und das ist so, wie Sie das tun würde. Art eher wie ein coole Sache, die Sie tun können gegenüber vielleicht nicht etwas, was Sie sind tatsächlich zu implementieren. Ich benutze es in 61. Ihr Jungs wahrscheinlich nicht brauchen darüber allzu viele Sorgen. Aber wenn Sie interessiert sind, nehmen 61 im nächsten Jahr. Wir sind auf der Zielgeraden Jungs. Ich weiß, es ist lang. Dynamic Memory Allocation-- so dass wir wissen, dass man Sachen, wo wir während gesprochen unseren ersten Abschnitt zusammen, sahen wir uns an einem Swap Funktion wo es außerhalb des Umfangs der Hauptfunktion. Und wir waren in diesen Werten vorbei dass waren effektiv Exemplaren. Und sobald Swap abgeschlossen Ausführen, es gerade verlassen einen Stapel. Denken Sie daran, wir haben ein Stapelrahmen für Swap. Es hinterlässt und diejenigen Werte verlassen mit ihm. Und sie waren weg. Wir konnten nichts tun, mit ihnen und wir waren traurig, weil wir unsere Werte nicht tauschen. Aber mit C, wie ich bereits erwähnt, können Sie haben viel Macht über Speicher. Also, was Sie tun können, ist, dass man zuteilen Dinge auf dem Heap hier das wird dort bis zu bleiben Sie ihnen sagen etwas anderes. Sie sind wie gute Kinder. Sie bleiben dort. Sie haben nicht zu verlassen. Sie werden dort bleiben, bis Sie wie, OK, Sie weggehen kann. Während die Dinge auf den Stapel, who-- sie sind wie ungezogene Kinder. Sie werden nur weglaufen, wenn Sie wollen, da zu sein und dann sind sie weg. Sie können nicht sie zurück. Also der Heap ist-- wir zu gehen reden über malloc und free, die Ich bin sicher, ihr Jungs etwa in der Vorlesung gehört. Und das ist im Grunde eine Art und Weise sehr persistent Daten haben. So können Sie die Daten halten können so lange, wie Sie wollen. Mhm. PUBLIKUM: Können Sie Heap definieren und zu stapeln? Sind sie wie Orte, Dinge zu setzen? Sprecher 1: So sind sie grundsätzlich just-- sie Im übrigen verweisen wir nur auf den Speicher. So Heap nur Orte, wo Speicher dynamisch zugewiesen, wohin Stapel bezieht mehr Frames stapeln die mehr von zentraler Bedeutung für die sind Funktionen, die tatsächlich ausgeführt werden. Sie haben nicht wirklich Kontrolle. Der große Unterschied, Kontrolle haben Sie über den Haufen, wenn Sie wollen. Sie haben weniger Kontrolle über den Stack. Der Stapel hängt von der Funktionen, die ausgeführt werden, und die Reihenfolge, in der sie laufen, und wie die Dinge zurückgekehrt. Während bei den Haufen, als wir werden sehen, man kann sagen, OK, ich will diesen Wert zu sein herum, bis ich sage Ihnen etwas anderes. Sie sind nicht gestattet, es loszuwerden. Sie sind nicht erlaubt, es zu überschreiben. Du wirst es herum zu halten so lange wie ich dir sage. Sie erhalten zu der Chef in der Halde zu sein, während die stack-- vielleicht, wenn Sie wie finagle Ihren Weg können Sie der Chef zu sein. Aber nicht ganz. Und es ist wirklich nur Speicher. Es ist nur verschiedene Wege der Bezug auf Speicher. Cool. Also mit diesem, wie man steuern Sie Ihr Gedächtnis. Es ist mit malloc, die Sie gehen zu bekommen, um zu verwenden. So ist es nur kurz für Speicherzuweisung. Das ist alles, es ist. Es gibt eine Reihe von anderen kühlen Funktionen, die alloc am Ende haben, und sie stehen für verschiedene Dinge. Also, wenn Sie Speicherplatz benötigen das braucht Ihre aktuelle Funktion überdauern, so dass, wenn Ihre aktuelle Funktion läuft weg, Sie haben immer noch die Daten, die Sie malloc verwenden daraus bekam, Sie wollen. Das wird es auf dem Heap zu initialisieren. Und wie ich schon sagte, und halten sagen, du wirst es dort zu halten bis Sie es anders zu sagen, Das ist das Wichtigste hier. So eine Sache zu bemerken, und das ist in der Regel wirklich wichtig, ist, dass diese sizeof ist super nützlich zu bedienen denn je nach dem Typ der Maschine, die Sie laufen, kann es unterschiedliche Mengen haben Speicher, die es braucht. Also immer auf die Größe der so verwenden möchten, dass Sie maschinenabhängig sind nicht, so dass Ihr Code laufen auf jedem Rechner. Und das ist nur ein Teil schreiben guten Code. Wenn es auf einer Maschine, aber nicht von den anderen, Wie hilfreich war das Programm? Also Sie wollen immer stellen Sie sicher, und verwenden Sie sizeof. PUBLIKUM: Also das ist wie die Größe von 10 Zoll [unverständlich]? Sprecher 1: Dies ist die Größe von 10 int. ja. Also Größe ints zurückkehren wie viel kostet ein Int. Oder die Größe der char, wie viel kostet ein Zeichen nehmen. Und dann, wie viele Blöcke davon wollen Sie? Also in diesem Fall, etwas wollen wir dass wir 10 ints zu speichern. Und es wird unabhängig arbeiten der Maschine, die ist cool. Also, wie viele Bytes dass tatsächlich geben Ihnen? Schnell math. PUBLIKUM: 40. Sprecher 1: 40. Genau. Also eine andere große Sache. Pointer oder malloc NULL zurück. Also noch einmal, immer überprüfen, sehen, ob es wieder null bevor Sie versuchen und tun etwas mit ihm. Wenn Sie versuchen, und Dereferenzierung dieser Zeiger jetzt, es nur geht, um segfault weil Sie ging und versuchte zu berühren null, wenn Sie nicht haben sollte. So überprüfen Sie immer für null. Auch alles, was Sie tun können. Es könnte null zurück. Es wird null zurück, wenn Sie entweder aus dem Raum, oder warum auch immer es lief in einige Speicher Bug. Es manchmal nur null zurück. So müssen Sie nur noch dafür zu prüfen. Das ist alles, diese Folie ist selbstverständlich. Und dann, was wir haben Hier ist ein Aufruf zu befreien. So in der gleichen Weise, wenn man Öffnen einer Datei müssen Sie eine Datei schließen, wenn Sie malloc Speicher, Sie müssen Sie den Speicher wieder frei. Und euch erhalten um wirklich coole Sachen zu tun. Und es gibt ein Programm, das Sie zu laufen sehen, wenn Sie jemals Speicher verliert. Aber Sie wollen nicht zu Speicherverlust. Es ist wirklich schlimm. Nur einanderbringen. Es ist schlimm, um gerade wie Programmierung zu tun weise für Design-Effizienz. Aber es ist auch nur irgendwie Schlecht für Ihren Computer. Also einfach kostenlos Dinge wenn Sie sie malloc. Ihr Jungs sehen die Symmetrien hier. Super einfach. Einfach kostenlos und dann was auch immer Sie den Mauszeiger, was auch immer der Name Ihr Zeiger ist, und es kümmert sich befreien für Sie. Cool. Dann haben wir das. Also werden wir gerade dabei, Spaziergang durch dieses Programm. Und dann hast du Jungs sind fertig. Also [unverständlich] nur Haupt. So haben wir einige int * Zeiger. So haben wir einen Zeiger das wird ints halten. Und wie viele ints wird es zu halten? Nur eine. Größe eines int. Wir überprüfen, ob zu sehen Zeiger ist null, weil es ist, wir sagen nichts tun wollen. Es ist schlimm. Also haben wir einige Fehler vergriffen Speicher, sehr häufig zurückkehren 1, wie ihr Jungs es gewohnt sind. Und dann haben wir hier, wir Dereferenzierung unseren Zeiger. Das heißt also, wir gehen zu speichern etwas an der Stelle, die uns gegeben. Int * Zeiger oder malloc, kehrt der Adresse, wo es beiseite dies Speicher für Sie. So ist es im Grunde Geben Sie, wenn Sie like-- denke über ein Bündel von Häuser in einer Nachbarschaft dass Sie setzen wollen Ihre Möbel in, malloc ist wie OK, erhalten Sie zu gehen, um drei zu beherbergen. Und es gibt Ihnen die Adresse des Hauses drei. So, jetzt dieses Recht, diese Zeiger speichert eine Adresse, speichert die Adresse Ihres Hauses. * Ptr Mittel, OK, ich bin bei mir zu Hause. Cool. Ich muss einige integer zu bekommen. So können Sie für jemanden fragst Sie Möbel jetzt zu geben. So erhalten Sie eine int. Und es bringt es auf den Zeiger wo es auf den Hinweis. Und dann ist es nur Drucke heraus trat, wohin. Und wieder die Referenz. Also das ist, wie Sie ging an diesem Adresse und Sie sahen, was da war. Cool? Und dann natürlich befreien wir unsere Zeiger. Vergessen Sie nicht, Ihren Zeiger zu befreien. Vergessen Sie nicht, für null überprüfen. Vergessen Sie nicht, Ihren Zeiger zu befreien. Sie haben zwei Dinge, die Sie daran erinnern, von dies, oder dass Sie sollten daran denken. Ja. PUBLIKUM: [unverständlich] Zeug so, die char * s. Wie kommen wir nie frei diejenigen? Sprecher 1: Hm? PUBLIKUM: Sind diejenigen die es geben? Du hast gesagt, Saiten genau wie char * s, oder? Also, warum nicht wir frei Saiten? Sprecher 1: Sie nur kostenlos, wenn Sie mallocing. PUBLIKUM: Oh, wenn Sie mallocing bist. Sprecher 1: So malloc und frei sind zwei Dinge, dass Sie sollten immer zusammen. f offen, f nahe, zwei Dinge Sie sollten zusammen haben. In diesen beiden Fällen prüfen null. Ja. PUBLIKUM: So frei ist nur so dass etwas anderes um dort nach gespeichert werden Dieses Programm hat es genutzt? Sprecher 1: Es ist einfach zu sagen, OK, ich bin damit fertig. Sie brauchen nicht, es zu halten rund. Andernfalls wird Ihr Computer wird nur mag versuchen und halten Sie ihn dort. Und dann haben Sie nicht-- es läuft in den Speicher Probleme später. Sie es, weil befreien wollen immer es sagt dem Computer, OK, ich bin mit diesem Ort der Erinnerung gemacht. Sie können es wieder zu haben für mich zu einem späteren Zeitpunkt zu verwenden. Cool? Ja. PUBLIKUM: So nutzten wir die% d gerade weil ein doppelt so kommt zurück, oder warum ist-- [unverständlich]. PUBLIKUM: Können Sie% i benutzen? Sprecher 1: Sie können% i verwenden. Alle Last-Minute-Fragen? Nur zu. PUBLIKUM: Ich habe nur eine kurze Frage. Also die ptr Variable that's-- wie, mit dem int * ptr = malloc, das ist einfach nur sagen, es ist zeigt auf einen Platz in memory-- Sprecher 1: Wollen Sie [unverständlich]? PUBLIKUM: --that ist das Größe von-- nein, es ist OK. Aber es ist nur zu einem Platz im Zeige Speicher, der wie vier Bytes ist. Sprecher 1: Richtig. So malloc die Größe des int sagt, OK, ich werde gehen ablaufen, finden vier Byte Speicher für Sie. Wenn sie feststellt, dass vier Bytes des Speichers, es gibt Ihnen die Adresse Zurück von wo es beginnt, und das ist, was gespeichert in Zeiger oder ptr. Gut. Ihr Jungs sehen weniger verwirrt als die meisten Leute, wenn ich über Zeiger zu sprechen, so bin ich ein ziemlich gutes Gefühl jetzt. In Ordnung. Wie immer sollten Sie Jungs haben alle bekommen Ihre PSet2 Sorten inzwischen. Ich weiß, es habe etwas wackelig gewesen Dinge, wo es heißt, Formel nicht gültig oder so etwas. Wenn Sie bekommen, dass alle Ihre Noten sind gültig auf meiner Seite. So kann ich euch senden Screenshots Ihrer Noten. Lass es mich wissen, wie gut, wenn Sie fehlen keine Noten oder etwas scheint nicht sinnvoll. Komm zu mir. Ich habe Super stolz auf dich Jungs schon, so halten sie auf. Und haben einen guten Rest Ihrer Woche. Ich bin sicher, ich werde einige sehen von Ihnen bei der Bürozeiten.