1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. MALAN: All right. 2 00:00:08,160 --> 00:00:11,170 Dies ist CS50, und das ist das Ende der zweiten Woche. 3 00:00:11,170 --> 00:00:14,650 Wenn Sie hungrig zu sein um diese Zeit morgen erwarten, wissen, dass wir gehen 4 00:00:14,650 --> 00:00:18,920 als eine kleine Gruppe von morgen, Donnerstag, 01.15 Uhr einberufen. 5 00:00:18,920 --> 00:00:21,460 Es gibt diese URL hier, wenn Sie möchten, RSVP. 6 00:00:21,460 --> 00:00:25,270 Die Plätze sind begrenzt, also bitte verzeihen, wenn das Formular von der Zeit ausgefüllt haben 7 00:00:25,270 --> 00:00:26,680 füllen diese aus. 8 00:00:26,680 --> 00:00:29,400 Ein weiterer URL, obwohl die von Interesse sein könnte, ist dies. 9 00:00:29,400 --> 00:00:32,409 >> So in nur etwa einem Monat wird der Kurs werde zur Verfügung gestellt werden 10 00:00:32,409 --> 00:00:36,090 umso breiter über EDX, über die Leute auf dem Internet werden 11 00:00:36,090 --> 00:00:39,580 Lage zu folgen, greifen im Verlauf recht aktiv, in der Tat. 12 00:00:39,580 --> 00:00:43,070 Sie werden mit dem CS50 Appliance und CS50 diskutieren und die meisten der 13 00:00:43,070 --> 00:00:45,840 verschiedenen Software-Tools, die wir bereits haben mit diesem Semester. 14 00:00:45,840 --> 00:00:49,030 Und eine der Initiativen, die wir gerne annehmen als ein Experiment in diesem Jahr würde 15 00:00:49,030 --> 00:00:53,120 ist zu sehen, wie viel Inhalte können wir in andere gesprochen übersetzen und 16 00:00:53,120 --> 00:00:54,110 Schriftsprachen. 17 00:00:54,110 --> 00:00:58,000 Also, wenn Sie vielleicht Interesse an einer Teilnahme an diesem Projekt, wobei 18 00:00:58,000 --> 00:01:02,090 wir Deutsch Transkripte und Untertitel für den Kurs des bieten 19 00:01:02,090 --> 00:01:05,190 Vorträge und Shorts und Seminare und Abschnitte und dergleichen - 20 00:01:05,190 --> 00:01:08,700 wenn Sie fließend sprechen oder schreiben fließend eine andere Sprache, würden wir 21 00:01:08,700 --> 00:01:12,240 gerne in diesem Projekt engagieren, wobei Sie auf eine oder mehrere der zu nehmen 22 00:01:12,240 --> 00:01:15,340 Videos, übersetzt sie in eine Sprache, die Sie wissen sehr gut. 23 00:01:15,340 --> 00:01:19,050 Um Ihnen einen Eindruck von der Schnittstelle, gibt es diese web-basierte Benutzeroberfläche 24 00:01:19,050 --> 00:01:22,330 dass wir verwenden, dass im Wesentlichen eine UI wie diese. 25 00:01:22,330 --> 00:01:24,520 Dies wurde mir lehren einige Halloween vor. 26 00:01:24,520 --> 00:01:27,710 Und auf der rechten Seite gibt in schwarz neben diesen Zeitstempel, 27 00:01:27,710 --> 00:01:31,300 Sie sehen die verschiedenen Dinge, die aus meinem Mund kam an diesem Tag. 28 00:01:31,300 --> 00:01:34,660 Und dann darunter, werden Sie in der Lage sein, in einer anderen Sprache zu übersetzen. 29 00:01:34,660 --> 00:01:37,840 Genau das ist die Abbildung zwischen, in diesem Fall englisch 30 00:01:37,840 --> 00:01:38,660 und, sagen wir, Spanisch. 31 00:01:38,660 --> 00:01:40,480 Also ist es eigentlich ein sehr benutzerfreundliches Tool. 32 00:01:40,480 --> 00:01:43,690 Sie können Vor-und Rücklauf sehr leicht mit Tastenkombinationen. 33 00:01:43,690 --> 00:01:46,710 Also, wenn Sie möchten, an diesem Experiment teilzunehmen und haben Ihre Worte 34 00:01:46,710 --> 00:01:50,730 gesehen und gelesen von potenziell Tausende von Leute da draußen, bitte fühlen 35 00:01:50,730 --> 00:01:51,960 die Teilnahme freigestellt. 36 00:01:51,960 --> 00:01:56,940 >> Nun ein Wort über das Kätzchen von Montag, damit haben wir eine allzu geschickt 37 00:01:56,940 --> 00:01:58,120 beängstigend Nachricht. 38 00:01:58,120 --> 00:02:02,130 Sie erkennen, dass der Bürozeiten und schlagen als Abschnitte vorschlagen, die 39 00:02:02,130 --> 00:02:05,110 Gestaltung des Kurses ist sehr zu haben die Schüler zusammen und 40 00:02:05,110 --> 00:02:09,250 zu reden durch Problem-Sets und Probleme gemeinsam zu arbeiten. 41 00:02:09,250 --> 00:02:13,630 Und wirklich die Linie kommt nur auf, wieder die Arbeit, die Sie letztendlich 42 00:02:13,630 --> 00:02:16,420 sollten vorlegen können, sollten Sie Ihre eigenen. 43 00:02:16,420 --> 00:02:19,080 Und so ist es, ganz ehrlich - in Sprechstunden, es ist völlig normal - 44 00:02:19,080 --> 00:02:21,560 es ist völlig zu erwarten, auch werden - mit einigen plaudern 45 00:02:21,560 --> 00:02:22,370 Freunden neben Ihnen. 46 00:02:22,370 --> 00:02:25,240 Wenn er oder sie wird mit einer gewissen Thema kämpfen, und du bist, oh, auch lassen 47 00:02:25,240 --> 00:02:27,750 Ich gebe Ihnen einen Einblick in einige Codezeile, die ich geschrieben habe. 48 00:02:27,750 --> 00:02:28,290 Das ist in Ordnung. 49 00:02:28,290 --> 00:02:28,700 Das passiert. 50 00:02:28,700 --> 00:02:31,580 Und das ist sehr viel förderlich, denke ich, mit dem Prozess des Lernens. 51 00:02:31,580 --> 00:02:35,270 Wird die Strecke, wieder, wird überschritten, wenn der Kopf ist Art gekippt 52 00:02:35,270 --> 00:02:38,800 hier für viel zu viele Sekunden oder Minuten, dass wirklich haben nur 53 00:02:38,800 --> 00:02:41,250 war eine Entsperrung Gelegenheit für Ihre Freundin. 54 00:02:41,250 --> 00:02:43,870 Und sicher, wenn die Dinge zu bekommen per E-Mail und Dropbox und ausgetauscht 55 00:02:43,870 --> 00:02:45,350 dergleichen, auch dort ist die Linie. 56 00:02:45,350 --> 00:02:48,940 So mit allen Mitteln, sich wohl fühlen und sich ermutigt fühlen, mit Freunden chatten 57 00:02:48,940 --> 00:02:51,270 und Klassenkameraden zu pset und vieles mehr. 58 00:02:51,270 --> 00:02:54,680 Und nur erkennen, dass das, was Sie letztendlich einreichen sollten wirklich die 59 00:02:54,680 --> 00:02:57,780 Produkt Ihrer Schöpfung und nicht jemand anderes. 60 00:02:57,780 --> 00:03:01,010 >> So in die gleiche Richtung aus kuscheligem Kreaturen, könnten Sie 61 00:03:01,010 --> 00:03:02,820 kenne diesen Kerl hier. 62 00:03:02,820 --> 00:03:06,180 Dies ist also eine erschreckend kitschig Film von Jahren. 63 00:03:06,180 --> 00:03:08,680 Wer hier Spaceballs gesehen? 64 00:03:08,680 --> 00:03:09,120 Gut. 65 00:03:09,120 --> 00:03:10,220 Also eine gute Nummer hier. 66 00:03:10,220 --> 00:03:13,840 Das ist also unsere wunderbar akademischen Weg zur Einführung heute letztendlich 67 00:03:13,840 --> 00:03:15,130 der Begriff der Kryptographie. 68 00:03:15,130 --> 00:03:19,010 Und so einer der Domain-spezifische Probleme für pset 2, die wird kommen 69 00:03:19,010 --> 00:03:22,770 spät morgen Abend, ist in der Welt der Kryptographie tauchen, die 70 00:03:22,770 --> 00:03:26,380 ist die Kunst der Verschlüsselung oder Scrambling Informationen. 71 00:03:26,380 --> 00:03:30,160 Und dies letztlich bezieht sich auf die Welt der Sicherheit. 72 00:03:30,160 --> 00:03:34,440 >> Nun Sicherheit für die meisten von uns kommt in Form von ziemlich banalen Mechanismen. 73 00:03:34,440 --> 00:03:36,920 Alle von uns haben Benutzernamen und Passwörter. 74 00:03:36,920 --> 00:03:41,350 Und wir alle haben sehr schlechte Benutzernamen und Passwörter, am wahrscheinlichsten. 75 00:03:41,350 --> 00:03:45,250 Wenn Sie Ihr Passwort ist das gleiche auf mehreren Websites, ist das wohl nicht 76 00:03:45,250 --> 00:03:47,920 die beste Idee, wie wir in Richtung Semester Ende zu diskutieren. 77 00:03:47,920 --> 00:03:51,680 Kein Witz - - auf Ihrem Wenn Sie Ihr Passwort auf einem Zettel geschrieben 78 00:03:51,680 --> 00:03:55,130 Monitor, auch das ist nicht unbedingt die beste Design, sondern ein ganz gewöhnlicher 79 00:03:55,130 --> 00:03:56,140 Phänomen. 80 00:03:56,140 --> 00:04:00,420 Und wenn Sie nicht mit Kryptographie, um Ihre Passwörter zu verschlüsseln, sind sie 81 00:04:00,420 --> 00:04:01,610 besonders gefährdet. 82 00:04:01,610 --> 00:04:04,670 Also, wenn Sie denken, dass Sie als Super-clever eine verborgene Wort 83 00:04:04,670 --> 00:04:07,740 dokumentieren irgendwo auf Ihrer Festplatte, die alle Ihre Passwörter hat, aber 84 00:04:07,740 --> 00:04:10,550 es ist in einem Ordner, niemand wird in schauen, das ist auch nicht sehr 85 00:04:10,550 --> 00:04:11,540 sicheren Mechanismus. 86 00:04:11,540 --> 00:04:15,100 Und so was pset 2 wird einzuführen, ist diese Kunst der Kryptographie und 87 00:04:15,100 --> 00:04:18,300 Scrambling Informationen, so dass Dinge wie Passwörter sind 88 00:04:18,300 --> 00:04:19,500 umso sicherer. 89 00:04:19,500 --> 00:04:24,500 So daß diese sehr realen Problem mit einer stark nicht-realen motivieren 90 00:04:24,500 --> 00:04:28,740 Szenario lassen Sie mich Ihnen eines unserer Lieblings-Clips hier aus diesem 91 00:04:28,740 --> 00:04:29,895 Film, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [VIDEO PLAYBACK] 93 00:04:30,565 --> 00:04:32,995 -Helm, du Teufel, was ist los? 94 00:04:32,995 --> 00:04:34,730 Was machst du mit meiner Tochter? 95 00:04:34,730 --> 00:04:38,960 -Lassen Sie mich den brillanten jungen plastischen Chirurgen, Dr. Philip einzuführen 96 00:04:38,960 --> 00:04:43,290 Schlotkin, die größte Nase Job Mann in der gesamten 97 00:04:43,290 --> 00:04:45,526 Universum und Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Eure Hoheit. 99 00:04:46,450 --> 00:04:47,380 -Nose Job? 100 00:04:47,380 --> 00:04:48,035 Ich verstehe nicht. 101 00:04:48,035 --> 00:04:49,480 Sie hat bereits eine Nasenkorrektur. 102 00:04:49,480 --> 00:04:51,490 Es war ein süßer 16 vorhanden. 103 00:04:51,490 --> 00:04:53,090 -Nein, es ist nicht das, was Sie denken. 104 00:04:53,090 --> 00:04:55,150 Es ist viel, viel schlimmer. 105 00:04:55,150 --> 00:04:59,860 Wenn Sie nicht geben mir die Kombination der Luft Schild, wird Dr. Schlotkin 106 00:04:59,860 --> 00:05:04,135 geben Sie Ihre Tochter wieder ihre alte Nase. 107 00:05:04,135 --> 00:05:05,385 -Nein! 108 00:05:08,202 --> 00:05:10,186 Wo hast du das her? 109 00:05:10,186 --> 00:05:11,178 In Ordnung. 110 00:05:11,178 --> 00:05:11,674 Ich sage. 111 00:05:11,674 --> 00:05:12,666 Ich sage. 112 00:05:12,666 --> 00:05:14,154 Nein, Daddy, nein. 113 00:05:14,154 --> 00:05:15,150 Sie müssen nicht. 114 00:05:15,150 --> 00:05:16,460 -Du bist gut, mein Lieber. 115 00:05:16,460 --> 00:05:18,450 Ich werde dich vermissen Ihre neue Nase. 116 00:05:18,450 --> 00:05:21,550 Aber ich werde ihnen nicht sagen die Kombination egal was passiert. 117 00:05:21,550 --> 00:05:23,100 -Sehr gut. 118 00:05:23,100 --> 00:05:25,510 Dr. Schlotkin, tun Sie Ihre schlimmsten. 119 00:05:25,510 --> 00:05:26,760 -My pleasure. 120 00:05:30,560 --> 00:05:31,180 -Nein! 121 00:05:31,180 --> 00:05:33,450 Warte, warte. 122 00:05:33,450 --> 00:05:34,770 Ich sage. 123 00:05:34,770 --> 00:05:36,400 Ich sage. 124 00:05:36,400 --> 00:05:38,630 -Ich wusste, dass es funktionieren würde. 125 00:05:38,630 --> 00:05:42,040 Alles klar, gib es mir. 126 00:05:42,040 --> 00:05:46,890 Die Kombination-eins ist. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Two. 130 00:05:48,950 --> 00:05:49,370 -Two. 131 00:05:49,370 --> 00:05:50,450 -Two. 132 00:05:50,450 --> 00:05:50,715 -Drei 133 00:05:50,715 --> 00:05:51,380 -Drei. 134 00:05:51,380 --> 00:05:52,390 -Drei. 135 00:05:52,390 --> 00:05:53,200 -Four. 136 00:05:53,200 --> 00:05:53,720 -Four. 137 00:05:53,720 --> 00:05:55,830 -Four. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Five. 140 00:05:57,120 --> 00:05:58,560 -Five. 141 00:05:58,560 --> 00:06:03,770 -So ist die Kombination ein, zwei, drei, vier, fünf. 142 00:06:03,770 --> 00:06:06,745 Das ist das dümmste Kombination, die ich je in meinem Leben gehört habe. 143 00:06:06,745 --> 00:06:09,290 Das ist die Art von Dingen ein Idiot auf seinem Gepäck haben würde. 144 00:06:09,290 --> 00:06:11,540 -Danke, Eure Hoheit. 145 00:06:11,540 --> 00:06:12,940 -Was hast du getan? 146 00:06:12,940 --> 00:06:14,230 -Ich drehte mich von der Wand. 147 00:06:14,230 --> 00:06:14,630 Nein, hast du nicht. 148 00:06:14,630 --> 00:06:15,430 Sie schaltete den ganzen Film. 149 00:06:15,430 --> 00:06:16,722 -Ich muss den falschen Knopf gedrückt haben. 150 00:06:16,722 --> 00:06:18,078 Nun, legte es wieder auf. 151 00:06:18,078 --> 00:06:18,805 Legen Sie den Film wieder auf. 152 00:06:18,805 --> 00:06:19,080 -Ja, Sir. 153 00:06:19,080 --> 00:06:19,270 Ja, Sir. 154 00:06:19,270 --> 00:06:19,830 -Lasst uns gehen, Erna. 155 00:06:19,830 --> 00:06:20,270 Komm, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Natürlich wissen Sie, ich werde immer noch Sie für diese in Rechnung stellen. 157 00:06:27,400 --> 00:06:28,325 Nun, hat es funktioniert? 158 00:06:28,325 --> 00:06:29,550 Wo ist das Tor? 159 00:06:29,550 --> 00:06:29,910 -Es funktionierte, Sir. 160 00:06:29,910 --> 00:06:30,770 Wir haben die Kombination. 161 00:06:30,770 --> 00:06:31,390 -Große. 162 00:06:31,390 --> 00:06:35,630 Jetzt können wir nehmen jeden letzten Atemzug frischer Luft vom Planeten Druidia. 163 00:06:35,630 --> 00:06:36,550 Was ist die Kombination? 164 00:06:36,550 --> 00:06:38,805 Ein-, zwei, drei, vier, fünf. 165 00:06:38,805 --> 00:06:40,610 Ein-, zwei, drei, vier, fünf? 166 00:06:40,610 --> 00:06:41,070 -Ja. 167 00:06:41,070 --> 00:06:41,760 -Das ist erstaunlich. 168 00:06:41,760 --> 00:06:45,200 Ich habe die gleiche Kombination auf mein Gepäck. 169 00:06:45,200 --> 00:06:47,800 Bereiten Spaceball 1 für sofortige Ausreise. 170 00:06:47,800 --> 00:06:48,536 -Ja, Sir. 171 00:06:48,536 --> 00:06:52,350 -Und ändern Sie die Kombination auf mein Gepäck. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [END VIDEO PLAYBACK] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. MALAN: An amazing movie Sie sollten jetzt alle zu sehen. 175 00:07:00,600 --> 00:07:06,540 So aus dem Zusammenhang ist, dass mit unsicheren Daten kommt die Möglichkeit, 176 00:07:06,540 --> 00:07:07,790 verschlüsseln und zu verschlüsseln ist. 177 00:07:07,790 --> 00:07:11,060 Und so ist dies, zum Beispiel, das ein Beispiel einer verschlüsselten Nachricht. 178 00:07:11,060 --> 00:07:12,980 Das sagt eigentlich etwas auf Englisch. 179 00:07:12,980 --> 00:07:14,750 Aber es ist eindeutig nicht ganz klar. 180 00:07:14,750 --> 00:07:17,360 Und wir werden der Kreis heute auseinander zu necken, was dieses Geheimnis 181 00:07:17,360 --> 00:07:18,380 Botschaft hier ist. 182 00:07:18,380 --> 00:07:22,370 Aber in der realen Welt der Computer, die Dinge gar nicht, wie sie aussehen könnte 183 00:07:22,370 --> 00:07:23,440 Englisch sein Phrasen. 184 00:07:23,440 --> 00:07:27,500 Zum Beispiel ist es das, was Sie vielleicht auf einem Standard-Linux-oder Mac oder finden 185 00:07:27,500 --> 00:07:32,080 Unix-Rechner in einer Datei, die einst genannt wurde die Passwort-Datei. 186 00:07:32,080 --> 00:07:34,170 Heutzutage ist es an anderen Orten verschoben worden. 187 00:07:34,170 --> 00:07:38,660 Aber wenn Sie an der richtigen Stelle auf einem System anschauen, werden Sie sehen, nicht nur Ihre 188 00:07:38,660 --> 00:07:41,430 Benutzernamen oder das anderer Menschen auf dem System, aber du wirst sehen, ein 189 00:07:41,430 --> 00:07:43,410 verschlüsselte Version ihres Passworts. 190 00:07:43,410 --> 00:07:47,800 Tatsächlich schlägt das Wort Krypta, dass die folgenden Dinge verschlüsselt ist. 191 00:07:47,800 --> 00:07:52,030 Und diese Serie von scheinbar zufälligen Buchstaben und Zeichen und Zahlen 192 00:07:52,030 --> 00:07:56,370 usw. können nur von in der Regel wissen, ein Geheimnis entschlüsselt werden - 193 00:07:56,370 --> 00:07:58,600 eine geheime Wort, eine Geheimnummer. 194 00:07:58,600 --> 00:08:02,760 Und so tatsächlich, die Kunst der Kryptographie letztlich darauf einigen vertrauen 195 00:08:02,760 --> 00:08:05,700 sortieren und zu wissen, dass jemand etwas anderes nicht. 196 00:08:05,700 --> 00:08:10,010 Wir werden dies in etwas mehr Detail zu erforschen heute und in der pset zu kommen. 197 00:08:10,010 --> 00:08:11,860 >> Und nun ein Wort zu Pass / Fail. 198 00:08:11,860 --> 00:08:15,250 So haben besonders, da einige von euch ins pset 1, das Gerät tauchten und 199 00:08:15,250 --> 00:08:18,390 eine ganz neue Welt für sich, erkannte, dass Frustrationen und 200 00:08:18,390 --> 00:08:21,340 Verwirrung und gerade technische Schwierigkeiten zu erwarten sind. 201 00:08:21,340 --> 00:08:24,410 Besonders mit dem ersten pset, wo es nur so viel neuen, gerade erst 202 00:08:24,410 --> 00:08:28,830 vertraut mit ls und cd und all diese obskuren Befehle in einer neuen Umgebung. 203 00:08:28,830 --> 00:08:32,679 Und das ist getrennt von der eigentlichen materiellen und Programmierung selbst. 204 00:08:32,679 --> 00:08:35,960 So erkennen Sie auch, dass es sicherlich Bürozeiten, die als vorhanden 205 00:08:35,960 --> 00:08:36,770 die Trägerstruktur. 206 00:08:36,770 --> 00:08:38,620 Abschnitte beginnen am kommenden Sonntag. 207 00:08:38,620 --> 00:08:41,990 Aber am wichtigsten ist, wenn Sie das Gefühl nur, dass du dies nicht der 208 00:08:41,990 --> 00:08:44,420 Welt für Sie erkennen, dass es wirklich nur die Zeit nehmen. 209 00:08:44,420 --> 00:08:47,520 Und gäbe es nicht diese Gelegenheit Jahren für mich unter einer Klasse 210 00:08:47,520 --> 00:08:50,840 Pass / Fail, ehrlich gesagt, ich würde nie selbst gesetzt haben, einen Fuß in die Klassenzimmer. 211 00:08:50,840 --> 00:08:53,520 Und Sie können diese Einstellung ändern, bis, sagen wir, der fünfte Montag des Kurses. 212 00:08:53,520 --> 00:08:57,110 Also, wenn Sie am Rande zeigen, erkennen, dass anstatt den Kopf in eine andere 213 00:08:57,110 --> 00:09:01,000 Wasser ausbleibt, dürfen Sie sicherlich in Betracht ziehen nur die Änderung zu Pass / Fail. 214 00:09:01,000 --> 00:09:03,750 Auch hier gibt es nicht wirklich diese Kultur hier in Harvard, die Dinge 215 00:09:03,750 --> 00:09:08,080 Pass / Fail da jeder wirklich will, um zu erreichen oder overachieve. 216 00:09:08,080 --> 00:09:11,470 Aber ehrlich gesagt, dies ist ein wunderbarer Weg, zu versuchen, etwas aus, die möglicherweise nicht 217 00:09:11,470 --> 00:09:13,110 Ihnen vertraut sein. 218 00:09:13,110 --> 00:09:17,090 Und du wirst am Ende dabei in den meisten Fällen ziemlich fein, vielleicht 219 00:09:17,090 --> 00:09:18,040 viel zu Ihrer Überraschung. 220 00:09:18,040 --> 00:09:20,850 Und noch konkreter, was ich denke, Pass / Fail-Regel der Fall ist, 221 00:09:20,850 --> 00:09:23,350 vor allem, wie Sie vielleicht mit pset 0 erlebt haben, wenn Sie gesteckt haben 222 00:09:23,350 --> 00:09:27,200 in 10 Stunden, 15 Stunden, 25 Stunden in eine pset - und du bist nur hämmern 223 00:09:27,200 --> 00:09:28,180 mit dem Kopf gegen die Wand, 224 00:09:28,180 --> 00:09:29,850 und es wird immer Super spät in die Nacht, 225 00:09:29,850 --> 00:09:31,880 aber du hast die pset wie 90% der Weg genommen, 226 00:09:31,880 --> 00:09:33,780 Sie wissen, man kann einfach nicht herausfinden, eine Sache - 227 00:09:33,780 --> 00:09:36,830 Pass / Fail wirklich braucht die Kante aus einer Klasse wie dieser, wo Sie sortieren können 228 00:09:36,830 --> 00:09:39,150 der gerne sagen, okay, ich weiß, es ist nicht perfekt. 229 00:09:39,150 --> 00:09:40,470 Aber ich habe mir den Arsch ab zu diesem Thema. 230 00:09:40,470 --> 00:09:42,410 Ich bin ziemlich glücklich mit dem es endete. 231 00:09:42,410 --> 00:09:44,780 Und dass die Erwartungen für Pass treffen / scheitern. 232 00:09:44,780 --> 00:09:46,850 Also man im Hinterkopf behalten. 233 00:09:46,850 --> 00:09:47,140 >> Gut. 234 00:09:47,140 --> 00:09:50,980 So diejenigen von Ihnen, kämpfte um die Harvard University Wi-Fi verwenden haben, wissen, 235 00:09:50,980 --> 00:09:54,780 dass es eine CS50 SSID, ein Wi-Fi-Verbindung im Umlauf, dass Sie 236 00:09:54,780 --> 00:09:56,520 vielleicht mehr Glück für haben. 237 00:09:56,520 --> 00:09:59,430 Es ist ein wenig ironisch, dass das Kennwort für diese - wenn Sie möchten, um zu versuchen würden 238 00:09:59,430 --> 00:10:03,080 Anschluss an das für bessere Geschwindigkeiten und lassen Sie uns wissen, ob es nicht besser ist - 239 00:10:03,080 --> 00:10:09,240 eins, zwei, drei, vier, fünf, den ganzen Weg bis zu acht weil acht ist 240 00:10:09,240 --> 00:10:10,270 sicherer als fünf. 241 00:10:10,270 --> 00:10:15,520 Also, wenn Sie die Wi-Fi Passwort benötigen, um CS50 drahtlos hier anschließen. 242 00:10:15,520 --> 00:10:16,950 Eins, zwei, drei, vier, fünf, sechs, sieben, acht. 243 00:10:16,950 --> 00:10:20,440 Und Beitrag am CS50 Diskutieren wenn Sie noch intermittierende Konnektivität, 244 00:10:20,440 --> 00:10:24,880 und wir lassen die Kräfte, die für diesen Raum werden wissen. 245 00:10:24,880 --> 00:10:25,180 >> Gut. 246 00:10:25,180 --> 00:10:30,350 So eine schnelle Teaser, vor allem für diejenigen von euch, die Fan Jungen oder Mädchen sind 247 00:10:30,350 --> 00:10:31,900 aller Dinge Apple. 248 00:10:31,900 --> 00:10:37,566 Was ich ausgegraben von ein paar Jahre zurück war diese Datei hier, ilock.c, nur um 249 00:10:37,566 --> 00:10:40,930 Art von Make konkreter und komplexer einigen der grundlegenden C 250 00:10:40,930 --> 00:10:42,350 Programme, die wir geschrieben haben. 251 00:10:42,350 --> 00:10:44,360 So öffnete ich diese Datei ilock.c. 252 00:10:44,360 --> 00:10:46,830 Es ist auf dem Vorträge Seite für heute. 253 00:10:46,830 --> 00:10:49,470 Auf der linken Seite sehen Sie eine lange Liste von Funktionen. 254 00:10:49,470 --> 00:10:51,860 So der Bursche, der dies schrieb schrieb eine Menge von Funktionen, 255 00:10:51,860 --> 00:10:53,290 mehr als nur main. 256 00:10:53,290 --> 00:10:55,490 Er verwendet eine ganze Reihe von Bibliotheken hier. 257 00:10:55,490 --> 00:11:00,450 Und wenn wir Scrolling starten durch, was das eigentlich ist, ist das sehr 258 00:11:00,450 --> 00:11:04,670 erste, glaube ich, für den ursprünglichen iPhone knacken. 259 00:11:04,670 --> 00:11:08,000 Wenn Sie das Original-iPhone jailbreak wollte, was bedeutet, untether 260 00:11:08,000 --> 00:11:11,800 es von AT & T und tatsächlich installieren spezielle Software drauf und Dinge tun, 261 00:11:11,800 --> 00:11:13,510 dass Apple wollte nicht die Menschen zu tun - 262 00:11:13,510 --> 00:11:17,020 gut, hat jemand die Zeit, um genau herauszufinden, wie sie ausnutzen könnten 263 00:11:17,020 --> 00:11:20,880 Software-Fehler, Fehler, Fehler, in Apples Software. 264 00:11:20,880 --> 00:11:22,650 Und so war geboren ilock.c. 265 00:11:22,650 --> 00:11:26,670 Dass, wenn Sie es auf einem Computer kompiliert und installiert es auf einem iPhone, dass 266 00:11:26,670 --> 00:11:29,810 wurde an Ihren Computer über, sagen wir, ein USB-Kabel angeschlossen ist, würde dies Ihnen 267 00:11:29,810 --> 00:11:33,360 Verwaltungs-oder Root-Rechte auf Ihrem iPhone und können Sie so ziemlich alles 268 00:11:33,360 --> 00:11:34,170 was Sie wollen. 269 00:11:34,170 --> 00:11:36,740 >> Und so gibt es seit dieser faszinierenden Katz und Maus Spiel zwischen Apple und 270 00:11:36,740 --> 00:11:39,920 der Rest der Welt, insbesondere da sie, wie viele andere Unternehmen, versuchen zu sperren 271 00:11:39,920 --> 00:11:43,220 ihre Sachen nach unten, so dass Sie nur tun können, was sie wollen. 272 00:11:43,220 --> 00:11:46,620 Aber dank Leuten wie diese und ihr Verständnis von Low-Level- 273 00:11:46,620 --> 00:11:50,580 Details und, in diesem Fall, C-Programmierung und ein Großteil der bekannten Konstrukte 274 00:11:50,580 --> 00:11:54,630 dass wir angefangen zu spielen mit, sind Sie in der Lage, wirklich nutzen die 275 00:11:54,630 --> 00:11:59,050 Hardware in einer Art und Weise sehen Sie fit und nicht unbedingt etwas Körperschaft. 276 00:11:59,050 --> 00:12:01,360 So zum Beispiel, ich habe keine Ahnung, was das alles tut. 277 00:12:01,360 --> 00:12:03,220 Aber GetVersion klingt ziemlich einfach. 278 00:12:03,220 --> 00:12:05,480 Und wie es aussieht ist dies eine Funktion, dass diese Person geschrieben hat. 279 00:12:05,480 --> 00:12:09,240 Nehmen Sie irgendeine Art von Integer als Argument, nichts zurück, sondern 280 00:12:09,240 --> 00:12:13,080 scheint Schleife mit einer for-Schleife hier und einer if-Bedingung, wenn die Bedingung, 281 00:12:13,080 --> 00:12:15,620 brechen, und irgendwie bezieht sich auf Versionsnummern. 282 00:12:15,620 --> 00:12:16,700 Wenn wir nach unten scrollen - 283 00:12:16,700 --> 00:12:19,570 obwohl viele dieser Schlüsselwörter sein werden neue, und es gibt eine 284 00:12:19,570 --> 00:12:22,590 ganze Reihe von Funktionen, hier haben wir noch nie gesehen und vielleicht nicht immer über zu sehen 285 00:12:22,590 --> 00:12:23,830 der Verlauf des Semesters - 286 00:12:23,830 --> 00:12:27,150 am Ende des Tages, folgt den gleichen Regeln und Logik, wir waren 287 00:12:27,150 --> 00:12:28,760 Spiel mit so weit. 288 00:12:28,760 --> 00:12:34,220 Also das ist viel zu alt, um dein iPhone 3s oder 4s oder bald 5s, in diesen Tagen zu knacken, 289 00:12:34,220 --> 00:12:37,320 aber wissen, dass es sehr viel ist von dieser Welt stammt, dass wir 290 00:12:37,320 --> 00:12:38,430 tauchte in. 291 00:12:38,430 --> 00:12:41,900 >> Werfen wir also einen Blick auf ein wenig mehr einfaches Beispiel. 292 00:12:41,900 --> 00:12:46,100 Dieser, nur um mit einigen Syntax aufwärmen und auch einige andere Daten 293 00:12:46,100 --> 00:12:49,240 Typ, den wir gesprochen haben, aber noch nicht wirklich in C. gesehen ist also ein 294 00:12:49,240 --> 00:12:51,680 Datei namens positive1.c. 295 00:12:51,680 --> 00:12:55,120 Und nach den Kommentaren an der Spitze, das nur verlangt, dass ein Benutzer bereitstellen 296 00:12:55,120 --> 00:12:55,960 positive Zahl ist. 297 00:12:55,960 --> 00:12:59,530 Es ist also ein Beispiel für eine do-while-Schleife, das ist schön für Benutzer interaktiv 298 00:12:59,530 --> 00:13:01,980 Programme, wo Sie brauchen, um den Benutzer zu sagen, etwas zu tun. 299 00:13:01,980 --> 00:13:05,190 Und wenn sie nicht kooperieren, man sie schreien oder lehnen ihre Eingabe. 300 00:13:05,190 --> 00:13:11,610 Case in point, werde ich tun, Zeilen 19 bis 24, so lange hat der Anwender 301 00:13:11,610 --> 00:13:14,310 nicht mir eine positive Zahl ist. 302 00:13:14,310 --> 00:13:20,400 Nun ist dies hier ausführlich on line 18, warum erkläre ich n oberhalb dieser ganzen 303 00:13:20,400 --> 00:13:24,490 Looping Konstrukt nach rechts neben die Linie 22 entgegen, wo ich 304 00:13:24,490 --> 00:13:26,880 eigentlich egal, um n zu bekommen? 305 00:13:26,880 --> 00:13:27,330 Yeah? 306 00:13:27,330 --> 00:13:27,780 [Unverständlich] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. MALAN: Ja, so in dieser Ausgabe von Umfang. 308 00:13:29,040 --> 00:13:30,850 Und in juristischer Begriff, was bedeutet Umfang zu beziehen? 309 00:13:34,690 --> 00:13:36,610 Yeah? 310 00:13:36,610 --> 00:13:37,860 [Unverständlich] 311 00:13:40,040 --> 00:13:41,105 DAVID J. MALAN: Können Sie sprechen ein wenig lauter? 312 00:13:41,105 --> 00:13:43,450 Sprecher 1: Wo kann man eine bestimmte Variable zugreifen. 313 00:13:43,450 --> 00:13:45,170 DAVID J. MALAN: Perfect. 314 00:13:45,170 --> 00:13:47,360 Wo können Sie eine bestimmte Variable zugreifen. 315 00:13:47,360 --> 00:13:50,400 Und im Allgemeinen, die Faustregel war bisher, dass der Umfang von einigen 316 00:13:50,400 --> 00:13:55,860 Variable wird durch die jüngsten geschweiften Klammern, dass Sie gesehen haben, definiert. 317 00:13:55,860 --> 00:14:02,010 Und so in diesem Fall, wenn ich den Fehler gemacht, zu erklären, n on line 22, 318 00:14:02,010 --> 00:14:03,010 diese Zeile funktionieren würde. 319 00:14:03,010 --> 00:14:10,990 Ich würde einen int, und ich würde es in dieser Variablen n in Zeile 22 setzen. 320 00:14:10,990 --> 00:14:16,900 Aber welche Codezeile würde jetzt keine Ahnung, was ich rede? 321 00:14:16,900 --> 00:14:22,650 So 25, und es stellt sich heraus, 24, als auch, weil in diesem Fall, es draußen fällt 322 00:14:22,650 --> 00:14:23,610 der geschweiften Klammern. 323 00:14:23,610 --> 00:14:27,280 Also einfach ein wenig lästig, aber sehr einfach durch Erklärung gelöst 324 00:14:27,280 --> 00:14:30,140 die Variable außerhalb der Funktion selbst. 325 00:14:30,140 --> 00:14:32,600 >> Jetzt werden wir später sehen, heute kann man einen Schritt weiter gehen. 326 00:14:32,600 --> 00:14:34,860 Und man konnte sogar noch ein wenig faul - 327 00:14:34,860 --> 00:14:37,320 und das ist nicht zu empfehlen, im Allgemeinen - 328 00:14:37,320 --> 00:14:42,260 aber man konnte sogar faul und legte eine Variable global, so zu sprechen, nicht 329 00:14:42,260 --> 00:14:46,670 innerhalb einer Funktion, nicht innerhalb einer Schleife, aber in der Datei selbst, außerhalb 330 00:14:46,670 --> 00:14:49,600 von allen Funktionen, die Sie geschrieben haben, wie ich es hier getan habe on line 15. 331 00:14:49,600 --> 00:14:51,160 Aber das ist allgemein verpönt. 332 00:14:51,160 --> 00:14:55,680 Aber klar, dass das eine Lösung manchmal andere Probleme, wie wir 333 00:14:55,680 --> 00:14:56,620 schließlich sehen. 334 00:14:56,620 --> 00:14:58,130 So jetzt werden wir es so lassen. 335 00:14:58,130 --> 00:15:01,030 Aber lasst uns sehen, ob wir umschreiben können dies nur zu beginnen, uns auszudrücken a 336 00:15:01,030 --> 00:15:01,990 wenig anders. 337 00:15:01,990 --> 00:15:05,330 >> Also das Programm nur klar zu sein, ist Positive1. 338 00:15:05,330 --> 00:15:11,810 Lassen Sie mich gehen Sie hier und in meinem Terminal-Fenster zu machen positiv1, Enter. 339 00:15:11,810 --> 00:15:12,740 Kompiliert, okay. 340 00:15:12,740 --> 00:15:14,910 Ich werde Positive1 laufen, drücken Sie Enter. 341 00:15:14,910 --> 00:15:16,820 Ich verlange, dass Sie mir eine positive ganze Zahl ist. 342 00:15:16,820 --> 00:15:18,260 Ich werde -1 sagen. 343 00:15:18,260 --> 00:15:18,910 Das hat nicht funktioniert. 344 00:15:18,910 --> 00:15:22,150 0, 99, das scheint zu funktionieren. 345 00:15:22,150 --> 00:15:23,570 Vielleicht nicht die strengsten Tests. 346 00:15:23,570 --> 00:15:26,480 Aber zumindest ist es ein schönes Plausibilitätsprüfung, dass wir auf dem richtigen Weg. 347 00:15:26,480 --> 00:15:29,240 So, jetzt lassen Sie mich gehen Sie vor und öffnen Sie die zweite Version davon. 348 00:15:29,240 --> 00:15:32,500 Und was ist anders schon? 349 00:15:32,500 --> 00:15:35,140 Es implementiert die gleiche Sache. 350 00:15:35,140 --> 00:15:40,660 Aber was springt so klar diesmal anders? 351 00:15:40,660 --> 00:15:42,560 Ja, so ist dies bool grün. 352 00:15:42,560 --> 00:15:45,980 Gedit hat in grün diesem Schlüsselwort als bool bekannt hervorgehoben, 353 00:15:45,980 --> 00:15:47,000 das ist ein Datentyp. 354 00:15:47,000 --> 00:15:51,080 Es ist nicht in allen Versionen von C kommen errichtet Sie müssen ein beinhalten 355 00:15:51,080 --> 00:15:52,010 spezifische Bibliothek. 356 00:15:52,010 --> 00:15:54,770 In unserem Fall enthalten ich den CS50-Bibliothek, so dass wir 357 00:15:54,770 --> 00:15:56,460 Zugang zu bool. 358 00:15:56,460 --> 00:15:59,810 Aber in Zeile 18, scheinen wir einen booleschen Wert hier als dankbar sind. 359 00:15:59,810 --> 00:16:01,040 So konnte ich dieses alles genannt haben. 360 00:16:01,040 --> 00:16:04,500 Aber ich nannte es dankbar, nur um Art zu vermitteln einige semantische Bedeutung. 361 00:16:04,500 --> 00:16:07,930 So zunächst in Zeile 18, ich bin offenbar nicht dankbar, weil die 362 00:16:07,930 --> 00:16:12,150 Booleschen Wert dankbar initialisiert wird, um in Zeile 18 false. 363 00:16:12,150 --> 00:16:16,890 Und dann scheint es, was ich hier in den Zeilen 21 bis 23 gemacht ist, ich habe gerade 364 00:16:16,890 --> 00:16:18,610 Art umgeschrieben meine Logik. 365 00:16:18,610 --> 00:16:21,020 Also keine funktional unterschiedlich. 366 00:16:21,020 --> 00:16:26,940 Aber in Zeile 22 jetzt, überprüfe ich, wenn die int der Benutzer vorgesehen ist größer als 367 00:16:26,940 --> 00:16:31,120 0, dann habe ich einfach ändern Sie den Wert dankbar wahr. 368 00:16:31,120 --> 00:16:32,290 Und warum mache ich das? 369 00:16:32,290 --> 00:16:35,600 Da in Zeile 25, offenbar, werde ich eine Bedingung zu überprüfen. 370 00:16:35,600 --> 00:16:39,380 Haben diese Schleife, während dankbar ist falsch. 371 00:16:39,380 --> 00:16:43,610 >> So schlage ich vor, dies als Alternative zur Variante ein, weil es zumindest eine ist 372 00:16:43,610 --> 00:16:45,130 wenig mehr intuitive, vielleicht. 373 00:16:45,130 --> 00:16:46,900 Es ist ein wenig mehr geerdet in englischer Sprache. 374 00:16:46,900 --> 00:16:51,710 So gehen Sie folgendermaßen vor, wenn Sie nicht dankbar sind oder während dankbar ist falsch. 375 00:16:51,710 --> 00:16:55,890 Und auch dieses Mal, ich anscheinend egal zu erinnern, was der Benutzer eingegeben 376 00:16:55,890 --> 00:16:57,730 in, weil Ankündigung gibt es keine variable n. 377 00:16:57,730 --> 00:16:58,650 Also eigentlich, I - 378 00:16:58,650 --> 00:17:00,080 ein kleines weißes daliegen. 379 00:17:00,080 --> 00:17:02,770 Funktionell ist das Programm ein bisschen anders, wenn wir auf den Boden zu bekommen 380 00:17:02,770 --> 00:17:04,819 weil ich nicht erinnern werde, was n ist. 381 00:17:04,819 --> 00:17:09,579 Aber ich wollte hier zeigen auch, dass obwohl wir GetInt gesehen und 382 00:17:09,579 --> 00:17:13,920 GetString ist auf der rechten Seite von einem Gleichheitszeichen bislang eingesetzten so daß 383 00:17:13,920 --> 00:17:17,160 erinnern wir uns den Wert, technisch, das ist nicht unbedingt notwendig. 384 00:17:17,160 --> 00:17:20,950 Wenn aus irgendeinem Grund die Sie gerade nicht kümmern, um den Wert zu speichern, Sie wollen einfach nur 385 00:17:20,950 --> 00:17:25,710 , um den Wert zu überprüfen, feststellen, dass wir einfach schreiben dies als GetInt offen 386 00:17:25,710 --> 00:17:27,000 paren, in der Nähe paren. 387 00:17:27,000 --> 00:17:30,460 Diese Funktion wird ein Wert zurückgegeben, wie wir gesagt haben. 388 00:17:30,460 --> 00:17:32,010 Es wird Ihnen wieder ein int. 389 00:17:32,010 --> 00:17:36,450 Und so, wenn Sie geistig glaube, dass dies geschieht, wenn ich in 99 geben, GetInt 390 00:17:36,450 --> 00:17:38,160 gibt die Nummer 99. 391 00:17:38,160 --> 00:17:41,330 Und so konzeptuell, ist es, als ob mein Code tatsächlich waren diese. 392 00:17:41,330 --> 00:17:45,880 Also, wenn 99 der Tat größer als 0 ist, dann dankbar wahr wird. 393 00:17:45,880 --> 00:17:50,420 Dann Zeile 25 ooh merkt, wir sind fertig, weil ich jetzt dankbar bin. 394 00:17:50,420 --> 00:17:54,590 Und in Zeile 26, sagen wir einfach, danke für die positive ganze Zahl, was es 395 00:17:54,590 --> 00:17:55,710 passiert zu sein. 396 00:17:55,710 --> 00:17:58,900 >> Jetzt lasst uns leichter syntaktischer Zucker hier, so zu sprechen. 397 00:17:58,900 --> 00:18:02,990 Mal sehen, ob wir reinigen können diese Zeile 25 mit diesem dritten und letzten Varianz 398 00:18:02,990 --> 00:18:04,640 in positive3. 399 00:18:04,640 --> 00:18:08,250 So bemerkt der einzige Unterschied ist jetzt, was Codezeile? 400 00:18:11,930 --> 00:18:13,260 Ja, so 25. 401 00:18:13,260 --> 00:18:15,520 Und wir haben nicht wirklich diesen Trick gesehen nur noch. 402 00:18:15,520 --> 00:18:19,510 Aber wir sahen das Ausrufezeichen am Montag, das ist, was bedeutet? 403 00:18:19,510 --> 00:18:20,970 So nicht, oder Negation. 404 00:18:20,970 --> 00:18:23,460 So nehmen Sie einen booleschen Wert und drehen ihren Wert. 405 00:18:23,460 --> 00:18:24,390 Wahre falsch wird. 406 00:18:24,390 --> 00:18:25,500 Falsche wahr wird. 407 00:18:25,500 --> 00:18:28,910 Also das würde ich vorschlagen, ist sogar ein wenig mehr intuitive einer Art 408 00:18:28,910 --> 00:18:32,200 Schreiben des Codes, weil ich zu initialisieren immer noch dankbar auf false. 409 00:18:32,200 --> 00:18:33,530 Ich weiß immer noch die folgenden. 410 00:18:33,530 --> 00:18:35,700 Ich dankbar wahr, wenn die Zeit kommt. 411 00:18:35,700 --> 00:18:40,690 Aber jetzt können Sie wirklich nur übersetzen diesen Code mündlich links nach rechts, 412 00:18:40,690 --> 00:18:42,550 zwar nicht dankbar. 413 00:18:42,550 --> 00:18:46,170 Da bang, oder Ausrufezeichen, bedeutet der Begriff nicht, so dass während 414 00:18:46,170 --> 00:18:47,010 nicht dankbar. 415 00:18:47,010 --> 00:18:49,740 >> Also noch einmal, haben wir keine neuen Konzepte per se eingeführt. 416 00:18:49,740 --> 00:18:53,230 Wir haben über Booleans zurück, wenn wir mit Scratch spielte gesprochen. 417 00:18:53,230 --> 00:18:55,690 Aber merke jetzt, können wir nur mit dem Schreiben beginnen unseren Code in 418 00:18:55,690 --> 00:18:56,550 viele verschiedene Arten. 419 00:18:56,550 --> 00:19:00,010 So vor allem in pset1, wenn Sie eine Art zu kämpfen, um herauszufinden, den Weg zu 420 00:19:00,010 --> 00:19:03,400 schreiben einige Programm werden Sie Glück Quote, weil es geht um beliebig sein 421 00:19:03,400 --> 00:19:05,780 Reihe von Lösungen, die Sie bei passieren kann. 422 00:19:05,780 --> 00:19:09,850 Zum Beispiel ist dies nur drei selbst für die einfachsten von Programmen. 423 00:19:09,850 --> 00:19:10,180 Gut. 424 00:19:10,180 --> 00:19:13,860 Und nun erinnern am Montag, verließen wir auf diesem Zettel mit Rückgabewerten. 425 00:19:13,860 --> 00:19:18,280 So zum ersten Mal schrieben wir ein Programm, das nicht nur über Haupt-, 426 00:19:18,280 --> 00:19:22,240 es hat auch seine eigene Funktion, die ich hier geschrieben habe. 427 00:19:22,240 --> 00:19:26,640 So in Zeile 31 bis 34 habe ich einen Würfel implementiert. 428 00:19:26,640 --> 00:19:27,800 Es ist nicht komplex. 429 00:19:27,800 --> 00:19:29,830 Es ist nur ein mal ein mal ein, in diesem Fall. 430 00:19:29,830 --> 00:19:34,920 Aber was ist wichtig daran ist, dass ich unter Input in Form von a und 431 00:19:34,920 --> 00:19:38,910 Ich bin wieder Ausgang in Form eines mal ein mal ein. 432 00:19:38,910 --> 00:19:43,940 >> So jetzt habe ich die Möglichkeit, ähnlich wie ich früher mit printf allein, zu nennen 433 00:19:43,940 --> 00:19:47,120 diese Funktion, indem Sie die Würfel Funktion. 434 00:19:47,120 --> 00:19:49,470 Und der Würfel-Funktion nimmt eine Eingabe. 435 00:19:49,470 --> 00:19:52,030 Und der Würfel-Funktion liefert eine Ausgabe. 436 00:19:52,030 --> 00:19:56,660 Und so dagegen printf gerade etwas. 437 00:19:56,660 --> 00:19:59,490 Es kam nicht wieder alles, was wir über gepflegt - obwohl, wie ein 438 00:19:59,490 --> 00:20:00,820 beiseite, tut es einen Wert zurückgeben. 439 00:20:00,820 --> 00:20:02,650 Sie haben in der Regel ignorieren. 440 00:20:02,650 --> 00:20:04,000 Printf gerade etwas. 441 00:20:04,000 --> 00:20:06,220 Es hatte eine Nebenwirkung von Drucken auf dem Bildschirm. 442 00:20:06,220 --> 00:20:09,480 Im Gegensatz hier haben wir den Würfel-Funktion, die 443 00:20:09,480 --> 00:20:11,400 gibt tatsächlich etwas. 444 00:20:11,400 --> 00:20:12,960 >> Das ist also in der Regel - 445 00:20:12,960 --> 00:20:15,260 Für diejenigen, die mit diesem, ist es eine ziemlich einfache Idee. 446 00:20:15,260 --> 00:20:18,460 Aber für diejenigen, die weniger vertraut mit dieser Idee der Weitergabe an den Eingängen und bekommen 447 00:20:18,460 --> 00:20:21,700 zurück Ausgänge, versuchen wir nur etwas super einfach. 448 00:20:21,700 --> 00:20:25,180 Ist jemand komfortable kommen auf die Bühne kurz auf? 449 00:20:25,180 --> 00:20:27,460 Sie müssen bequem sein mit einer Kamera auf Sie, wie gut. 450 00:20:27,460 --> 00:20:27,640 Yeah. 451 00:20:27,640 --> 00:20:28,610 Okay, was ist Ihr Name? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. MALAN: Ken. 454 00:20:29,420 --> 00:20:29,810 Alle Rechte, Ken. 455 00:20:29,810 --> 00:20:31,060 Komm rauf. 456 00:20:31,060 --> 00:20:34,660 Ken so wird eine Funktion der möglichen hier sein. 457 00:20:34,660 --> 00:20:35,760 Und lasst uns weitermachen und tun. 458 00:20:35,760 --> 00:20:38,790 Lassen Sie uns ein wenig Phantasie. 459 00:20:38,790 --> 00:20:39,770 Schön, Sie kennen zu lernen. 460 00:20:39,770 --> 00:20:41,010 Willkommen in den Mittelpunkt. 461 00:20:41,010 --> 00:20:41,980 Gut. 462 00:20:41,980 --> 00:20:45,590 Lassen Sie uns treffen diese Taste hier. 463 00:20:45,590 --> 00:20:46,420 Gut. 464 00:20:46,420 --> 00:20:49,490 So hier haben Sie einen modernen Tafel. 465 00:20:49,490 --> 00:20:53,050 Und was ich bin, ist die wichtigste Funktion, zum Beispiel. 466 00:20:53,050 --> 00:20:55,990 Und ich habe nicht ein iPad in der Hand. 467 00:20:55,990 --> 00:20:59,000 Ich weiß nicht wirklich erinnern, wie - na ja, eigentlich kann das nicht sagen. 468 00:20:59,000 --> 00:21:02,200 Ich habe nicht wirklich eine gute Handschrift. 469 00:21:02,200 --> 00:21:05,260 Und so also, ich möchte Sie etwas auf dem Bildschirm für mich zu drucken. 470 00:21:05,260 --> 00:21:07,470 >> Also ich bin da das Hauptprogramm. 471 00:21:07,470 --> 00:21:15,060 Und ich werde Ihnen sagen, dass dies, indem er es in meinem Chicken Scratch und 472 00:21:15,060 --> 00:21:16,600 dann vorbei Sie einen Eingang. 473 00:21:16,600 --> 00:21:20,000 So wie dumm obwohl diese Übung ist, die Vorstellung der Funktionen und Aufruf einer 474 00:21:20,000 --> 00:21:22,260 Funktion und eine Funktion zurückgibt, läuft wirklich auf diese. 475 00:21:22,260 --> 00:21:23,120 Ich bin main. 476 00:21:23,120 --> 00:21:26,270 Ich habe gerade printf ("irgendwas") auf den Bildschirm geschrieben. 477 00:21:26,270 --> 00:21:27,470 Ich bin mit diesem Programm. 478 00:21:27,470 --> 00:21:30,900 Und sobald printf aufgerufen wird, dauert es ein Argument - oder einen Parameter, 479 00:21:30,900 --> 00:21:31,660 manchmal - 480 00:21:31,660 --> 00:21:32,780 zwischen Anführungszeichen. 481 00:21:32,780 --> 00:21:33,960 Hier ist das Argument. 482 00:21:33,960 --> 00:21:35,740 Ich bin der Übergabe an Ken. 483 00:21:35,740 --> 00:21:39,390 Jetzt ist er ein Black-Box geschrieben gewisse Anzahl von Jahren, dass offenbar 484 00:21:39,390 --> 00:21:41,070 nur weiß, wie die Dinge auf dem Bildschirm auszugeben. 485 00:21:41,070 --> 00:21:42,320 >> So führen. 486 00:21:48,842 --> 00:21:49,900 Das ist nicht schlecht. 487 00:21:49,900 --> 00:21:50,890 Also, sehr gut. 488 00:21:50,890 --> 00:21:52,900 So, jetzt Ken getan wird ausgeführt. 489 00:21:52,900 --> 00:21:55,810 Braucht er zur Hand mir nichts zurück? 490 00:21:55,810 --> 00:21:57,240 Also nicht, dass wir bisher gesehen. 491 00:21:57,240 --> 00:21:59,230 Wieder ist printf tatsächlich wieder eine Nummer. 492 00:21:59,230 --> 00:22:01,640 Aber wir werden, dass für jetzt ignorieren, weil wir es nie benutzt habe. 493 00:22:01,640 --> 00:22:03,400 Also das ist es für Ken. 494 00:22:03,400 --> 00:22:06,650 Und nun Haupt kommt zurück zu führen - 495 00:22:06,650 --> 00:22:09,630 Haupt übernimmt die Steuerung des Programms wieder, weil dieser Code-Zeile, 496 00:22:09,630 --> 00:22:11,010 printf, erfolgt die Ausführung. 497 00:22:11,010 --> 00:22:13,890 Und wir gehen über unsere Art der Ausführung, was andere Leitungen vorhanden sind. 498 00:22:13,890 --> 00:22:14,130 >> Gut. 499 00:22:14,130 --> 00:22:17,080 So, jetzt wollen wir versuchen eine etwas andere Beispiel. 500 00:22:17,080 --> 00:22:22,430 Und diese Zeit hier, lassen Sie uns zuerst den Bildschirm hier. 501 00:22:22,430 --> 00:22:24,670 Und dieses Mal werden wir tun das Cubing-Funktion. 502 00:22:24,670 --> 00:22:27,350 Aber diesmal erwarte ich einen Ausgangswert. 503 00:22:27,350 --> 00:22:28,630 Also lasst uns weitermachen und tun. 504 00:22:28,630 --> 00:22:35,680 So jetzt habe ich eine Zeile Code, die sagt x = cube (x). 505 00:22:35,680 --> 00:22:36,930 Also eigentlich let's - 506 00:22:41,450 --> 00:22:43,940 die Codezeile, Rückruf, sieht wie folgt aus. 507 00:22:43,940 --> 00:22:45,960 x = cube (x). 508 00:22:45,960 --> 00:22:48,100 Also, wie ist das funktionieren? 509 00:22:48,100 --> 00:22:50,820 Also lasst uns gehen Sie vor und geben Ihnen einen weißen Bildschirm wieder. 510 00:22:50,820 --> 00:22:55,000 Und ich gehe jetzt notieren den Wert von x, die in diesem Moment 511 00:22:55,000 --> 00:23:01,080 Es passiert zu sein, sagen wir, 2, es einfach zu halten. 512 00:23:01,080 --> 00:23:04,890 Also habe ich auf ein Stück Papier den Wert von 2 geschrieben, 513 00:23:04,890 --> 00:23:06,100 das ist mein Wert x. 514 00:23:06,100 --> 00:23:08,250 Ich gebe es zu Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Und ich schreibe die Antwort? 516 00:23:09,200 --> 00:23:12,660 DAVID J. MALAN: Yeah, lasst uns einfach schreiben Sie die Antwort. 517 00:23:12,660 --> 00:23:13,030 Okay. 518 00:23:13,030 --> 00:23:16,280 Und jetzt hat er wieder mir etwas. 519 00:23:16,280 --> 00:23:17,560 So - 520 00:23:17,560 --> 00:23:18,170 perfekt. 521 00:23:18,170 --> 00:23:18,840 Nizza segue. 522 00:23:18,840 --> 00:23:21,970 >> So, jetzt reicht er mir den Wert von 8, in diesem Fall. 523 00:23:21,970 --> 00:23:23,220 Und was mache ich damit zu tun? 524 00:23:23,220 --> 00:23:26,130 Na ja, eigentlich, mal sehen. 525 00:23:26,130 --> 00:23:26,640 Holen Sie dieses Recht. 526 00:23:26,640 --> 00:23:27,880 Was soll ich damit zu tun? 527 00:23:27,880 --> 00:23:31,900 Jetzt werde ich diesen Wert zu nehmen und tatsächlich lagern Sie es in die 528 00:23:31,900 --> 00:23:33,400 gleichen Bits im Speicher. 529 00:23:33,400 --> 00:23:35,030 Beachten Sie aber, ich bin Art zu kämpfen hier. 530 00:23:35,030 --> 00:23:38,280 Ich bin ein wenig verwirrt, weil, wo ich schreibe eigentlich den Wert von x? 531 00:23:38,280 --> 00:23:41,840 Denn was ich gerade getan haben ist physisch Hand Ken ein Stück Papier 532 00:23:41,840 --> 00:23:44,400 Das hatte den Wert 2, die x war. 533 00:23:44,400 --> 00:23:46,300 Und in der Tat, das ist genau das, was passiert. 534 00:23:46,300 --> 00:23:50,100 So stellt sich heraus, dass, wenn Sie eine Funktion aufrufen, und Sie in ein Argument übergeben 535 00:23:50,100 --> 00:23:54,130 wie "Hallo Welt", oder Sie übergeben ein Argument wie 2, in der Regel, du bist 536 00:23:54,130 --> 00:23:56,720 Übergabe einer Kopie dieses Argument. 537 00:23:56,720 --> 00:24:01,020 Und so wie ich schrieb mir die Nummer 2 hier und reichte es Ken; Das muss 538 00:24:01,020 --> 00:24:04,760 bedeuten, dass ich noch eine Kopie des Wertes 2 irgendwo. 539 00:24:04,760 --> 00:24:08,140 Denn in der Tat, jetzt, wo ich wieder den Wert 8 bekommen, muss ich zurück in 540 00:24:08,140 --> 00:24:12,010 RAM und tatsächlich aufzuschreiben 8, wo ich einst die Nummer 2. 541 00:24:12,010 --> 00:24:15,720 >> So optisch erinnere mich an diese Vorstellung vorbei buchstäblich 542 00:24:15,720 --> 00:24:16,730 eine Kopie des Wertes. 543 00:24:16,730 --> 00:24:19,570 Ken macht seine Sache, reicht mir wieder etwas - in diesem Fall 544 00:24:19,570 --> 00:24:20,820 ein Wert wie 8. 545 00:24:20,820 --> 00:24:22,660 Und dann habe ich etwas mit diesem Wert tun, wenn ich 546 00:24:22,660 --> 00:24:24,880 soll es auch bleiben rund. 547 00:24:24,880 --> 00:24:29,470 So wird das alles nur allzu vertraut, bevor lang. 548 00:24:29,470 --> 00:24:33,082 Vielen Dank für diese Demo hier, Ken. 549 00:24:33,082 --> 00:24:34,820 Gut. 550 00:24:34,820 --> 00:24:36,720 Sehr gut gemacht. 551 00:24:36,720 --> 00:24:40,610 Also mal sehen, wie das letztlich bezieht sich auf einige der Funktion 552 00:24:40,610 --> 00:24:42,270 ruft, dass wir hier getan. 553 00:24:42,270 --> 00:24:47,610 Also lass mich gehen Sie vor und bringen uns zurück zu dem Cubing Beispiel hier. 554 00:24:47,610 --> 00:24:53,080 Und feststellen, dass, wenn wir tatsächlich anfangen, diese weiter wollen, werden wir 555 00:24:53,080 --> 00:24:57,050 zu müssen, eingedenk der Tatsache, dass die Zahl x, die ist in weitergegeben 556 00:24:57,050 --> 00:25:01,390 hier ist es anders aus, was tatsächlich an die Funktion übergeben. 557 00:25:01,390 --> 00:25:03,940 Also noch einmal, wird dies durch Kopie übergeben werde ganz geworden 558 00:25:03,940 --> 00:25:05,620 Germane in nur einem Augenblick. 559 00:25:05,620 --> 00:25:09,320 >> Werfen wir also einen Blick auf etwas, das nicht ganz stimmt noch arbeiten. 560 00:25:09,320 --> 00:25:11,790 Ich werde weitermachen und öffnen ein Drittel buggy Beispiel, das 561 00:25:11,790 --> 00:25:13,560 ist von der Natur fehlerhaft. 562 00:25:13,560 --> 00:25:18,070 Und es heißt buggy3, und es setzt eine Swapping-Funktion. 563 00:25:18,070 --> 00:25:23,500 Also hier haben wir eine Hauptfunktion, die x-und y beliebig ist initialisiert 564 00:25:23,500 --> 00:25:24,720 1 und 2 sind. 565 00:25:24,720 --> 00:25:27,590 Wir könnten GetInt, aber wir brauchen nur eine einfache Übung. 566 00:25:27,590 --> 00:25:29,680 So ist es hartcodierte als 1 und 2. 567 00:25:29,680 --> 00:25:35,330 In den Zeilen 21 und 22, wir scheinbar auszudrucken x und y, eine pro Zeile. 568 00:25:35,330 --> 00:25:39,620 Dann on line 23, behaupte ich, ich tauschen diese Werte, Punkt, Punkt, Punkt. 569 00:25:39,620 --> 00:25:43,030 Ich anscheinend eine Funktion in Zeile 24 als Swap 570 00:25:43,030 --> 00:25:44,000 das nimmt zwei Argumente. 571 00:25:44,000 --> 00:25:46,430 Es ist völlig legitim für Funktionen zweier Argumente zu nehmen. 572 00:25:46,430 --> 00:25:48,220 Wir haben gesehen, printf tun es bereits. 573 00:25:48,220 --> 00:25:50,370 Also nimmt offensichtlich Swap x und y. 574 00:25:50,370 --> 00:25:53,010 Und wie der Name schon sagt, würde ich hoffen, dass es zu gehen 575 00:25:53,010 --> 00:25:54,320 Swap diese beiden Werte. 576 00:25:54,320 --> 00:25:57,560 Also habe ich on line 25, dadurch gekennzeichnet, getauscht. 577 00:25:57,560 --> 00:26:01,570 Und I nachzudrucken x und y unter der Voraussetzung, daß 578 00:26:01,570 --> 00:26:02,830 sie haben zwar schon getauscht. 579 00:26:02,830 --> 00:26:04,370 Aber wenn ich wirklich dieses Programm - 580 00:26:04,370 --> 00:26:06,060 Lassen Sie mich öffnen Sie ein Terminal-Fenster. 581 00:26:06,060 --> 00:26:07,750 Lassen Sie mich buggy3. 582 00:26:07,750 --> 00:26:09,970 Wie der Name andeutet, ist dies nicht gut enden. 583 00:26:09,970 --> 00:26:14,690 Denn wenn ich die Eingabetaste drücken, bemerken, dass x 1 ist. 584 00:26:14,690 --> 00:26:15,720 y 2 ist. 585 00:26:15,720 --> 00:26:19,160 Und trotzdem am Ende des Programms, sind sie immer noch in der Tat dasselbe. 586 00:26:19,160 --> 00:26:22,760 >> So auf der Demonstration basiert gerade jetzt mit Ken, was eigentlich los? 587 00:26:22,760 --> 00:26:24,660 Nun, lasst uns in diesen Swap-Funktion zu tauchen. 588 00:26:24,660 --> 00:26:25,800 Es ist super kurz. 589 00:26:25,800 --> 00:26:28,020 Es ist nur ein paar Zeilen Code lang. 590 00:26:28,020 --> 00:26:32,810 Aber was ist das grundlegende Problem der einfachen Geschichte erzählte 591 00:26:32,810 --> 00:26:34,270 hier mit Ken? 592 00:26:34,270 --> 00:26:36,115 Warum ist Swap gebrochen? 593 00:26:36,115 --> 00:26:37,365 [Unverständlich] 594 00:26:39,840 --> 00:26:40,460 Genau. 595 00:26:40,460 --> 00:26:43,610 Daher freuen wir uns auf eine Kopie speichern, nicht die Variable selbst. 596 00:26:43,610 --> 00:26:46,810 In anderen Worten, Swap scheinbar nimmt zwei Argumente, ein int. 597 00:26:46,810 --> 00:26:49,370 Und es ist willkürlich bezeichnet a und b. 598 00:26:49,370 --> 00:26:54,430 Und hier habe ich in x und y, die jeweils 1 und 2 geführt. 599 00:26:54,430 --> 00:26:56,580 Aber ich bin nicht wörtlich vorbei in x. 600 00:26:56,580 --> 00:26:58,410 Ich bin nicht wörtlich vorbei in y. 601 00:26:58,410 --> 00:27:01,230 Ich Übergeben einer Kopie von x und eine Kopie von y. 602 00:27:01,230 --> 00:27:05,180 Es ist wie fast, als ob Sie kopiert und eingefügt in vertauschen die Werte, die 603 00:27:05,180 --> 00:27:07,440 Sie wollen, dass es tatsächlich zu manipulieren. 604 00:27:07,440 --> 00:27:11,970 Also, wenn das der Fall ist, wenn ich das Programm, das Ausführen starten 605 00:27:11,970 --> 00:27:14,140 Zeile 35, dann 36 - 606 00:27:14,140 --> 00:27:17,740 wenn ich in die Linie 37 zu bekommen, an diesem Punkt in der Geschichte, ist das, was der Wert von a? 607 00:27:20,740 --> 00:27:24,850 An diesem Punkt in der Geschichte, die Leitung 37, was der Wert von a zu diesem Zeitpunkt? 608 00:27:24,850 --> 00:27:25,980 So sollte es nur 1 sein. 609 00:27:25,980 --> 00:27:26,170 Right? 610 00:27:26,170 --> 00:27:29,100 Da x wurde als erstes Argument übergeben. 611 00:27:29,100 --> 00:27:33,150 Und diese Funktion einfach willkürlich ruft das erste Argument, ein. 612 00:27:33,150 --> 00:27:35,130 Ebenso ist y, das zweite Argument. 613 00:27:35,130 --> 00:27:37,930 Und es ist einfach willkürlich ruft das zweite Argument b. 614 00:27:37,930 --> 00:27:40,510 >> Nun ist diese Dichotomie ist eigentlich recht einfach erklärt. 615 00:27:40,510 --> 00:27:40,880 Denken Sie darüber nach. 616 00:27:40,880 --> 00:27:42,980 Keiner von uns erfüllt die Person, die printf schrieb. 617 00:27:42,980 --> 00:27:49,880 So sicher, hat er oder sie keine Ahnung, was unsere Variablen 30 Jahre später gehen 618 00:27:49,880 --> 00:27:50,710 aufgerufen werden. 619 00:27:50,710 --> 00:27:55,110 Also muss es einen Unterschied zwischen dem, was Sie anrufen Variablen werden 620 00:27:55,110 --> 00:27:59,960 Funktionen, die Sie gerade schreiben und was Sie nennen Variablen in Funktionen sind Sie 621 00:27:59,960 --> 00:28:01,770 telefonisch oder verwenden. 622 00:28:01,770 --> 00:28:05,120 Also mit anderen Worten, ich habe meine Variablen x und y geschrieben. 623 00:28:05,120 --> 00:28:08,060 Aber wenn jemand anderes die Swap-Funktion geschrieben hatte, sicherlich er oder sie 624 00:28:08,060 --> 00:28:10,480 wüsste nicht, was meine Variablen gehen, um aufgerufen werden. 625 00:28:10,480 --> 00:28:13,850 So klar, dass dies, warum Sie diese Dualität von Namen zu haben. 626 00:28:13,850 --> 00:28:16,800 Technisch konnte ich dies durch Zufall zu tun. 627 00:28:16,800 --> 00:28:19,750 Aber sie würden immer noch als Kopien weitergegeben werden. 628 00:28:19,750 --> 00:28:22,940 Es wäre nur ein reiner Zufall, ästhetisch, wenn die Person, die schrieb sein 629 00:28:22,940 --> 00:28:25,590 Swap hatte die gleichen Namen verwendet. 630 00:28:25,590 --> 00:28:25,930 >> Gut. 631 00:28:25,930 --> 00:28:29,010 So an diesem Punkt in der Geschichte, Zeile 37, eine 1 ist. 632 00:28:29,010 --> 00:28:30,410 b 2 ist. 633 00:28:30,410 --> 00:28:32,040 Und jetzt gehe ich vor, um sie auszutauschen. 634 00:28:32,040 --> 00:28:34,730 Nun zunächst einmal, lassen Sie mich tatsächlich tun dies viel einfacher. 635 00:28:34,730 --> 00:28:36,500 Ich weiß nicht, was diese drei Zeilen Code taten. 636 00:28:36,500 --> 00:28:37,370 Lassen Sie mich nur dies tun. 637 00:28:37,370 --> 00:28:38,850 b erhält ein. 638 00:28:38,850 --> 00:28:40,170 a erhält b. 639 00:28:40,170 --> 00:28:41,450 Fertig. 640 00:28:41,450 --> 00:28:43,540 Warum ist das gebrochene, logisch? 641 00:28:46,980 --> 00:28:48,590 Es ist eine Art der intuitiven Sache, nicht wahr? 642 00:28:48,590 --> 00:28:50,640 So a wird b. 643 00:28:50,640 --> 00:28:52,450 Und b wird zu einem. 644 00:28:52,450 --> 00:28:55,410 Aber das Problem ist, dass, sobald die Leitung 37 führt, was ist das 645 00:28:55,410 --> 00:28:58,170 Wert von a und b? 646 00:28:58,170 --> 00:28:59,070 Das gleiche, 1. 647 00:28:59,070 --> 00:29:03,460 Weil du verprügelt haben, so zu sprechen, haben Sie b geändert, um eine gleich. 648 00:29:03,460 --> 00:29:06,000 Also, wenn Zeile 37 ausgeführt wird, das ist großartig. 649 00:29:06,000 --> 00:29:09,940 Sie haben nun zwei Kopien der Nummer 1 im Inneren dieser Funktion. 650 00:29:09,940 --> 00:29:14,720 Also, wenn Sie in Zeile 38 sagen, ein b erhält, gut, du bist Art verschraubt. 651 00:29:14,720 --> 00:29:17,370 Weil Sie nur die Zuordnung von 1 bis 1. 652 00:29:17,370 --> 00:29:20,400 Sie haben irgendwie verloren den Wert Sie über betreut. 653 00:29:20,400 --> 00:29:22,910 >> So in der ursprünglichen Version dieses bemerken, was ich tat. 654 00:29:22,910 --> 00:29:26,620 Ich stattdessen hatte eine dritte Codezeile, die wie folgt aussah. 655 00:29:26,620 --> 00:29:29,910 Ich erkläre eine temporäre Variable - tmp ist eine sehr häufige Namen 656 00:29:29,910 --> 00:29:31,240 für eine temporäre Variable. 657 00:29:31,240 --> 00:29:34,280 Es ist ein int, weil es zu entsprechen, was ich eine Kopie machen wollen hat. 658 00:29:34,280 --> 00:29:39,720 Ich speichere eine Kopie einer Innenseite tmp. Also, wenn Zeile 37 ausgeführt wurde, 659 00:29:39,720 --> 00:29:41,390 der Wert von a ist - 660 00:29:41,390 --> 00:29:42,970 schnelle Plausibilitätsprüfung - 661 00:29:42,970 --> 00:29:43,460 Ein. 662 00:29:43,460 --> 00:29:45,780 Der Wert von b gleich 2 ist. 663 00:29:45,780 --> 00:29:48,470 Und der Wert von tmp ist ebenfalls ein. 664 00:29:48,470 --> 00:29:51,470 So, jetzt führe ich die Leitung 38. 665 00:29:51,470 --> 00:29:57,180 So dass, sobald die Leitung 38 ausgeführt wird, erfolgt eine vom Wert b. 666 00:29:57,180 --> 00:29:58,510 Und b war 2. 667 00:29:58,510 --> 00:30:00,500 So a ist jetzt 2. 668 00:30:00,500 --> 00:30:03,110 So an diesem Punkt in der Geschichte, a 2 ist, b 2, 669 00:30:03,110 --> 00:30:05,130 und tmp = 1 ist. 670 00:30:05,130 --> 00:30:09,330 So, jetzt logischerweise können wir nur plop tmp der Wert in b. 671 00:30:09,330 --> 00:30:10,690 Und wir sind fertig. 672 00:30:10,690 --> 00:30:12,170 >> So haben wir das Problem gelöst. 673 00:30:12,170 --> 00:30:16,040 Leider, wenn ich dieses Programm in dieser Form, ist es eigentlich nicht tauschen 674 00:30:16,040 --> 00:30:17,700 alle Werte. 675 00:30:17,700 --> 00:30:18,950 Aber klar zu sein, warum? 676 00:30:23,420 --> 00:30:26,310 Ich reparierte die logische Problem aus eben noch. 677 00:30:26,310 --> 00:30:31,150 Aber noch einmal, wenn ich dieses Programm ausführen, bleibt x und y am Ende unverändert 678 00:30:31,150 --> 00:30:33,834 der Ausführung des Programms. 679 00:30:33,834 --> 00:30:34,760 [Unverständlich] 680 00:30:34,760 --> 00:30:36,030 DAVID J. MALAN: So haben wir nichts zurückgegeben. 681 00:30:36,030 --> 00:30:36,960 Also das ist wahr. 682 00:30:36,960 --> 00:30:39,880 Aber es stellt sich heraus, es ist ein bisschen ein Problem hier, weil bisher die 683 00:30:39,880 --> 00:30:42,460 einzige, was wir in der Lage, wieder habe, ist eine Sache. 684 00:30:42,460 --> 00:30:46,540 Und dies ist eine Einschränkung von C. Sie nur zurückgeben kann wirklich ein Wert, 685 00:30:46,540 --> 00:30:48,970 In diesem Fall bin ich irgendwie stecken hier 686 00:30:48,970 --> 00:30:51,805 weil ich den neuen Wert von x zurückkehren konnten oder ich könnte wieder die 687 00:30:51,805 --> 00:30:53,160 neue Wert von y. 688 00:30:53,160 --> 00:30:54,330 Aber ich will beide zurück. 689 00:30:54,330 --> 00:30:58,010 So Rückgabe ist nicht die einfache Lösung. 690 00:30:58,010 --> 00:30:59,770 Aber das Problem grundlegend ist, warum? 691 00:30:59,770 --> 00:31:03,270 Was haben wir eigentlich vertauscht? 692 00:31:03,270 --> 00:31:04,010 a und b. 693 00:31:04,010 --> 00:31:07,670 Aber a und b sind Kopien von x und y, die wir gerade tat all dies bedeutet 694 00:31:07,670 --> 00:31:10,080 arbeiten - wir genauso wie 3 Minuten damit verbracht, über die Swap- 695 00:31:10,080 --> 00:31:11,680 Funktion und alle drei dieser Variablen. 696 00:31:11,680 --> 00:31:15,090 Und das ist großartig, vollkommen richtig isoliert. 697 00:31:15,090 --> 00:31:20,230 Aber a und b der Anwendungsbereich nur in diesen Zeilen hier. 698 00:31:20,230 --> 00:31:24,130 So wie eine for-Schleife, wenn Sie erklären, eine ganze Zahl i innerhalb der für 699 00:31:24,130 --> 00:31:27,400 loop - ähnlich, wenn Sie erklären sind a und b innerhalb einer Funktion, dass 700 00:31:27,400 --> 00:31:30,550 Sie geschrieben haben, sind sie nur gültig innerhalb dieser Funktion. 701 00:31:30,550 --> 00:31:35,020 Das bedeutet, sobald Swap getan ausgeführt wird, und wir gehen von der Linie 24 bis 702 00:31:35,020 --> 00:31:38,380 Zeile 25, x und y sind nicht an allen geändert. 703 00:31:38,380 --> 00:31:42,580 Sie einfach verschwendet eine Menge Zeit Swapping Kopien von Variablen. 704 00:31:42,580 --> 00:31:46,490 >> So stellt sich heraus, dass die Lösung für dieses Problem ist eigentlich nicht offensichtlich. 705 00:31:46,490 --> 00:31:49,210 Es ist nicht ganz ausreichend, um Werte zurückgeben, denn wir können 706 00:31:49,210 --> 00:31:50,320 nur einen Wert zurückgeben. 707 00:31:50,320 --> 00:31:53,370 Und ich will wirklich, sowohl x und y zur gleichen Zeit zu tauschen. 708 00:31:53,370 --> 00:31:55,020 Also werden wir kommen darauf zurück. 709 00:31:55,020 --> 00:31:58,770 Aber jetzt erkennen, dass das Problem grundsätzlich ergibt sich aus der Tatsache, 710 00:31:58,770 --> 00:32:00,660 daß a und b sind Kopien. 711 00:32:00,660 --> 00:32:03,450 Und sie sind in ihren eigenen Anwendungsbereich. 712 00:32:03,450 --> 00:32:04,980 Nun, lasst uns versuchen, diese in irgendeiner Weise zu lösen. 713 00:32:04,980 --> 00:32:09,200 Lassen Sie mich eigentlich blättern hierher zurück und eröffnen, sagen wir, eine vierte Variante 714 00:32:09,200 --> 00:32:11,170 Aus diesem buggy4. 715 00:32:11,170 --> 00:32:13,230 Und was ist das? 716 00:32:13,230 --> 00:32:16,690 Dies ist eine ähnliche, aber einfacheres Problem zu betrachten, bevor wir einen Stich nehmen 717 00:32:16,690 --> 00:32:17,530 es zu lösen. 718 00:32:17,530 --> 00:32:19,440 Dieses Programm heißt Inkrement. 719 00:32:19,440 --> 00:32:24,320 Und es scheint initialisiert eine x Ganzzahl 1 in Zeile 18. 720 00:32:24,320 --> 00:32:25,950 Ich dann zu behaupten, x 1 ist. 721 00:32:25,950 --> 00:32:28,020 Ich dann zu behaupten, Inkrementieren, Punkt, Punkt, Punkt. 722 00:32:28,020 --> 00:32:29,460 Dann rufe ich Inkrement. 723 00:32:29,460 --> 00:32:33,480 Aber dann in den Zeilen 22 und 23, behaupte ich es gewesen ist erhöht. 724 00:32:33,480 --> 00:32:37,780 Ich behaupte x ist nun, was es ist, 2 vermutlich. 725 00:32:37,780 --> 00:32:39,770 >> Aber dieses Programm ist fehlerhaft. 726 00:32:39,770 --> 00:32:41,020 Was ist das Problem? 727 00:32:43,450 --> 00:32:44,418 Yeah? 728 00:32:44,418 --> 00:32:45,668 [Unverständlich] 729 00:32:49,260 --> 00:32:49,850 DAVID J. MALAN: Genau. 730 00:32:49,850 --> 00:32:52,430 So x wurde offensichtlich auf Linie 18 erklärt. 731 00:32:52,430 --> 00:32:54,410 Das ist in geschweiften Klammern Main. 732 00:32:54,410 --> 00:32:58,470 So die einfache Antwort ist, dass, na ja, x hier existiert. 733 00:32:58,470 --> 00:33:01,510 Es ist nicht in Leitung 32 abgegeben. 734 00:33:01,510 --> 00:33:03,710 Also das Programm tatsächlich nicht einmal kompilieren. 735 00:33:03,710 --> 00:33:07,910 Der Compiler, wenn ich kompilieren diesen Code auszuprobieren, wird schreien mich an 736 00:33:07,910 --> 00:33:13,190 über einige Schwarzarbeit Kennung oder etwas in diesem Sinne. 737 00:33:13,190 --> 00:33:13,870 In der Tat, lasst uns versuchen. 738 00:33:13,870 --> 00:33:15,235 Dies ist zu buggy4. 739 00:33:17,780 --> 00:33:18,190 Da ist es. 740 00:33:18,190 --> 00:33:22,030 Verwendung von nicht deklarierter Bezeichner x in Zeile 32. 741 00:33:22,030 --> 00:33:25,700 Und tatsächlich, wir deutlicher sein heute hier, so dass diese nützlich ist 742 00:33:25,700 --> 00:33:27,140 Bürozeiten und zu Hause. 743 00:33:27,140 --> 00:33:29,000 Beachten Sie, dass es ein wenig kryptisch geschrieben ist. 744 00:33:29,000 --> 00:33:31,560 Aber die Tatsache, dass Clang hat schrie uns an, sagen 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, tatsächlich nützlich ist. 746 00:33:36,970 --> 00:33:41,970 Es bedeutet, dass der Fehler in Zeile 32 an Zeichenposition fünf ist. 747 00:33:41,970 --> 00:33:44,670 So ein, zwei, drei, vier, fünf. 748 00:33:44,670 --> 00:33:46,640 Das ist in der Tat, wo das Problem liegt. 749 00:33:46,640 --> 00:33:49,710 Und auch im Auge zu Bürozeiten und zu Hause zu halten, bin ich glücklich hier. 750 00:33:49,710 --> 00:33:50,740 Ich habe ein Fehler. 751 00:33:50,740 --> 00:33:52,660 Es wird relativ einfach zu beheben. 752 00:33:52,660 --> 00:33:56,220 Aber wenn man einen ganzen Bildschirm voller überwältigender Fehlermeldungen wieder 753 00:33:56,220 --> 00:33:59,240 erkennen, dass die unterste ein vielleicht nur symptomatisch 754 00:33:59,240 --> 00:34:00,320 die obersten diejenigen. 755 00:34:00,320 --> 00:34:03,560 Also immer jagen Ihre Fehler von oben nach unten. 756 00:34:03,560 --> 00:34:06,720 Weil es vielleicht nur eine Daisy-Chain-Effekt, was darauf hindeutet, Sie ist sein 757 00:34:06,720 --> 00:34:09,030 haben viel mehr Probleme, als Sie tatsächlich tun. 758 00:34:09,030 --> 00:34:14,989 >> Also, wie können wir dieses Problem beheben, wenn mein Ziel ist es, x erhöhen? 759 00:34:14,989 --> 00:34:15,370 Was ist das? 760 00:34:15,370 --> 00:34:15,620 Okay. 761 00:34:15,620 --> 00:34:16,679 So können wir x global. 762 00:34:16,679 --> 00:34:18,860 Nehmen wir die Verknüpfung, die ich früher gewarnt. 763 00:34:18,860 --> 00:34:20,550 Aber was solls, wir brauchen nur eine schnelle Lösung. 764 00:34:20,550 --> 00:34:23,949 Also lassen Sie uns einfach sagen, int x hier oben. 765 00:34:23,949 --> 00:34:25,600 Das macht x global. 766 00:34:25,600 --> 00:34:28,460 So, jetzt Haupt Zugriff darauf hat. 767 00:34:28,460 --> 00:34:31,780 Und Inkrement Zugriff darauf hat. 768 00:34:31,780 --> 00:34:33,860 Und so lassen Sie mich gehen Sie vor und übersetzen Sie dies jetzt. 769 00:34:33,860 --> 00:34:36,330 Machen buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Scheint jetzt zu kompilieren. 771 00:34:37,440 --> 00:34:40,949 Laufen wir buggy4, und es scheint zu funktionieren. 772 00:34:40,949 --> 00:34:42,780 Nun ist dies eines dieser Dinge - 773 00:34:42,780 --> 00:34:45,870 was ich sage, nicht was ich tue, wie ich gerade gemacht habe hier. 774 00:34:45,870 --> 00:34:49,239 Denn in der Regel werden unsere Programme gehen, um viel interessanter und 775 00:34:49,239 --> 00:34:50,440 wesentlich länger als dieser. 776 00:34:50,440 --> 00:34:53,199 Und wenn Sie Ihre Lösung an die Probleme des Lebens ist einfach ah, setzen alle 777 00:34:53,199 --> 00:34:57,550 Variablen am Anfang der Datei, sehr schnell tun Programme erhalten 778 00:34:57,550 --> 00:34:59,700 horrifically schwer zu verwalten. 779 00:34:59,700 --> 00:35:02,050 Es wird noch schwieriger, zu denken, neue Variablennamen. 780 00:35:02,050 --> 00:35:05,240 Es wird noch schwieriger zu verstehen, was variable was tut. 781 00:35:05,240 --> 00:35:08,250 >> Und so in der Regel ist dies keine gute Lösung. 782 00:35:08,250 --> 00:35:09,780 Also lasst uns das besser. 783 00:35:09,780 --> 00:35:11,920 Wir wollen nicht um eine globale Variable hier verwenden. 784 00:35:11,920 --> 00:35:14,050 Ich möchte x erhöhen. 785 00:35:14,050 --> 00:35:16,050 So konnte ich natürlich - 786 00:35:16,050 --> 00:35:18,450 am Ende des Tages, es ist irgendwie eine dumme Geschichte, weil wir genau dies. 787 00:35:18,450 --> 00:35:22,050 Aber wenn ich nicht zu diesem Betreiber kannte, oder ich war nicht erlaubt 788 00:35:22,050 --> 00:35:27,700 ändern Sie es in Haupt selbst, wie könnte ich sonst noch umzusetzen Ken hier rüber, diese 789 00:35:27,700 --> 00:35:31,450 Zeit nicht zu cube, sondern zu erhöhen? 790 00:35:31,450 --> 00:35:32,700 Wie ändere ich das Ding hier? 791 00:35:32,700 --> 00:35:33,025 Yeah. 792 00:35:33,025 --> 00:35:34,275 [Unverständlich] 793 00:35:37,430 --> 00:35:38,000 DAVID J. MALAN: Okay, gut. 794 00:35:38,000 --> 00:35:40,490 Also, warum nicht ich in x passieren? 795 00:35:40,490 --> 00:35:44,390 Und dann, anstatt zurückgeben, warum ich nicht einfach tun return x + 1? 796 00:35:44,390 --> 00:35:46,370 Jetzt haben ein paar mehr Dinge zu ändern. 797 00:35:46,370 --> 00:35:47,530 Ich bin auf dem richtigen Weg. 798 00:35:47,530 --> 00:35:48,910 Was muss ich sonst noch zu optimieren? 799 00:35:48,910 --> 00:35:49,470 Jemand anderes. 800 00:35:49,470 --> 00:35:49,882 Yeah? 801 00:35:49,882 --> 00:35:51,530 [Unverständlich] 802 00:35:51,530 --> 00:35:53,520 DAVID J. MALAN: Ich muss den Rückgabetyp Inkrement ändern 803 00:35:53,520 --> 00:35:54,590 weil es nicht erlischt. 804 00:35:54,590 --> 00:35:56,650 Void bedeutet nichts ist zurückgekehrt. 805 00:35:56,650 --> 00:35:57,600 Aber klar, jetzt ist es. 806 00:35:57,600 --> 00:36:01,280 So dies geändert werden muss, um int konsistent zu sein mit dem, was 807 00:36:01,280 --> 00:36:02,580 Ich bin eigentlich zurückkehren. 808 00:36:02,580 --> 00:36:04,580 >> Jetzt etwas anderes ist noch buggy hier. 809 00:36:04,580 --> 00:36:04,982 Yeah? 810 00:36:04,982 --> 00:36:06,590 [Unverständlich] 811 00:36:06,590 --> 00:36:07,630 DAVID J. MALAN: So ich x erhöhen müssen? 812 00:36:07,630 --> 00:36:10,336 [Unverständlich] 813 00:36:10,336 --> 00:36:11,880 DAVID J. MALAN: Ah, also muss ich x passieren. 814 00:36:11,880 --> 00:36:13,300 Also muss ich das hier tun. 815 00:36:17,590 --> 00:36:19,690 So der Prototyp, ich habe dies zu ändern hier oben. 816 00:36:19,690 --> 00:36:21,290 Also das muss ein int geworden. 817 00:36:21,290 --> 00:36:22,820 Dies hat zu werden - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Ich habe eigentlich einen Fehler hier unten. 820 00:36:24,710 --> 00:36:25,780 Lassen Sie dieses Problem beheben ein erster. 821 00:36:25,780 --> 00:36:27,990 Was soll das eigentlich sein? 822 00:36:27,990 --> 00:36:29,330 So es muss ein int etwas sein. 823 00:36:29,330 --> 00:36:30,340 Es könnte x. 824 00:36:30,340 --> 00:36:33,120 Aber ehrlich gesagt, wenn Sie anrufen allen Ihren Variablen x zu starten, es geht um 825 00:36:33,120 --> 00:36:35,250 weniger klar, was was ist. 826 00:36:35,250 --> 00:36:38,210 So lasst uns einfach beliebig wählen eine andere Namenskonvention für meine 827 00:36:38,210 --> 00:36:40,220 Hilfsfunktionen, die Funktionen ich schreibe. 828 00:36:40,220 --> 00:36:41,100 Wir nennen es ein. 829 00:36:41,100 --> 00:36:44,500 Oder wir könnten es nennen - nennen wir es even_number werden noch deutlicher. 830 00:36:44,500 --> 00:36:47,610 So dann habe ich wieder was die Zahl plus 1 ist. 831 00:36:47,610 --> 00:36:49,720 Und jetzt habe ich eine andere Sache verändern hier und ein 832 00:36:49,720 --> 00:36:50,700 andere Sache hier. 833 00:36:50,700 --> 00:36:54,150 Was muss ich auf Linie 21 zuerst ändern? 834 00:36:54,150 --> 00:36:55,390 Ich habe es x zuweisen. 835 00:36:55,390 --> 00:36:57,480 Ich kann also nicht einfach anrufen Inkrement x. 836 00:36:57,480 --> 00:37:01,000 Ich brauche die Antwort, indem der Wert von x auf Speichern 837 00:37:01,000 --> 00:37:02,020 die linke Seite. 838 00:37:02,020 --> 00:37:04,930 Und obwohl x ist jetzt auf der linken Seite und rechts, das ist völlig in Ordnung, weil 839 00:37:04,930 --> 00:37:08,370 die rechte Seite wird zuerst ausgeführt dann wird in die linke plumpste 840 00:37:08,370 --> 00:37:10,240 Hand Sache, x in diesem Fall. 841 00:37:10,240 --> 00:37:11,900 Und dann endlich, ist dies eine einfache Lösung jetzt. 842 00:37:11,900 --> 00:37:15,080 Dies sollte nur entsprechen, was ist unten. 843 00:37:15,080 --> 00:37:17,120 Int-Nummer. 844 00:37:17,120 --> 00:37:17,320 >> Gut. 845 00:37:17,320 --> 00:37:20,290 So eine ganze Reihe von Änderungen für eine wirklich dumme Funktion. 846 00:37:20,290 --> 00:37:24,250 Aber Vertreter der Dinge, die wir wollen immer werde zu tun. 847 00:37:24,250 --> 00:37:25,490 So machen buggy4. 848 00:37:25,490 --> 00:37:26,485 Ich habe irgendwo geschraubt. 849 00:37:26,485 --> 00:37:27,520 Oh mein Gott. 850 00:37:27,520 --> 00:37:29,660 Fünf Fehler in, wie, ein sechs-Programm. 851 00:37:29,660 --> 00:37:36,500 Also, was ist falsch in Zeile 18 Zeichen 5? 852 00:37:36,500 --> 00:37:36,970 Gut. 853 00:37:36,970 --> 00:37:39,330 Also muss ich diese int deklarieren. 854 00:37:39,330 --> 00:37:39,630 Gut. 855 00:37:39,630 --> 00:37:41,790 Also mal sehen, eine ganze Reihe von anderen Fehlern. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Aber noch einmal, lasst uns einfach den Bildschirm - 859 00:37:46,020 --> 00:37:48,660 Steuerung L hier - und re-run Clang. 860 00:37:48,660 --> 00:37:51,340 So fünf Probleme ist eigentlich nur, dass man. 861 00:37:51,340 --> 00:37:53,500 So, jetzt lasst uns laufen buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Puh. 863 00:37:54,150 --> 00:37:57,434 x wurde korrekt erhöht. 864 00:37:57,434 --> 00:37:58,420 >> Gut. 865 00:37:58,420 --> 00:38:01,700 Fragen, wie die Zahlen erhöhen? 866 00:38:01,700 --> 00:38:02,896 Yeah? 867 00:38:02,896 --> 00:38:06,864 Sprecher 2: Warum ist es, dass man nur ändern, x die Nummer in der Variablen 868 00:38:06,864 --> 00:38:08,860 nennen und es wird wissen, was du meinst? 869 00:38:08,860 --> 00:38:09,600 DAVID J. MALAN: Gute Frage. 870 00:38:09,600 --> 00:38:13,130 Wie kommt es, dass ich nur ändern x Anzahl und weiß das Programm, 871 00:38:13,130 --> 00:38:13,990 sofort? 872 00:38:13,990 --> 00:38:16,120 Also noch einmal, daran zu denken, wie diese Abstraktion. 873 00:38:16,120 --> 00:38:20,110 Also, wenn ich Haupt und bin Ken ist inkrementell, ehrlich gesagt, es ist mir egal 874 00:38:20,110 --> 00:38:21,540 was Ken nennt seine iPad. 875 00:38:21,540 --> 00:38:25,350 Es ist mir egal, was er alles, was mit seiner Umsetzung zu tun hat ruft 876 00:38:25,350 --> 00:38:26,550 dieser Funktionalität. 877 00:38:26,550 --> 00:38:32,130 Also das ist eine Implementierung Detail, dass ich, Haupt-, nicht 878 00:38:32,130 --> 00:38:33,010 haben zu kümmern. 879 00:38:33,010 --> 00:38:37,440 Und so einfach ändern konsequent im Inneren der Funktion Nummer hier 880 00:38:37,440 --> 00:38:41,340 und Nummer hier ist alles was man braucht, so lange ich neu kompilieren. 881 00:38:41,340 --> 00:38:43,820 Es ist eine Art, wie wenn man darüber nachdenkt - viele von uns, die von Ihnen mit Fahrer 882 00:38:43,820 --> 00:38:46,590 Lizenzen, die getrieben haben oder wenn Sie selbst in einem Auto gefahren - 883 00:38:46,590 --> 00:38:50,710 die meisten von uns haben keine Ahnung, wie ein Auto unter der Haube arbeitet. 884 00:38:50,710 --> 00:38:54,710 Und wörtlich, wenn Sie die Haube, die meisten von uns zu öffnen - mich eingeschlossen - 885 00:38:54,710 --> 00:38:56,580 sind nicht wirklich wissen, was wir gerade sehen. 886 00:38:56,580 --> 00:38:58,850 Art, wie Sie vielleicht mit Sachen wie dieses Recht jetzt fühlen. 887 00:38:58,850 --> 00:39:01,380 Aber wir haben nicht wirklich zu interessieren, wie das Auto funktioniert. 888 00:39:01,380 --> 00:39:05,000 Wir haben nicht zu kümmern, was alle Stangen und Kolben und Kabel im Inneren des 889 00:39:05,000 --> 00:39:07,700 das Auto tatsächlich tun. 890 00:39:07,700 --> 00:39:11,360 >> So etwas wie, was Sie nennen sich der Kolben keine Rolle 891 00:39:11,360 --> 00:39:11,920 Hier in diesem Fall. 892 00:39:11,920 --> 00:39:12,490 Gleiche Idee. 893 00:39:12,490 --> 00:39:12,670 Yeah? 894 00:39:12,670 --> 00:39:13,920 [Unverständlich] 895 00:39:25,250 --> 00:39:29,530 DAVID J. MALAN: Wenn es mehrere Verwendungen der variable xa vorhin, 896 00:39:29,530 --> 00:39:32,220 Sie als Programmierer, müsste sie überall zu ändern. 897 00:39:32,220 --> 00:39:35,230 Oder Sie könnten buchstäblich Datei, Menü und dann auf Suchen / Ersetzen, 898 00:39:35,230 --> 00:39:36,270 so ähnlich. 899 00:39:36,270 --> 00:39:40,110 Aber Sie gehen zu müssen, damit die Änderungen sich. 900 00:39:40,110 --> 00:39:41,200 Sie müssen konsequent sein. 901 00:39:41,200 --> 00:39:42,450 [Unverständlich] 902 00:39:47,200 --> 00:39:48,960 DAVID J. MALAN: Eine bestimmte Reihenfolge wie hier? 903 00:39:48,960 --> 00:39:52,660 Wenn dies int andere Nummer? 904 00:39:52,660 --> 00:39:52,940 Yeah. 905 00:39:52,940 --> 00:39:56,430 So um es ankommt, wenn Sie den Aufruf der Funktion sind. 906 00:39:56,430 --> 00:40:00,350 Also, wenn ich riefen Inkrement hier mit etwas Komma etwas, 907 00:40:00,350 --> 00:40:01,400 gibt es eine direkte Zuordnung. 908 00:40:01,400 --> 00:40:04,490 Die erste Variable, was es heißt, wird eine Kopie des ersten gemacht 909 00:40:04,490 --> 00:40:05,480 Streit über hier. 910 00:40:05,480 --> 00:40:07,280 Leider sollte dies nicht eine Klammer sein. 911 00:40:07,280 --> 00:40:09,300 Das zweite Argument einer Linie mit dem zweiten. 912 00:40:09,300 --> 00:40:11,220 >> So Ordnung, ja, Angelegenheiten. 913 00:40:11,220 --> 00:40:11,490 Gut. 914 00:40:11,490 --> 00:40:13,360 Leider machte ich einen langen Weg dorthin. 915 00:40:13,360 --> 00:40:14,610 Weitere Fragen? 916 00:40:16,460 --> 00:40:16,850 Gut. 917 00:40:16,850 --> 00:40:20,300 Also lasst uns sehen, ob wir nicht ein Bild malen, was ist eigentlich los 918 00:40:20,300 --> 00:40:22,160 hier unter der Haube, so zu sprechen. 919 00:40:22,160 --> 00:40:26,310 Also das ist ein Rechteck, das den Arbeitsspeicher Ihres Computers darstellen könnten. 920 00:40:26,310 --> 00:40:31,240 Also selbst wenn Sie keine Ahnung haben, wie das Gedächtnis funktioniert oder wie RAM funktioniert, zumindest 921 00:40:31,240 --> 00:40:33,590 annehmen, dass Sie Bündel es in diesen Tagen haben. 922 00:40:33,590 --> 00:40:34,740 Du hast Megabyte es. 923 00:40:34,740 --> 00:40:35,760 Du hast Gigabyte davon. 924 00:40:35,760 --> 00:40:40,690 Und wir wissen aus Woche null, dass ein Byte genau das, was ist? 925 00:40:40,690 --> 00:40:41,280 8 Bits. 926 00:40:41,280 --> 00:40:42,730 Richtig, also 8 Nullen und Einsen. 927 00:40:42,730 --> 00:40:46,300 Also, wenn Ihr Computer verfügt über einen Gig RAM, zwei GB RAM in diesen Tagen haben Sie ein 928 00:40:46,300 --> 00:40:54,450 Milliarden oder 2 Milliarden Byte Speicher oder rund 8 Milliarden oder 16 Milliarden 929 00:40:54,450 --> 00:40:56,560 Bits, im Inneren des Computers. 930 00:40:56,560 --> 00:40:59,710 Nun im Gegensatz zu den kleinen Woolly Willy Beispiel ist es nicht magnetischen Partikeln 931 00:40:59,710 --> 00:41:00,560 typischerweise mehr. 932 00:41:00,560 --> 00:41:04,470 Zunehmend in Laptops zumindest ist es Solid State Drives, SSDs, dass 933 00:41:04,470 --> 00:41:05,560 nur haben keine beweglichen Teile. 934 00:41:05,560 --> 00:41:06,710 Es ist alles elektronisch. 935 00:41:06,710 --> 00:41:08,070 Es ist alles Strom. 936 00:41:08,070 --> 00:41:12,360 So denke aber, dieses Rechtecks ​​als nur die die ein oder zwei 937 00:41:12,360 --> 00:41:13,930 Gigabyte Speicher, die Sie haben. 938 00:41:13,930 --> 00:41:15,500 >> Es ist also ein Stück Erinnerung. 939 00:41:15,500 --> 00:41:20,460 Nun ist die Welt der Informatik hat Art abgetrennten Stücke 940 00:41:20,460 --> 00:41:22,570 Speicher verschiedene Dinge tun. 941 00:41:22,570 --> 00:41:25,930 So zum Beispiel, wenn dies den Arbeitsspeicher des Computers - wie die vorgeschlagene 942 00:41:25,930 --> 00:41:30,400 Rechteck gibt - stellt sich heraus, dass durch Konvention, an der Spitze des RAM, so 943 00:41:30,400 --> 00:41:33,170 zu sprechen, ist in der Regel eine so genannte Text-Segment. 944 00:41:33,170 --> 00:41:35,910 Das sind die Nullen und Einsen, dass Sie zusammengestellt haben. 945 00:41:35,910 --> 00:41:39,040 Also, wenn wir unter der Haube, was a.out ist sah, alle 946 00:41:39,040 --> 00:41:40,360 die Nullen und Einsen - 947 00:41:40,360 --> 00:41:44,000 wenn Sie ein Programm ausführen, werden diese Nullen und Einsen von Ihrer Festplatte geladen 948 00:41:44,000 --> 00:41:46,290 Laufwerk in etwas namens RAM. 949 00:41:46,290 --> 00:41:48,950 Und im RAM, sind sie ganz nach oben setzen. 950 00:41:48,950 --> 00:41:50,330 Jetzt Inzwischen haben Sie andere Dinge. 951 00:41:50,330 --> 00:41:53,060 Initialisierte Daten, initialisierte Daten. 952 00:41:53,060 --> 00:41:56,440 Diese beiden Schwaden von Speicher beziehen sich auf globale Variablen, die 953 00:41:56,440 --> 00:41:57,530 Sie nicht oft verwenden. 954 00:41:57,530 --> 00:42:00,630 Aber manchmal, wenn Sie das tun, dann landen sie dort als gut. 955 00:42:00,630 --> 00:42:01,620 Dann gibt es noch einige andere Sachen. 956 00:42:01,620 --> 00:42:04,130 Umgebungsvariablen, die wir nicht viel Zeit auf wird. 957 00:42:04,130 --> 00:42:06,120 Aber dann zwei wichtige Dinge, die kommen wieder in diesem 958 00:42:06,120 --> 00:42:08,130 Semester, Stack und Heap. 959 00:42:08,130 --> 00:42:12,280 >> So sind die meisten der Arbeitsspeicher Ihres Computers ist reserviert, wenn ein Programm für 960 00:42:12,280 --> 00:42:14,880 etwas namens den Stapel und etwas namens den Haufen. 961 00:42:14,880 --> 00:42:16,940 Und wir werden nicht über den Haufen sprechen heute, aber wir werden 962 00:42:16,940 --> 00:42:18,180 reden über den Stapel. 963 00:42:18,180 --> 00:42:22,910 Und der Stapel soll zaubern die visuelle sind wie der Speisesaal 964 00:42:22,910 --> 00:42:26,120 Menüschalen in Mather House, oder wo auch immer Sie sich gerade befinden, wo die 965 00:42:26,120 --> 00:42:27,810 Speisesaal Personal reinigen sie jeden Tag. 966 00:42:27,810 --> 00:42:30,180 Sie stapeln sich vom Boden aufwärts. 967 00:42:30,180 --> 00:42:33,800 Und ähnlich in Erinnerung, da ist diese Idee, etwas auf eine 968 00:42:33,800 --> 00:42:36,740 stapeln, indem etwas auf einem Stapel, legt etwas auf einem Stapel. 969 00:42:36,740 --> 00:42:38,000 Und was machen wir damit? 970 00:42:38,000 --> 00:42:41,430 Nun, lassen Sie es zu vergrößern nur auf der unteren Hälfte des Bildes, des Computers 971 00:42:41,430 --> 00:42:43,990 RAM, folgendes vorzuschlagen. 972 00:42:43,990 --> 00:42:48,300 Es stellt sich heraus, dass, wenn Sie ein Programm wie a.out auszuführen oder hallo, was auch immer 973 00:42:48,300 --> 00:42:49,920 das Programm ist, dass du geschrieben hast, 974 00:42:49,920 --> 00:42:53,030 wieder, werden diese Nullen und Einsen von Ihrer Festplatte geladen - und das ist 975 00:42:53,030 --> 00:42:56,190 Langzeitlagerung, bleibt dort, selbst wenn Sie den Stecker ziehen - 976 00:42:56,190 --> 00:42:57,220 geladen in den Arbeitsspeicher. 977 00:42:57,220 --> 00:42:59,020 RAM ist schneller als Festplatten. 978 00:42:59,020 --> 00:43:00,700 Er ist kleiner als Festplatten. 979 00:43:00,700 --> 00:43:03,490 Aber es ist, wo Programme während Sie sie sehen leben. 980 00:43:03,490 --> 00:43:06,380 >> So Doppelklick auf ein Programm auf einem Mac oder einem PC - es ist aus geladenen 981 00:43:06,380 --> 00:43:07,750 Festplatte in den Arbeitsspeicher. 982 00:43:07,750 --> 00:43:11,760 Sobald es in den Arbeitsspeicher geladen ist, gehen die Nullen und Einsen auf dem Weg oben, die 983 00:43:11,760 --> 00:43:13,130 sogenannte Text-Segment. 984 00:43:13,130 --> 00:43:17,040 Aber dann, sobald Ihr Programm tatsächlich beginnt zu laufen, die wichtigsten 985 00:43:17,040 --> 00:43:18,140 Funktion aufgerufen wird. 986 00:43:18,140 --> 00:43:21,070 Und die wichtigsten, wie wir gesehen haben, hat oft lokale Variablen. 987 00:43:21,070 --> 00:43:24,560 Und es hat ints und Streicher und Saiblinge und dergleichen. 988 00:43:24,560 --> 00:43:28,300 Also, wenn Ihr Programm, das Sie geschrieben haben oder das Programm, das Sie 989 00:43:28,300 --> 00:43:33,680 doppelgeklickt verwendet einige Variablen innerhalb von Haupt-, landen sie an der 990 00:43:33,680 --> 00:43:37,020 Unterseite des Stapel-Speicher, so zu sprechen. 991 00:43:37,020 --> 00:43:39,160 Jetzt konkret, was bedeutet das eigentlich? 992 00:43:39,160 --> 00:43:44,080 Dies bedeutet nur, dass, wenn wir wollten die Dinge Nummer - 993 00:43:44,080 --> 00:43:49,380 wenn wir wollten Anzahl der Bytes des RAM in Ihrem Computer feststellen, dass 994 00:43:49,380 --> 00:43:51,650 dies könnte Byte-Zahl Null. 995 00:43:51,650 --> 00:43:56,130 Dies könnte Byte Nummer eins, zwei, drei, vier, fünf, sechs, alle sein 996 00:43:56,130 --> 00:43:57,290 Weg bis zu wollen - 997 00:43:57,290 --> 00:44:01,520 2 Milliarden würden den ganzen Weg bis es an der Spitze zu sein. 998 00:44:01,520 --> 00:44:05,960 Also mit anderen Worten, wenn wir über RAM oder Speicher sprechen von Bytes, es 999 00:44:05,960 --> 00:44:09,680 bedeutet nur, dass jemand entschieden hat, was jeder der Anzahl 1000 00:44:09,680 --> 00:44:11,110 diese Einheiten des Speichers. 1001 00:44:11,110 --> 00:44:16,950 >> Also, wenn Sie 32 Bits für einen int benötigen, oder Sie müssen 8 Bits für ein char, wo 1002 00:44:16,950 --> 00:44:18,320 sie am Ende in Erinnerung? 1003 00:44:18,320 --> 00:44:20,650 Nun konzeptionell, sie nur am Ende auf den Grund 1004 00:44:20,650 --> 00:44:21,780 Ding namens den Stapel. 1005 00:44:21,780 --> 00:44:25,670 Aber was ist interessant ist jetzt, wenn der Haupt ruft eine Funktion. 1006 00:44:25,670 --> 00:44:28,830 Angenommen, eine Funktion namens foo, nur ein beliebiger Name. 1007 00:44:28,830 --> 00:44:32,480 Was passiert, ist wichtigsten ist an der Unterseite dieses Stapels an Speicher. 1008 00:44:32,480 --> 00:44:35,630 Foo nun an der Spitze der wichtigsten in Speicher abgelegt. 1009 00:44:35,630 --> 00:44:40,020 Also keine lokalen Variablen, die foo hat am Ende eine Art konzeptionell oben 1010 00:44:40,020 --> 00:44:40,770 die in main. 1011 00:44:40,770 --> 00:44:46,920 Wenn foo ruft eine andere Funktion aufgerufen bar, enden diese Variablen hier oben. 1012 00:44:46,920 --> 00:44:49,790 Wenn bar fordert etwas anderes, hier, hier, hier. 1013 00:44:49,790 --> 00:44:53,900 Also, was ist interessant über ein Programm ist, dass, wie Sie Funktionen aufrufen, 1014 00:44:53,900 --> 00:44:57,720 und als diese Funktionen aufrufen Funktionen und wie diese Funktionen aufrufen Funktionen 1015 00:44:57,720 --> 00:45:00,980 Sie bauen diese Stapel von Funktionen im Speicher. 1016 00:45:00,980 --> 00:45:06,740 Und nur einmal eine Funktion zurück, müssen Sie anfangen, diese Erinnerung zurück. 1017 00:45:06,740 --> 00:45:11,190 So ist eine der einfachsten Möglichkeiten, um über genügend Arbeitsspeicher ausgeführt in einem Computerprogramm ist 1018 00:45:11,190 --> 00:45:14,170 Funktionen schreiben, die nie zurückkehren. 1019 00:45:14,170 --> 00:45:16,650 >> So zum Beispiel, lasst uns so viel zeigen, mit einem 1020 00:45:16,650 --> 00:45:18,460 absichtlich fehlerhaftes Programm. 1021 00:45:18,460 --> 00:45:24,690 Lassen Sie mich gehen Sie vor und nicht # include int main (void). 1022 00:45:24,690 --> 00:45:31,270 Und ich werde tun, während (2> 1), die wahrscheinlich nie werden 1023 00:45:31,270 --> 00:45:33,370 Änderungen auf uns. 1024 00:45:33,370 --> 00:45:37,720 Und lassen Sie mich gehen Sie jetzt und tun printf. 1025 00:45:37,720 --> 00:45:39,950 Eigentlich ist das sein wird visuell weniger interessant. 1026 00:45:39,950 --> 00:45:40,460 Lassen Sie uns dies tun. 1027 00:45:40,460 --> 00:45:44,840 Für int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Lassen Sie uns diesen Fehler, i + +. 1029 00:45:49,740 --> 00:45:51,150 Und lasst uns nicht printf hier. 1030 00:45:51,150 --> 00:45:52,550 Lasst uns praktizieren, was ich predige. 1031 00:45:52,550 --> 00:45:54,090 Lassen Sie uns hier eine Methode. 1032 00:45:54,090 --> 00:46:00,860 Void Chor, und wir int i sagen. 1033 00:46:00,860 --> 00:46:02,295 Und dann werde ich sagen, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, wir machen dies mehr interessant. 1035 00:46:06,790 --> 00:46:08,350 Lasst uns eigentlich nicht gedruckt überhaupt nichts. 1036 00:46:08,350 --> 00:46:10,530 Lass uns einfach tun. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Gut. 1039 00:46:17,000 --> 00:46:20,040 Also das ist buggy denn warum? 1040 00:46:20,040 --> 00:46:22,850 Ich mache dies auf, als ich gehen, weil das Programm nicht wirklich etwas tun 1041 00:46:22,850 --> 00:46:23,420 von Interesse. 1042 00:46:23,420 --> 00:46:24,670 Aber das ist nicht das Ziel. 1043 00:46:24,670 --> 00:46:30,440 Das Ziel ist es, ein Programm deren Hauptfunktion das tut, was offenbar zu schreiben? 1044 00:46:30,440 --> 00:46:31,370 Selbst aufrufen. 1045 00:46:31,370 --> 00:46:32,600 Und tatsächlich, wir brauchen nicht die Schleife. 1046 00:46:32,600 --> 00:46:36,070 Lasst uns einmal zu vereinfachen dies nur, um nicht aus den Augen zu verlieren, wirklich die 1047 00:46:36,070 --> 00:46:37,310 grundlegende Fehler. 1048 00:46:37,310 --> 00:46:39,200 Haupt-Anrufe Chorus etwas Chor singen. 1049 00:46:39,200 --> 00:46:41,760 Dann tat ich etwas dumm, und ich hatte Chorus Call Chor, weil ich davon ausgegangen, 1050 00:46:41,760 --> 00:46:43,550 jemand anderes würde es vielleicht zu implementieren. 1051 00:46:43,550 --> 00:46:45,960 Und nun dies wird nicht noch kompilieren. 1052 00:46:45,960 --> 00:46:48,340 Ich brauche was zu tun? 1053 00:46:48,340 --> 00:46:49,700 Ich brauche den Prototyp erinnern. 1054 00:46:49,700 --> 00:46:55,520 Also muss ich hier oben nichtig Chor (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> So, jetzt, wenn ich gehe hier unten - 1056 00:46:57,470 --> 00:46:59,030 Eigentlich verwenden wir das größere Fenster. 1057 00:46:59,030 --> 00:47:01,670 Lasst uns voran gehen und Chor. 1058 00:47:01,670 --> 00:47:06,000 Lasst uns voran gehen und Chor. 1059 00:47:06,000 --> 00:47:08,302 Verwenden von unbekannten Alleinspieler i. 1060 00:47:08,302 --> 00:47:09,860 Oh, das war dumm. 1061 00:47:09,860 --> 00:47:11,020 Wir brauchen nicht das Argument. 1062 00:47:11,020 --> 00:47:13,680 Lass uns einfach tun. 1063 00:47:13,680 --> 00:47:14,550 Wünschte, wir hätten auf diese Weise gestartet. 1064 00:47:14,550 --> 00:47:16,160 Es wäre viel einfacher Programm zu schreiben. 1065 00:47:16,160 --> 00:47:20,100 So gibt. 1066 00:47:20,100 --> 00:47:23,870 Jetzt gehen wir zu meinem Terminal-Fenster, re-run Clang. 1067 00:47:23,870 --> 00:47:26,900 Und hier gehen wir. 1068 00:47:26,900 --> 00:47:28,020 Das war wirklich schnell. 1069 00:47:28,020 --> 00:47:30,690 Was ist eigentlich gerade passiert, wenn? 1070 00:47:30,690 --> 00:47:33,430 Nun, jetzt werde ich den Druck Zeile hinzufügen, damit wir sehen können. 1071 00:47:33,430 --> 00:47:41,330 Also lassen Sie mich sagen, printf, sagen wir mal, ich bin hier. 1072 00:47:41,330 --> 00:47:43,470 Okay, keine Variablen, werden wir es so lassen. 1073 00:47:43,470 --> 00:47:44,860 Lassen Sie mich wieder zum Laufen zu bringen. 1074 00:47:44,860 --> 00:47:47,940 Lassen Sie mich re-run Chor. 1075 00:47:47,940 --> 00:47:51,235 Und komm schon. 1076 00:47:53,880 --> 00:47:55,130 Keep going. 1077 00:47:57,630 --> 00:47:59,750 Nebenbei, warum hat es nicht abgestürzt noch? 1078 00:47:59,750 --> 00:48:02,050 Die Segmentation Fault passiert super schnell vor. 1079 00:48:02,050 --> 00:48:04,250 [Unverständlich] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. MALAN: Genau. 1081 00:48:04,830 --> 00:48:06,350 So ist es braucht Zeit, um zu drucken. 1082 00:48:06,350 --> 00:48:08,370 Es dauert nur mehr Arbeit auf dem Computer-Teil. 1083 00:48:08,370 --> 00:48:09,550 Und da ist es. 1084 00:48:09,550 --> 00:48:10,620 Segmentation fault. 1085 00:48:10,620 --> 00:48:12,140 >> So bemerken, wie schnell Programme auszuführen. 1086 00:48:12,140 --> 00:48:14,110 Wenn Sie nicht drucken alles, super schnell. 1087 00:48:14,110 --> 00:48:18,100 Aber wir haben noch diese Segmentation Fault, weil, was geschah? 1088 00:48:18,100 --> 00:48:21,310 Nun, wenn Sie darüber nachdenken, wie den Arbeitsspeicher Ihres Computers gelegt wird, diese 1089 00:48:21,310 --> 00:48:22,890 passiert zu sein Haupt. 1090 00:48:22,890 --> 00:48:23,800 Aber hier - 1091 00:48:23,800 --> 00:48:28,670 lasst uns einfach nennen diesen Chor, und nennen wir diesen Chor. 1092 00:48:28,670 --> 00:48:33,420 Und jetzt, wenn ich meine Ästhetik richtig machen, wird diese gerade dabei, Chorus sagen, 1093 00:48:33,420 --> 00:48:38,060 Chor, Chor, Chor, Chor, Chor, Chor, bis zum Überdruss. 1094 00:48:38,060 --> 00:48:39,920 Und schließlich, was ist geschehen? 1095 00:48:39,920 --> 00:48:46,690 Wenn das große Bild wörtlich ist das, was gerade geschieht, konzeptionell? 1096 00:48:46,690 --> 00:48:48,320 Die Stacküberläufe der Haufen. 1097 00:48:48,320 --> 00:48:52,400 Oder schlimmer noch, man muss nur alles, einschließlich der Text-Segment, das ist überrannt 1098 00:48:52,400 --> 00:48:54,530 die Nullen und Einsen, die Ihr Programm vertreten. 1099 00:48:54,530 --> 00:48:56,690 Kurz gesagt, ist dies nur super, super schlecht. 1100 00:48:56,690 --> 00:48:56,860 Right? 1101 00:48:56,860 --> 00:48:58,620 Ihr Programm hat außer Kontrolle geraten. 1102 00:48:58,620 --> 00:49:02,840 Sie verwenden viel mehr Speicher, als Sie alle gedacht wegen eines läppischen 1103 00:49:02,840 --> 00:49:03,920 Fehler, in diesem Fall. 1104 00:49:03,920 --> 00:49:08,160 Oder in diesem Fall, ruft ein sehr bewusst getan Funktion selbst ist. 1105 00:49:08,160 --> 00:49:09,210 Nun ist dies nicht alles schlecht. 1106 00:49:09,210 --> 00:49:12,540 Funktionen, die sich selbst tatsächlich hat große Macht 1107 00:49:12,540 --> 00:49:13,700 wenn Sie es richtig ein. 1108 00:49:13,700 --> 00:49:15,650 Ich habe es nicht richtig eingesetzt sind. 1109 00:49:15,650 --> 00:49:16,940 >> Also das ist nicht alles schlecht. 1110 00:49:16,940 --> 00:49:20,620 Aber die Tatsache, dass ich eigentlich nie aufhören, mich selbst ist ein grundlegendes 1111 00:49:20,620 --> 00:49:23,050 Schwäche hier dieses Programms. 1112 00:49:23,050 --> 00:49:25,090 Also, wo gehen wir mit dieser ganzen Sache? 1113 00:49:25,090 --> 00:49:26,230 Nun, was ist wirklich passiert? 1114 00:49:26,230 --> 00:49:30,010 Als ich das Inkrement Funktion aufrufen, wie wir in diesen Beispielen zu tun, 1115 00:49:30,010 --> 00:49:33,290 Ich habe einen Wert wie 1, dass ich gehe in. 1116 00:49:33,290 --> 00:49:35,820 Ich gehe in eine Kopie der Nummer eins. 1117 00:49:35,820 --> 00:49:37,080 So geschieht folgendes. 1118 00:49:37,080 --> 00:49:40,390 Also lasst uns in die Schrittweite beispielsweise gehen. 1119 00:49:40,390 --> 00:49:44,230 Und dieser Kerl hier drüben. 1120 00:49:44,230 --> 00:49:46,800 Also hier ist was tatsächlich passiert. 1121 00:49:46,800 --> 00:49:50,770 Als ich anrief Inkrement, und ich gebe in x, bildlich, was 1122 00:49:50,770 --> 00:49:53,660 hier los ist - 1123 00:49:53,660 --> 00:50:00,240 wenn ich den Wert 1 gespeichert hier haben und ich eigentlich nennen Inkrement, das 1124 00:50:00,240 --> 00:50:02,680 wird nun Chorus genannt - 1125 00:50:02,680 --> 00:50:04,010 Ja, das ist warf mich hier ab. 1126 00:50:04,010 --> 00:50:06,750 So nennen wir diesen Zuwachs. 1127 00:50:06,750 --> 00:50:09,420 Und wir wissen nicht, was das nächste Funktion geht zu sein. 1128 00:50:09,420 --> 00:50:14,270 Also, was tatsächlich passiert ist hier irgendwo in main, habe ich ein Stück 1129 00:50:14,270 --> 00:50:16,670 Speicher, Speichern der Nummer 1 ist. 1130 00:50:16,670 --> 00:50:19,730 Wenn ich Inkrement nennen, bin ich mit einem anderen Stück Erinnerung, aber jetzt habe ich 1131 00:50:19,730 --> 00:50:20,840 haben die Kopie des 1. 1132 00:50:20,840 --> 00:50:25,480 Als ich diesen Wert zu erhöhen, wird das 2 - furchtbar auf die schriftliche 1133 00:50:25,480 --> 00:50:26,420 Bildschirm hier. 1134 00:50:26,420 --> 00:50:30,550 Aber dann, was passiert, sobald Inkrement zurückkehrt? 1135 00:50:30,550 --> 00:50:34,610 Dieser Speicher bekommt nur zurück an das Betriebssystem übergeben, was bedeutet, dass alle 1136 00:50:34,610 --> 00:50:37,470 Sie getan haben ist nichts nützlich. 1137 00:50:37,470 --> 00:50:43,460 Die eine, die ursprünglich in den wichtigsten enthielt noch wirklich da ist. 1138 00:50:43,460 --> 00:50:44,650 >> Also, wo gehen wir damit um? 1139 00:50:44,650 --> 00:50:49,400 Nun, es stellt sich heraus, dass im Speicher Sie diese zurück zu Folge wieder zu haben 1140 00:50:49,400 --> 00:50:50,940 Bytes, die Sie Zeug kann in. 1141 00:50:50,940 --> 00:50:53,760 Und es stellt sich heraus, dass wir schon etwas, bezieht mit gesehen 1142 00:50:53,760 --> 00:50:55,100 Dinge, die Rücken an Rücken an Rücken an Rücken. 1143 00:50:55,100 --> 00:51:00,170 Was ist ein String, am Wochenende ein und jetzt Woche zwei basiert? 1144 00:51:00,170 --> 00:51:01,840 So ist es nur eine Sammlung von Zeichen. 1145 00:51:01,840 --> 00:51:05,290 So stellt sich heraus, wie Sie können Nummern in den Speicher zu schreiben, ähnlich wie du kannst 1146 00:51:05,290 --> 00:51:06,900 setzen Zeichen im Speicher. 1147 00:51:06,900 --> 00:51:09,810 Und wenn wir damit beginnen, Zeichen im Speicher Rücken an Rücken an Rücken 1148 00:51:09,810 --> 00:51:12,800 zurück, stellt sich heraus, dass die Verwendung der einfachsten Dinge wie eine for-Schleife oder 1149 00:51:12,800 --> 00:51:14,510 eine while-Schleife, können wir durchlaufen - 1150 00:51:14,510 --> 00:51:17,130 von links nach rechts über die Zeichen in einem String - 1151 00:51:17,130 --> 00:51:20,720 und starten Sie massiert sie in verschiedene Charaktere überhaupt. 1152 00:51:20,720 --> 00:51:25,550 A könnte B. B könnte C. geworden, so dass letztlich sind wir ein kann 1153 00:51:25,550 --> 00:51:28,830 Englisch Satz, der tatsächlich Sinn macht und konvertieren jedes dieser 1154 00:51:28,830 --> 00:51:32,440 Briefe ein zu einer Zeit, zu Fuß durch unsere Computer-Speicher von links nach 1155 00:51:32,440 --> 00:51:34,300 Recht tatsächlich verschlüsseln. 1156 00:51:34,300 --> 00:51:36,590 >> So lasst uns unsere fünf Minuten Pause hier, und wenn wir zurück kommen, werden wir 1157 00:51:36,590 --> 00:51:39,060 beginnen diesen Prozess der Scrambling Informationen. 1158 00:51:41,640 --> 00:51:43,180 >> Gut. 1159 00:51:43,180 --> 00:51:48,440 Also, bevor wir tauchen in bis zu einem gewissen crypto und diese Dinge als Arrays, lassen Sie mich 1160 00:51:48,440 --> 00:51:51,610 Pause für alle Fragen, weil ich, wie ich Art wirklich verwirrt fühlen, einige 1161 00:51:51,610 --> 00:51:52,230 diese Themen. 1162 00:51:52,230 --> 00:51:53,940 Lassen Sie uns also fix jetzt, wenn wir können. 1163 00:51:53,940 --> 00:51:56,480 So haben wir gerade gesprochen haben Rückgabewerte. 1164 00:51:56,480 --> 00:51:58,630 Wir sprachen über Argumente. 1165 00:51:58,630 --> 00:52:02,330 Und wir sprachen über diese Vorstellung, die wir kommen zurück, um in den nächsten Wochen 1166 00:52:02,330 --> 00:52:07,140 kommen, der sich Speicher als eine ganze Reihe von diesen stacked 1167 00:52:07,140 --> 00:52:08,540 Tabletts, so zu sprechen. 1168 00:52:08,540 --> 00:52:13,460 Von unten an aufwärts, so dass jeder Boden, der auf den Stapel gelegt wird repräsentiert 1169 00:52:13,460 --> 00:52:15,160 Eine Funktion, die ist derzeit genannt. 1170 00:52:17,970 --> 00:52:20,300 Haben Sie Fragen? 1171 00:52:20,300 --> 00:52:22,890 So wie über - lassen Sie mich versuchen eine Frage zu stellen. 1172 00:52:22,890 --> 00:52:25,520 Ich halte verderben, aber jetzt es ist - du hast all das Gesicht des Jungen gesehen. 1173 00:52:25,520 --> 00:52:27,020 So kommen wir darauf zurück. 1174 00:52:27,020 --> 00:52:29,700 >> Also lassen Sie mich eine Frage stellen hier. 1175 00:52:29,700 --> 00:52:34,810 Lassen Sie mich vereinfachen diese zurück, was es war, bevor einige unserer früheren Q & A. 1176 00:52:34,810 --> 00:52:41,730 Und die Tatsache, dass Inkrement öffnende Klammer hat, int number, geschlossen 1177 00:52:41,730 --> 00:52:42,260 Klammer. 1178 00:52:42,260 --> 00:52:46,370 Was bedeutet int Zahl darstellen? 1179 00:52:46,370 --> 00:52:47,250 [Unverständlich] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. MALAN: Ein Argument. 1181 00:52:47,870 --> 00:52:50,732 Okay, aber was ist ein Argument? 1182 00:52:50,732 --> 00:52:51,620 [Unverständlich] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. MALAN: Sorry, was ist das? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Etwas passieren Sie in. 1185 00:52:53,150 --> 00:52:53,570 DAVID J. MALAN: Okay. 1186 00:52:53,570 --> 00:52:54,780 So etwas, das passieren Sie in. 1187 00:52:54,780 --> 00:52:56,560 Und ganz allgemein, es ist nur der Eingang. 1188 00:52:56,560 --> 00:52:59,860 Wenn Sie eine Funktion schreiben und diese Funktion den Zweck im Leben sind ist zu tun 1189 00:52:59,860 --> 00:53:03,290 etwas ein wenig anders, jedesmal wenn Sie es verwenden, dann besteht der einzige Weg für 1190 00:53:03,290 --> 00:53:07,710 das wirklich passieren würde zu sein scheinen, um es mit Input versorgen, so dass es 1191 00:53:07,710 --> 00:53:10,180 kann etwas anderes mit diesem Eingang zu tun jeder Zeit. 1192 00:53:10,180 --> 00:53:13,590 >> So müssen Sie zwei Dinge festlegen, wann eine Funktion übernimmt Eingänge. 1193 00:53:13,590 --> 00:53:17,240 Sie müssen den Namen, die Sie an diesem Eingang geben, rein geben 1194 00:53:17,240 --> 00:53:20,790 eigene Bequemlichkeit, so dass Sie es in der Funktion verweisen, die Sie 1195 00:53:20,790 --> 00:53:23,610 Sie sind schriftlich, wie ich es hier getan habe in Zeile 32. 1196 00:53:23,610 --> 00:53:27,840 Aber Sie müssen auch angeben, welchen Typ, weil C ist eine Programmiersprache 1197 00:53:27,840 --> 00:53:28,840 das erfordert nur 1198 00:53:28,840 --> 00:53:31,810 , dass, wenn Sie eine Variable wollen, müssen Sie den Computer zu sagen, was 1199 00:53:31,810 --> 00:53:32,790 Datentyp ist es, 1200 00:53:32,790 --> 00:53:35,540 zu einem großen Teil, so dass es weiß, wie viele Bits zum 1201 00:53:35,540 --> 00:53:37,230 Zuweisung für diese Variable. 1202 00:53:37,230 --> 00:53:38,600 Da könnte es sechs sein - 1203 00:53:38,600 --> 00:53:39,990 sorry, wird es nicht sechs sein. 1204 00:53:39,990 --> 00:53:41,050 Es kann 16 sein. 1205 00:53:41,050 --> 00:53:41,630 Es können 8 sein. 1206 00:53:41,630 --> 00:53:44,410 Es kann 32 sein, sogar 64. 1207 00:53:44,410 --> 00:53:45,820 Aber der Computer wissen muss. 1208 00:53:45,820 --> 00:53:49,110 Nun ist die int auf der linken Seite darstellt, was hingegen? 1209 00:53:52,825 --> 00:53:53,780 [Unverständlich] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. MALAN: Was ist das? 1211 00:53:54,570 --> 00:53:55,390 [Unverständlich] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. MALAN: Der Typ der Funktion und, genauer gesagt, die 1213 00:53:57,920 --> 00:53:59,755 Typ von seinem Ausgang. 1214 00:53:59,755 --> 00:54:00,220 Right. 1215 00:54:00,220 --> 00:54:04,220 Während also die Sache in Klammern stellt seinen Eingang, falls vorhanden, die 1216 00:54:04,220 --> 00:54:06,640 was zu der linken Seite stellt seinen Ausgang. 1217 00:54:06,640 --> 00:54:10,560 Und in diesem Fall, increment anscheinend gibt einen int. 1218 00:54:10,560 --> 00:54:14,590 Und so int ist der Rückgabetyp dieser Funktion. 1219 00:54:14,590 --> 00:54:16,090 >> Was bedeutet es, zurückzukehren? 1220 00:54:16,090 --> 00:54:19,810 Buchstäblich, verwenden Sie das Schlüsselwort return. 1221 00:54:19,810 --> 00:54:24,640 Und dann, wenn, was Sie auf der rechten Seite des Schlüsselwortes wieder ein 1222 00:54:24,640 --> 00:54:28,340 integer, dann ist das in der Tat im Einklang mit dem, was wir versprochen haben. 1223 00:54:28,340 --> 00:54:31,110 Man konnte nicht etwas tun - 1224 00:54:31,110 --> 00:54:32,280 Hallo Welt - 1225 00:54:32,280 --> 00:54:33,500 denn das ist ein String. 1226 00:54:33,500 --> 00:54:35,440 Offensichtlich ist es nicht ganzzahlig. 1227 00:54:35,440 --> 00:54:40,450 Also kurz gesagt, die Belastung ist wirklich auf uns, der Programmierer, um genau zu sein, wie 1228 00:54:40,450 --> 00:54:44,730 zu dem, was wir sind zurück und dann tatsächlich über die Rückkehr zu gehen. 1229 00:54:44,730 --> 00:54:49,030 Und dann, um ein bisschen mehr klar, dass der Kontext - 1230 00:54:49,030 --> 00:54:50,080 da ist er wieder. 1231 00:54:50,080 --> 00:54:51,060 Der Kontext - 1232 00:54:51,060 --> 00:54:52,830 große Überraschung kommt in einem Moment. 1233 00:54:52,830 --> 00:54:57,720 Der Kontext jetzt hier ist, dass den Arbeitsspeicher Ihres Computers ist, wieder ein 1234 00:54:57,720 --> 00:54:59,070 Gigabyte, zwei Gigabyte, was auch immer. 1235 00:54:59,070 --> 00:54:59,630 Vielleicht ist es mehr. 1236 00:54:59,630 --> 00:55:00,540 Vielleicht ist es weniger. 1237 00:55:00,540 --> 00:55:03,750 Aber der Computer sieht es als mit unterschiedlichen Abschnitten. 1238 00:55:03,750 --> 00:55:04,860 Irgend etwas geht da unten. 1239 00:55:04,860 --> 00:55:06,020 Etwas anderes geht da oben. 1240 00:55:06,020 --> 00:55:07,540 Verschiedene Zeug geht in der Mitte. 1241 00:55:07,540 --> 00:55:09,300 Und heute haben wir gerade anfangen erzählt diese Geschichte. 1242 00:55:09,300 --> 00:55:11,130 >> Aber kommen wir zurück zu dieser Zeit. 1243 00:55:11,130 --> 00:55:15,000 Denn jetzt ist das einzige Stück der Erinnerung uns wirklich wichtig das Textsegment 1244 00:55:15,000 --> 00:55:17,160 weil die gerade vertritt die Nullen und Einsen 1245 00:55:17,160 --> 00:55:18,460 das Clang hat ausgegeben. 1246 00:55:18,460 --> 00:55:21,570 Also, wenn Sie einen Befehl ausführen an der Tastatur wie a.out, oder Sie doppelklicken 1247 00:55:21,570 --> 00:55:25,350 Klicken Sie auf ein Symbol auf Mac OS oder Windows, ist Ihr Programm von der Festplatte geladen 1248 00:55:25,350 --> 00:55:26,930 fahren in RAM. 1249 00:55:26,930 --> 00:55:30,850 Und es ist an der Spitze der Arbeitsspeicher Ihres Computers plumpste, so zu sprechen. 1250 00:55:30,850 --> 00:55:35,470 Jetzt mittlerweile, wie Ihr Programm beginnt zu laufen und wichtigsten wird in die aufgerufene 1251 00:55:35,470 --> 00:55:39,240 Programm, das Sie geschrieben oder das Programm Microsoft oder Apple schrieb einer ihrer 1252 00:55:39,240 --> 00:55:42,930 lokale Variablen am Ende dort unten an der Unterseite Ihres Computers. 1253 00:55:42,930 --> 00:55:46,490 Aber wenn Haupt eine andere Funktion aufruft, dass selbst Variablen oder 1254 00:55:46,490 --> 00:55:48,340 Argumente, landen sie darüber. 1255 00:55:48,340 --> 00:55:50,670 Und wenn diese Funktion nennt etwas, landen sie darüber, 1256 00:55:50,670 --> 00:55:51,840 darüber, darüber. 1257 00:55:51,840 --> 00:55:56,100 Und nur einmal eine Funktion erfolgt Ausführen funktioniert der Stapel von Ablagen, so 1258 00:55:56,100 --> 00:55:58,320 zu sprechen, beginnen, sich tiefer und tiefer. 1259 00:55:58,320 --> 00:56:03,370 Und das ist, was dann in einer Nussschale, erklärt, warum, wenn Sie cube nennen - 1260 00:56:03,370 --> 00:56:04,660 oder rufen Sie Inkrement - 1261 00:56:04,660 --> 00:56:06,490 Sie in einer Kopie des Wertes vorbei. 1262 00:56:06,490 --> 00:56:09,840 Und was das bedeutet bildlich ist, dass Sie buchstäblich Schreiben der 1263 00:56:09,840 --> 00:56:14,540 Nummer 1 in einem anderen Teil des Speichers, verändert, daß 1 bis 2, im Fall von 1264 00:56:14,540 --> 00:56:15,360 Schrittweite - 1265 00:56:15,360 --> 00:56:17,450 oder einem 8, bei Würfels - 1266 00:56:17,450 --> 00:56:21,450 und dann wirft diesen Speicher entfernt, sobald die Schrittweite bzw. des Würfels 1267 00:56:21,450 --> 00:56:23,410 Funktion zurückkehrt. 1268 00:56:23,410 --> 00:56:24,267 >> Frage. 1269 00:56:24,267 --> 00:56:25,517 [Unverständlich] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. MALAN: Wo - globale Variablen in, was gespeichert werden 1271 00:56:29,970 --> 00:56:32,960 derzeit als die initialisierten Daten oder initialisierte Daten. 1272 00:56:32,960 --> 00:56:35,900 Der Unterschied ist, wenn Sie eine globale Variable haben, und weisen Sie 1273 00:56:35,900 --> 00:56:39,530 sofort ein Wert mit dem Gleichheitszeichen, landet es an der Spitze gibt. 1274 00:56:39,530 --> 00:56:43,390 Und wenn Sie nur sagen, int x Semikolon ohne Wert, landet es leicht 1275 00:56:43,390 --> 00:56:46,670 niedriger RAM einfach durch Konvention. 1276 00:56:46,670 --> 00:56:49,308 Andere Fragen. 1277 00:56:49,308 --> 00:56:49,750 Gut. 1278 00:56:49,750 --> 00:56:53,040 >> So Dieses Bild wird wieder kommen, wie wir stärker mit dem, was wir tun können, erhalten 1279 00:56:53,040 --> 00:56:53,830 mit dem Computer. 1280 00:56:53,830 --> 00:56:58,790 Aber jetzt lassen Sie uns eine kurze Einführung in die Kryptographie, eine bestimmte Art von 1281 00:56:58,790 --> 00:57:01,910 Kryptographie, nicht lösen alle Probleme der Welt aber zu lösen 1282 00:57:01,910 --> 00:57:02,480 einige von ihnen. 1283 00:57:02,480 --> 00:57:06,090 In diesem Fall hier haben wir etwas namens geheimen Schlüsseln. 1284 00:57:06,090 --> 00:57:10,430 Und geheimen Schlüsseln, wie der Name schon sagt, stammt seine Sicherheit 1285 00:57:10,430 --> 00:57:11,330 von einem Geheimnis. 1286 00:57:11,330 --> 00:57:14,720 So zum Beispiel, wenn Sie zurück in der Grundschule sind und Sie Übergabe eines 1287 00:57:14,720 --> 00:57:18,040 kleines Geheimnis Liebesbrief an den Jungen oder Mädchen, das du auf das Brechen werden - wenn Sie 1288 00:57:18,040 --> 00:57:20,820 wollte, dass durch das Publikum passieren, würden Sie wahrscheinlich nicht schreiben 1289 00:57:20,820 --> 00:57:24,120 wie eine Notiz in Englisch oder was auch immer Ihre Muttersprache ist, sondern Sie 1290 00:57:24,120 --> 00:57:25,800 könnte es zu verschlüsseln. 1291 00:57:25,800 --> 00:57:27,820 Oder Sie könnten dann schicken Sie einfach eine SMS-Nachricht in diesen Tagen. 1292 00:57:27,820 --> 00:57:30,310 Aber man könnte tatsächlich passieren sie eine Notiz über den Klassenraum. 1293 00:57:30,310 --> 00:57:33,820 Und um dies sicher zu tun, so dass Ihre Freunde und Lehrer 1294 00:57:33,820 --> 00:57:36,820 weiß nicht, was du schreibst, könnte man sich mit einem relativ einfachen 1295 00:57:36,820 --> 00:57:37,800 Algorithmus - 1296 00:57:37,800 --> 00:57:39,290 junge, obwohl Sie vielleicht - 1297 00:57:39,290 --> 00:57:40,780 nur kriechen die Worte. 1298 00:57:40,780 --> 00:57:44,390 So anstelle des Schreibens A, könnte man B. Statt B schreibt, schreibt man 1299 00:57:44,390 --> 00:57:46,670 C. Statt C, schreibt man D, und so weiter. 1300 00:57:46,670 --> 00:57:50,020 Oder Sie könnten sich mit einem komplexeren Übersetzung von Briefen 1301 00:57:50,020 --> 00:57:51,300 unterschiedliche Buchstaben. 1302 00:57:51,300 --> 00:57:55,440 Aber der Haken ist, der Junge oder das Mädchen, dem Sie senden diese Notiz muss 1303 00:57:55,440 --> 00:57:56,850 etwas wissen. 1304 00:57:56,850 --> 00:57:59,620 Welches ist, was offensichtlich? 1305 00:57:59,620 --> 00:58:01,400 Wie, was Ihr Geheimnis ist. 1306 00:58:01,400 --> 00:58:04,620 Wie, was ist das Mapping zwischen As und Bs und Cs und Ds? 1307 00:58:04,620 --> 00:58:08,780 Ist es einfach nur mit ein, so zu sprechen, zu jedem der Briefe aus gehen 1308 00:58:08,780 --> 00:58:09,730 A nach B zu B C? 1309 00:58:09,730 --> 00:58:11,350 Ist es komplizierter als das? 1310 00:58:11,350 --> 00:58:16,450 Also, du und dein Schwarm müssen diese geheimen Informationen haben. 1311 00:58:16,450 --> 00:58:18,170 Aber es gibt eine Art catch-22 hier. 1312 00:58:18,170 --> 00:58:20,760 Wenn dies das erste Mal, Sie senden diesen Liebesbrief durch die 1313 00:58:20,760 --> 00:58:25,590 Klasse, wie das Junge oder ein Mädchen zu wissen, was das Geheimnis ist sogar? 1314 00:58:25,590 --> 00:58:28,450 So geheimen Schlüssel Krypto löst nicht alle Probleme der Welt. 1315 00:58:28,450 --> 00:58:30,490 Und es gibt tatsächlich eine Beziehung, dass wir kommen zurück in Richtung 1316 00:58:30,490 --> 00:58:31,370 Semester Ende. 1317 00:58:31,370 --> 00:58:35,970 >> Ebenso haben keiner von uns wohl jemals gesendet a - 1318 00:58:35,970 --> 00:58:39,453 ähnlich, die meisten von uns nicht wissen, dass jemand arbeitet zum Beispiel bei 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Und doch haben viele von uns wahrscheinlich Zeug bei Amazon.com gekauft. 1321 00:58:43,130 --> 00:58:45,670 Und wir haben gelernt, davon ausgehen, dass diese E-Commerce 1322 00:58:45,670 --> 00:58:47,060 Transaktionen sicher sind. 1323 00:58:47,060 --> 00:58:47,210 Right? 1324 00:58:47,210 --> 00:58:49,310 Die URL sagt wohl https. 1325 00:58:49,310 --> 00:58:51,590 Es ist vielleicht eine dumme kleine Schloss-Symbol irgendwo. 1326 00:58:51,590 --> 00:58:54,680 Es ist eine Art von Kryptographie Sicherung Ihrer Kreditkarten-Informationen 1327 00:58:54,680 --> 00:58:56,980 zwischen Ihnen und Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Und doch, wenn der Kryptographie geht zu wissen, ein Geheimnis, und doch habe ich nicht 1329 00:59:00,410 --> 00:59:03,330 weiß jemand bei Amazon, und ich habe sicherlich nicht jede Art von angeordnet 1330 00:59:03,330 --> 00:59:07,350 Geheimnis mit jemandem bei Amazon, wie wird mein Computer oder mein Browser dies zu tun? 1331 00:59:07,350 --> 00:59:10,100 Nun, stellt sich heraus, es gibt andere Arten der Kryptographie überhaupt, dass zu lösen 1332 00:59:10,100 --> 00:59:10,740 das Problem. 1333 00:59:10,740 --> 00:59:13,610 Aber für heute, werden wir auf die einfache eins, wo man gerne im Fokus 1334 00:59:13,610 --> 00:59:18,480 voranzutreiben, um ein Geheimnis wissen, wie plus 1 oder eine Zuordnung zwischen As und Bs. 1335 00:59:18,480 --> 00:59:20,710 >> Und das Verfahren der Kryptographie Regel handelt es sich dabei. 1336 00:59:20,710 --> 00:59:23,550 Sie haben einige Klartext, hier auf der linken Seite dargestellt. 1337 00:59:23,550 --> 00:59:26,260 Sie führen sie durch irgendeine Art von Algorithmus oder Verfahren 1338 00:59:26,260 --> 00:59:27,670 für deren Verschlüsselung. 1339 00:59:27,670 --> 00:59:31,390 Vielleicht ist das nur ein B wird, wird B C. Und dann am Ende mit 1340 00:59:31,390 --> 00:59:32,260 Chiffretext. 1341 00:59:32,260 --> 00:59:36,450 Inzwischen einmal dein Schwarm das Geheimnis Note empfängt, hat er oder sie dann 1342 00:59:36,450 --> 00:59:39,950 entschlüsseln durch allgemein die Umkehrung dieses Algorithmus so zu erhalten 1343 00:59:39,950 --> 00:59:41,640 Sichern des Klartext. 1344 00:59:41,640 --> 00:59:43,860 Nun gibt es physischen Inkarnationen dafür. 1345 00:59:43,860 --> 00:59:46,720 Zum Beispiel, ist dies ein kleines Geheimnis Decoder Ring. 1346 00:59:46,720 --> 00:59:50,060 Und dies ist ein Ring in dem Sinne, dass es zwei Zifferblättern hier. 1347 00:59:50,060 --> 00:59:53,630 Auf dem Außenumfang dieser Sache gibt es Buchstaben A bis Z, 1348 00:59:53,630 --> 00:59:55,110 obwohl sie sind in zufälliger Reihenfolge. 1349 00:59:55,110 --> 00:59:58,410 Und an der Innenseite, gibt es tatsächlich einige Zahlen, so daß mit diesem 1350 00:59:58,410 --> 01:00:02,940 Ring, können Sie Art drehen außerhalb aber nicht das Innere, um Line-Up 1351 01:00:02,940 --> 01:00:04,110 Zahlen mit Buchstaben. 1352 01:00:04,110 --> 01:00:08,290 Und in dem Clip, du bist zu zu sehen - von denen einige Sie schon 24/7 haben 1353 01:00:08,290 --> 01:00:11,120 um die Weihnachtszeit von einem Film namens A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Du wirst sehen, dass kleine Ralphie war so eifrig, um herauszufinden, was kleine Waise 1355 01:00:16,050 --> 01:00:19,810 Annies geheime Botschaft war für ihn, dass mitgeteilt worden sei, glaube ich, in der 1356 01:00:19,810 --> 01:00:22,810 Form von numerischen Nachrichten auf einem seriellen Box. 1357 01:00:22,810 --> 01:00:26,760 Und man musste all die kleinen Karten, die kamen sammeln 1358 01:00:26,760 --> 01:00:27,480 in der Cornflakes-Packung. 1359 01:00:27,480 --> 01:00:28,320 Sie hatten, sie zu versenden in. 1360 01:00:28,320 --> 01:00:31,060 Sie hatten, um wieder das Geheimnis Decoder Ring, so dass man endlich herausfinden 1361 01:00:31,060 --> 01:00:34,190 herauszufinden, was die Zuordnung zwischen Buchstaben und Zahlen, 1362 01:00:34,190 --> 01:00:35,420 oder Buchstaben und Buchstaben. 1363 01:00:35,420 --> 01:00:39,790 So gebe ich Ihnen diesen kurzen Clip aus einer Weihnachtsgeschichte pset 2 motivieren und 1364 01:00:39,790 --> 01:00:42,340 unsere Diskussion, in einem Augenblick, von Arrays. 1365 01:00:42,340 --> 01:00:43,773 Also hier haben wir Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [VIDEO PLAYBACK] 1367 01:00:44,126 --> 01:00:47,470 -Sei es allen und jedem bekannt, dass Ralph Parker wird hiermit ernannt 1368 01:00:47,470 --> 01:00:50,690 Mitglied der Little Orphan Annie Secret Circle und alle Titel 1369 01:00:50,690 --> 01:00:53,500 die Ehren und Vorteile auftretenden dazu. 1370 01:00:53,500 --> 01:00:56,040 -Signed, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Gegengezeichnet, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 In Tinte! 1373 01:01:00,150 --> 01:01:02,910 Ehrungen und Leistungen, bereits im Alter von neun Jahren. 1374 01:01:09,970 --> 01:01:10,730 Komm, lasst uns mit ihm zu bekommen. 1375 01:01:10,730 --> 01:01:15,000 Ich brauche nicht all that jazz über Schmuggler und Piraten. 1376 01:01:15,000 --> 01:01:17,624 -Listen morgen Abend für die abschließende Abenteuer The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Jetzt ist es Zeit für die geheime Botschaft Annies für Sie Mitglieder 1379 01:01:23,380 --> 01:01:25,670 des Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Denken Sie daran, Kinder, können nur Mitglieder der Secret Circle Annies dekodieren 1381 01:01:30,260 --> 01:01:31,660 Annie geheime Nachricht. 1382 01:01:31,660 --> 01:01:36,230 Denken Sie daran, Annie auf Sie. 1383 01:01:36,230 --> 01:01:38,720 Stellen Sie Ihre Stifte B2. 1384 01:01:38,720 --> 01:01:41,040 Hier ist die Botschaft. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Ich bin in meinem ersten geheimen Treffen. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre war in großer Stimme heute Abend. 1389 01:01:51,700 --> 01:01:54,890 Ich könnte sagen, dass die heutige Nachricht wirklich wichtig war. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Das ist eine Nachricht von Annie sich. 1392 01:01:58,590 --> 01:01:59,840 Denken Sie daran, es niemandem erzählen. 1393 01:02:04,570 --> 01:02:08,750 -90 Sekunden später bin ich in der einzige Raum im Haus, wo ein Junge von neun 1394 01:02:08,750 --> 01:02:12,980 könnte Privatsphäre und decode sitzen. 1395 01:02:12,980 --> 01:02:17,130 Aha, ging B. ich zum nächsten. 1396 01:02:17,130 --> 01:02:20,330 E. Das erste Wort ist. 1397 01:02:20,330 --> 01:02:22,670 S. war es einfacher jetzt kommen. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, komm schon, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Ich muss gehen. 1401 01:02:28,430 --> 01:02:30,350 -Ich gleich runter, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee Whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, Be O. sicher. 1404 01:02:38,270 --> 01:02:40,000 Achten Sie darauf, was? 1405 01:02:40,000 --> 01:02:42,105 Was war Little Orphan Annie versucht zu sagen? 1406 01:02:42,105 --> 01:02:43,095 Achten Sie darauf, was? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy hat zu gehen. 1409 01:02:44,580 --> 01:02:45,570 Würdest du bitte raus? 1410 01:02:45,570 --> 01:02:46,560 -Gut, ma. 1411 01:02:46,560 --> 01:02:48,540 Ich werde direkt aus sein. 1412 01:02:48,540 --> 01:02:50,580 -Ich war immer näher. 1413 01:02:50,580 --> 01:02:52,550 Die Spannung war schrecklich. 1414 01:02:52,550 --> 01:02:53,355 Was war es? 1415 01:02:53,355 --> 01:02:56,315 Das Schicksal des Planeten kann in der Schwebe. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy muss doch gehen. 1418 01:02:59,165 --> 01:03:02,310 -Ich direkt aus sein, für crying out loud. 1419 01:03:02,310 --> 01:03:04,000 -Gee, fast da. 1420 01:03:04,000 --> 01:03:05,180 Meine Finger flogen. 1421 01:03:05,180 --> 01:03:07,150 Mein Geist war ein Stahl-Falle. 1422 01:03:07,150 --> 01:03:08,790 Jede Pore vibrierte. 1423 01:03:08,790 --> 01:03:10,040 Es war fast klar. 1424 01:03:10,040 --> 01:03:13,400 Ja, ja, ja, ja. 1425 01:03:13,400 --> 01:03:18,960 -Achten Sie darauf, Ihren Ovomaltine trinken. 1426 01:03:18,960 --> 01:03:20,210 Ovomaltine? 1427 01:03:24,010 --> 01:03:25,260 A miesen Geschäfte? 1428 01:03:28,200 --> 01:03:29,640 Son of a bitch. 1429 01:03:29,640 --> 01:03:33,340 [END VIDEO PLAYBACK] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. MALAN: So, da haben wir Kryptographie. 1431 01:03:36,040 --> 01:03:39,670 So wie in einem Computer können wir über die Umsetzung zu gehen oder 1432 01:03:39,670 --> 01:03:40,950 was Dinge wie diese? 1433 01:03:40,950 --> 01:03:44,430 Nun, wir müssen einen Weg auszudrücken uns ein wenig flexibler als 1434 01:03:44,430 --> 01:03:46,420 unsere Variablen bisher erlaubt haben. 1435 01:03:46,420 --> 01:03:47,370 Wir hatten ints. 1436 01:03:47,370 --> 01:03:48,380 Wir hatten chars. 1437 01:03:48,380 --> 01:03:50,790 Wir hatten die Schwimmer und Doppelzimmer und ein paar andere. 1438 01:03:50,790 --> 01:03:55,050 Aber das sind einzelne Stücke der Erinnerung, die nicht wirklich erlauben uns, 1439 01:03:55,050 --> 01:03:58,010 äußern Dinge wie Wörter und Sätze und Phrasen. 1440 01:03:58,010 --> 01:04:00,200 In der Tat haben wir solche Dinge Strings genannt. 1441 01:04:00,200 --> 01:04:03,650 Aber wir versprochen, dass dies wirklich nur eine Vereinfachung der CS50 1442 01:04:03,650 --> 01:04:07,020 Bibliothek, die wir zu schälen zurück wollen. 1443 01:04:07,020 --> 01:04:08,970 >> Und so beginnen wir, dass hier tun. 1444 01:04:08,970 --> 01:04:11,130 Lassen Sie mich gehen Sie vor und öffnen einer Datei - 1445 01:04:11,130 --> 01:04:13,770 Alle diese Dateien sind wie gewohnt zur Verfügung online - 1446 01:04:13,770 --> 01:04:19,120 genannt array.c ein Problem nicht mit Saiten zu lösen, sondern dass malt ein 1447 01:04:19,120 --> 01:04:23,040 Bild hier, wie wir vielleicht etwas zu verwenden als ein Array. 1448 01:04:23,040 --> 01:04:25,530 Ein Array ist ein Datentyp. 1449 01:04:25,530 --> 01:04:31,320 Es ist eine Art von Variablen, von Sorten, das hat mehrere kleinere Datentypen 1450 01:04:31,320 --> 01:04:34,150 innen von ihr Rücken an Rücken an Rücken an Rücken. 1451 01:04:34,150 --> 01:04:37,700 So zum Beispiel, wenn wir wollen ein kleines Programm, das Ihnen schreiben Sie Ihre 1452 01:04:37,700 --> 01:04:42,110 quiz Durchschnitt für einen Kurs wie 50, das zwei Tests, man konnte sehr leicht 1453 01:04:42,110 --> 01:04:45,170 Schreiben Sie dieses Programm - basierend auch auf einige der letzten Woche Material - 1454 01:04:45,170 --> 01:04:47,770 mit GetInt und ein paar Variablen. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, und es ist ziemlich einfach. 1456 01:04:51,920 --> 01:04:55,930 Es ist vielleicht 10, 20 Zeilen Code, max, ein Programm, das fragt umsetzen 1457 01:04:55,930 --> 01:05:01,170 Benutzer für zwei Quiz Partituren und berechnet dann ihre durchschnittliche indem Sie sie 1458 01:05:01,170 --> 01:05:03,850 zusammen, durch zwei geteilt, und dann Drucken der Ergebnisse. 1459 01:05:03,850 --> 01:05:06,380 Wir könnten wahrscheinlich tun ziemlich leicht jetzt nach 1460 01:05:06,380 --> 01:05:07,510 eine gewisse Anzahl von Minuten. 1461 01:05:07,510 --> 01:05:11,005 >> Aber das Problem ist, dass anzunehmen, dass 50 drei hatten Quiz oder vier. 1462 01:05:11,005 --> 01:05:13,510 Angenommen, Sie möchten das gleiche Programm für eine Klasse, musste verwenden wollte 1463 01:05:13,510 --> 01:05:14,850 wöchentliche Quiz. 1464 01:05:14,850 --> 01:05:16,610 Denken Sie über eine Klasse, die wöchentliche Quiz hat. 1465 01:05:16,610 --> 01:05:20,610 Wenn es wie 16 oder so Woche in einem Semester, jetzt haben Sie 16 Variablen - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Sobald Sie sehen, diese Redundanz zu starten, kopieren Sie diese und Einfügen 1468 01:05:27,560 --> 01:05:31,390 Code, sollte es zu starten, damit Sie wünschte, es gäbe einen besseren Weg. 1469 01:05:31,390 --> 01:05:33,930 Und glücklicherweise, denn von Arrays, die es gibt. 1470 01:05:33,930 --> 01:05:34,980 Also lasst uns dies tun. 1471 01:05:34,980 --> 01:05:38,430 Zunächst lassen Sie mich Ihnen eine sehr einfache Sache, dass wir nicht verwendet so weit, 1472 01:05:38,430 --> 01:05:40,140 aber du wirst es gelegentlich sehen im Code. 1473 01:05:40,140 --> 01:05:42,360 Dies ist, was allgemein als eine Konstante. 1474 01:05:42,360 --> 01:05:45,790 Also ist es eine Konstante in dem Sinne, dass dieser Wert sich nie ändert. 1475 01:05:45,790 --> 01:05:49,210 Der menschliche Konvention bei der Erstellung eines konstant ist, alle Kapital zu nutzen 1476 01:05:49,210 --> 01:05:51,940 Briefe, gerade so, dass es wirklich steht in Ihrem Code. 1477 01:05:51,940 --> 01:05:55,960 Und das besondere Schlüsselwort, das Sie in C # definieren. 1478 01:05:55,960 --> 01:06:00,250 Also, wenn Sie sagen, # define, dann ein Leerzeichen, dann das Wort, das Sie verwenden wollen 1479 01:06:00,250 --> 01:06:03,260 Namen der Konstanten, und dann wird der Wert der Konstante. 1480 01:06:03,260 --> 01:06:06,180 So Ankündigung, unterscheidet sich dies von Zuordnen von Daten zu einer Variablen. 1481 01:06:06,180 --> 01:06:07,020 Es gibt keine Gleichheitszeichen. 1482 01:06:07,020 --> 01:06:08,240 Es gibt kein Semikolon. 1483 01:06:08,240 --> 01:06:11,410 Dies ist, was allgemein als Präprozessordirektive bekannt, aber mehr auf 1484 01:06:11,410 --> 01:06:12,210 dass eine andere Zeit. 1485 01:06:12,210 --> 01:06:18,540 >> Denn jetzt, schafft dies eine unveränderliche Wert namens QUIZZES deren tatsächliche 1486 01:06:18,540 --> 01:06:19,940 numerischen Wert gleich 2 ist. 1487 01:06:19,940 --> 01:06:24,020 So überall Quizzes zu sehen, Quiz, Quizfragen in diesem file, das ist 1488 01:06:24,020 --> 01:06:25,410 nur die Nummer 2. 1489 01:06:25,410 --> 01:06:28,100 Nun, wenn ich an Haupt jetzt aussehen, mal sehen, wie das funktioniert. 1490 01:06:28,100 --> 01:06:29,500 Zunächst sieht es ein wenig kryptisch. 1491 01:06:29,500 --> 01:06:31,340 Aber es ist alles Sachen von Wochen ein. 1492 01:06:31,340 --> 01:06:32,710 Bitten Sie den Benutzer für die Klassen. 1493 01:06:32,710 --> 01:06:33,630 Wie machen wir das? 1494 01:06:33,630 --> 01:06:35,470 Nun, in Zeile 22 - 1495 01:06:35,470 --> 01:06:37,210 das ist wirklich der saftigen Teil - 1496 01:06:37,210 --> 01:06:40,960 Ich erkläre einen Schwimmer, aber nicht nur ein einzelner Schwimmer. 1497 01:06:40,960 --> 01:06:44,620 Ich erkläre, sondern eine Reihe von Fließkommazahlen. 1498 01:06:44,620 --> 01:06:49,100 Diese Variable wird als Noten, da hier implizierte. 1499 01:06:49,100 --> 01:06:53,080 Aber das einzige Stück neue Syntax dann sind diese eckigen Klammern, die Tatsache, 1500 01:06:53,080 --> 01:06:59,350 dass ich dem Schwimmer-Typen und dann Klammer und dann eine Nummer. 1501 01:06:59,350 --> 01:07:02,460 Hinweis, wenn dies eine Konstante ist, ist dies nur, wie wir das getan haben. 1502 01:07:02,460 --> 01:07:06,890 Dies bedeutet, hey Computer, geben Sie mir zwei Schwimmern, und lassen Sie uns gemeinsam rufen 1503 01:07:06,890 --> 01:07:08,220 sie Noten. 1504 01:07:08,220 --> 01:07:11,920 Dies steht im Gegensatz zu einer viel mühsamer Prozess wie diese. 1505 01:07:11,920 --> 01:07:15,850 Float grade1 schweben grade2, und so weiter. 1506 01:07:15,850 --> 01:07:20,010 So ein Array ermöglicht es uns, diese Idee umzusetzen, aber viel weniger messily, in 1507 01:07:20,010 --> 01:07:24,630 eine solche Weise, dass wir eine Codezeile anstatt eine etwa 16 für ein 16 1508 01:07:24,630 --> 01:07:25,740 Woche Semester. 1509 01:07:25,740 --> 01:07:29,950 So wollte ich nicht zu hart-Code 2, denn wenn man jetzt darüber denken 1510 01:07:29,950 --> 01:07:34,160 logisch - wohl im nächsten Jahr CS50 Änderungen 3 Quiz statt. 1511 01:07:34,160 --> 01:07:35,510 Und ich hatte die Nummer 2 hier. 1512 01:07:35,510 --> 01:07:36,600 Ich hatte die Nummer 2 hier. 1513 01:07:36,600 --> 01:07:37,580 Ich hatte die Nummer 2 hier. 1514 01:07:37,580 --> 01:07:38,560 Ich hatte die Nummer 2 hier. 1515 01:07:38,560 --> 01:07:43,180 Es wird sehr mühsam und sehr einfach zu vermasseln und versehentlich ändern 1516 01:07:43,180 --> 01:07:47,690 ein Wert auf 3 und verpassen einen anderen Wert von 2. 1517 01:07:47,690 --> 01:07:52,460 Also ich bin, anstatt abstrakte gehen diese weg und verwenden Sie diese Konstante, die, wie der 1518 01:07:52,460 --> 01:07:54,120 Name vermuten lässt, ändert sich nie. 1519 01:07:54,120 --> 01:07:57,710 Und jetzt, Quiz, egal ob wir anders haben dieses oder nächstes Jahr, ich 1520 01:07:57,710 --> 01:08:01,210 müssen es nur an einer Stelle ändern, hier oben an der Spitze. 1521 01:08:01,210 --> 01:08:02,720 >> Damit ist alles konstant ist. 1522 01:08:02,720 --> 01:08:08,680 Inzwischen ist die neue konzeptionelle Merkmal, dass eines Arrays. 1523 01:08:08,680 --> 01:08:14,660 So die eckigen Klammern geben mir so viele Schwimmer und lässt mich zusammen 1524 01:08:14,660 --> 01:08:16,630 nennen sie Noten hier. 1525 01:08:16,630 --> 01:08:17,990 So, jetzt wollen wir mal sehen, was ich tun werde. 1526 01:08:17,990 --> 01:08:20,359 Hier in der Leitung 24 ist der Anfang einer for-Schleife. 1527 01:08:20,359 --> 01:08:22,260 Das ist wirklich nichts Besonderes. 1528 01:08:22,260 --> 01:08:25,060 Es ist nur mit Quiz statt eines hartcodierte Nummer. 1529 01:08:25,060 --> 01:08:27,790 Aber es gibt nichts intellektuell dort anders aus der vergangenen Woche. 1530 01:08:27,790 --> 01:08:29,040 Dies ist nur printf. 1531 01:08:29,040 --> 01:08:35,490 So printf ("Quiz-Nummer% d von% d"), weil ich einfach ausdrucken möchten mir quiz 1532 01:08:35,490 --> 01:08:38,050 Nummer eins von zwei und dann zwei von zwei. 1533 01:08:38,050 --> 01:08:39,850 Das ist also eine rein ästhetische Sache. 1534 01:08:39,850 --> 01:08:42,500 Aber der interessante Teil ist jetzt in Zeile 27. 1535 01:08:42,500 --> 01:08:48,310 Um in einer der zwei Platzhalter mit einem Floating-Point füllen 1536 01:08:48,310 --> 01:08:51,029 Wert, Sie wieder in eckige Klammern. 1537 01:08:51,029 --> 01:08:55,620 In diesem Fall bin ich mit i, weil diese for-Schleife mit i gleich begonnen hat 1538 01:08:55,620 --> 01:08:57,560 Welchen Wert, offenbar? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Also bei der ersten Iteration dieser Schleife, ist es, als ob ich 1541 01:09:01,350 --> 01:09:02,689 schrieb im Code. 1542 01:09:02,689 --> 01:09:05,580 Aber auf der zweiten Iteration dieser Schleife ist es, als ob ich 1543 01:09:05,580 --> 01:09:07,750 schrieb in meinem Code. 1544 01:09:07,750 --> 01:09:10,750 Aber die Tatsache, dass ich mit einer Variablen ist perfekt, weil, wie der Name 1545 01:09:10,750 --> 01:09:14,300 schlägt, ist es unterschiedliche seinen Wert bei jeder Iteration. 1546 01:09:14,300 --> 01:09:17,370 Also ich bin Ausfüllen dieses Array einer Stelle zu einer Zeit. 1547 01:09:17,370 --> 01:09:18,910 Was bedeutet das Array aussehen? 1548 01:09:18,910 --> 01:09:21,430 Nun, der Grund zog ich diese super einfaches Rechteck auf dem Bildschirm hier 1549 01:09:21,430 --> 01:09:23,350 zuvor war aus diesem Grund. 1550 01:09:23,350 --> 01:09:27,279 Ein Array ist nur ein Stück Speicher von einem anderen Stück Speicher gefolgt, 1551 01:09:27,279 --> 01:09:30,109 gefolgt von einem weiteren Block arbeiten, und so weiter. 1552 01:09:30,109 --> 01:09:35,260 Also, wenn meine Array der Größe 2, in diesem Fall hier, ich würde tun 1553 01:09:35,260 --> 01:09:37,590 Eingabe in my quiz Partituren, wie hier. 1554 01:09:37,590 --> 01:09:39,430 Ich bekam 100 auf diesen einen. 1555 01:09:39,430 --> 01:09:42,020 Und dann bekam ich eine 99 in diesem Fall. 1556 01:09:42,020 --> 01:09:46,040 Dann diese Erinnerung vielleicht gar nicht benutzt, weil ich nur gefragt habe werden die 1557 01:09:46,040 --> 01:09:48,689 Computer für ein Array der Größe 2. 1558 01:09:48,689 --> 01:09:50,180 Diese Plätze sind immer noch da. 1559 01:09:50,180 --> 01:09:50,340 Right? 1560 01:09:50,340 --> 01:09:52,500 Sie haben noch zwei Gigabyte RAM, auch wenn Sie nur sind 1561 01:09:52,500 --> 01:09:53,979 bat um zwei Schwimmern. 1562 01:09:53,979 --> 01:09:58,710 So die Idee hinter Arrays ist, dass der Computer dauert nur ein Stück Speicher 1563 01:09:58,710 --> 01:10:03,230 und dann aufteilt kleinere Stücke Rücken an Rücken an Rücken an Rücken. 1564 01:10:03,230 --> 01:10:04,740 Und damit ist alles ein Array ist. 1565 01:10:04,740 --> 01:10:09,080 Es ist ein zusammenhängender Block arbeiten, innerhalb derer man die Dinge richten kann. 1566 01:10:09,080 --> 01:10:12,400 >> Jetzt in diesem Fall zu tun, dann nur einige langweilige Arithmetik. 1567 01:10:12,400 --> 01:10:16,170 Wenn ich hier unten scrollen, das ist, wo ich über das Array dann durchlaufen. 1568 01:10:16,170 --> 01:10:19,410 Ich komme mit der Summe aller Werte im Array. 1569 01:10:19,410 --> 01:10:22,390 Und dann habe ich mit der Funktion round hier, um tatsächlich die 1570 01:10:22,390 --> 01:10:23,940 Zusammenfassend geteilt durch Quizfragen. 1571 01:10:23,940 --> 01:10:27,450 Aber lassen Sie mich winken meine Hand an, dass als eine Art genug Arithmetik für jetzt. 1572 01:10:27,450 --> 01:10:30,010 Aber alles, was für mich tun ist letztlich Berechnen einer durchschnittlichen. 1573 01:10:30,010 --> 01:10:33,640 Also zuerst Quiz plus zweite Quiz, geteilt durch 2, und dann Druck 1574 01:10:33,640 --> 01:10:34,700 es als int. 1575 01:10:34,700 --> 01:10:39,030 >> Aber lasst uns jetzt Übergang zu einem anderen Beispiel genannt string1, 1576 01:10:39,030 --> 01:10:42,370 was zeichnet ein ähnliches Bild, jedoch mit Strings. 1577 01:10:42,370 --> 01:10:45,550 Lassen Sie mich gehen Sie vor und zu vereinfachen, nur für einen Augenblick. 1578 01:10:45,550 --> 01:10:48,340 Und vergib den Einzug für jetzt. 1579 01:10:48,340 --> 01:10:52,280 Beachten Sie in Zeile 19 der diesem Beispiel, bekomme ich einen String vom Benutzer. 1580 01:10:52,280 --> 01:10:55,780 Aber bemerken, was ich nächstes tun in den Zeilen 22 weiter. 1581 01:10:55,780 --> 01:11:00,260 Ich bin eigentlich Iteration von i bis - und das ist ein neuer Trick - 1582 01:11:00,260 --> 01:11:02,730 strlen, Stringlänge. 1583 01:11:02,730 --> 01:11:07,010 Dies ist eine Funktion, die mit C kommt es, dass, wenn Sie es einen String, erzählt er 1584 01:11:07,010 --> 01:11:08,950 Sie, wie viele Zeichen in diesem String. 1585 01:11:08,950 --> 01:11:09,440 Das ist alles. 1586 01:11:09,440 --> 01:11:12,520 Die Tatsache, dass es strlen anstelle von String-Länge ist nur, weil es 1587 01:11:12,520 --> 01:11:13,040 prägnanter. 1588 01:11:13,040 --> 01:11:17,100 Vor 30 Jahren, mochte die Menschen, die Dinge so knapp wie möglich zu schreiben. 1589 01:11:17,100 --> 01:11:19,080 So haben wir diese Konvention halten hier. 1590 01:11:19,080 --> 01:11:21,730 i + + bedeutet nur erhöhen i in jeder Iteration. 1591 01:11:21,730 --> 01:11:24,310 Und nun merkt das, das ist wirklich interessant. 1592 01:11:24,310 --> 01:11:28,730 So in Zeile 24, sage ich Computer, gib mir ein Zeichen, acht 1593 01:11:28,730 --> 01:11:30,770 Bits, und nennen es c. 1594 01:11:30,770 --> 01:11:35,370 Aber was ist das auf der rechten Seite sagen? 1595 01:11:35,370 --> 01:11:38,150 In Englisch, was bedeutet, dass vertreten? 1596 01:11:38,150 --> 01:11:40,070 [Unverständlich] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. MALAN: Genau. 1598 01:11:40,490 --> 01:11:42,390 Gib mir das erste Zeichen im Array. 1599 01:11:42,390 --> 01:11:45,400 Oder allgemeiner, gib mir das i-te Zeichen im Array. 1600 01:11:45,400 --> 01:11:48,230 Und erkennen, es ist jetzt wichtig, dass als Informatiker, wir eigentlich sind 1601 01:11:48,230 --> 01:11:49,330 Zählen von 0. 1602 01:11:49,330 --> 01:11:51,290 Sie haben noch kein Ermessen jetzt an, dies zu tun. 1603 01:11:51,290 --> 01:11:54,580 Jetzt haben Sie in Übereinstimmung mit dem Computer die Erwartungen verhalten und 1604 01:11:54,580 --> 01:11:58,010 zählt von Null, da [0] wird der erste sein 1605 01:11:58,010 --> 01:11:59,670 Zeichen in einem String. 1606 01:11:59,670 --> 01:12:01,320 [1] wird der zweite sein. 1607 01:12:01,320 --> 01:12:03,610 [2] wird der dritte und so weiter sein. 1608 01:12:03,610 --> 01:12:08,840 So dieses Programm, wenn ich es kompilieren - das ist wieder string1. 1609 01:12:08,840 --> 01:12:11,040 >> So machen string1. 1610 01:12:11,040 --> 01:12:16,730 Und jetzt laufe ich string1 in meinem Terminal-Fenster. 1611 01:12:16,730 --> 01:12:19,180 Es ist eine Eingabe wartet, so werde ich in, sagen wir, David geben. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 Und jetzt ist es druckt DAVID alle auf verschiedenen Linien, weil 1614 01:12:23,350 --> 01:12:24,430 bemerken, was ich tue. 1615 01:12:24,430 --> 01:12:27,510 Ich bin Drucken ein Zeichen in einer Zeit. 1616 01:12:27,510 --> 01:12:29,100 Jetzt werden wir nicht ins Detail gehen heute zu diesem Thema. 1617 01:12:29,100 --> 01:12:31,610 Aber ich vorhin dieser Prüfung hier gelöscht. 1618 01:12:31,610 --> 01:12:36,310 Es stellt sich heraus, dass, wenn der Benutzer fehlverhaltenden, kontradiktorische oder einfach 1619 01:12:36,310 --> 01:12:41,780 verwirrt, kann man eigentlich nicht um eine Reihe von einiger Länge geben. 1620 01:12:41,780 --> 01:12:43,640 Wenn Sie die falsche Taste drücken auf der Tastatur, können Sie geben, 1621 01:12:43,640 --> 01:12:44,390 keine Zeichenfolge überhaupt. 1622 01:12:44,390 --> 01:12:47,790 Oder wenn Sie bösartige sind, könnten Sie versuchen, in einem Gigabyte im Wert von einer fügen 1623 01:12:47,790 --> 01:12:49,380 Essay zu diesen String zu füllen. 1624 01:12:49,380 --> 01:12:52,060 Und wenn der Computer über genügend Arbeitsspeicher ausgeführt, stellt sich heraus, dass wir gehen 1625 01:12:52,060 --> 01:12:54,310 um wieder diesen besonderen Wert namens null. 1626 01:12:54,310 --> 01:12:57,550 So jetzt wissen nur, dass es diese besondere Wert namens null, dass 1627 01:12:57,550 --> 01:13:01,000 wird es uns ermöglichen zu überprüfen, wenn wir unterwegs sind Speicher, unter anderem. 1628 01:13:01,000 --> 01:13:07,330 >> Aber wenn ich eröffnen nun string2, bemerkt ein Unterschied. 1629 01:13:07,330 --> 01:13:09,760 Unsere einzige Unterschied hier mit string2. 1630 01:13:09,760 --> 01:13:13,260 Mit string2 ist dies for-Schleife ein wenig anders. 1631 01:13:13,260 --> 01:13:16,350 Lassen Sie mich löschen Nullen, so dass wir über jene andere Zeit sprechen kann. 1632 01:13:16,350 --> 01:13:18,460 Aber was ist anders an der for-Schleife dieses Mal? 1633 01:13:21,580 --> 01:13:23,160 Und ich kann zurück zu dem vorherigen Beispiel. 1634 01:13:23,160 --> 01:13:24,800 Also das ist die zweite Version. 1635 01:13:24,800 --> 01:13:27,020 Dies ist die Version ein. 1636 01:13:27,020 --> 01:13:31,935 Eins, zwei, eins zwei. 1637 01:13:35,030 --> 01:13:38,240 Also das strlen Anruf ist wo? 1638 01:13:38,240 --> 01:13:40,420 Es ist im ersten Teil der for-Schleife. 1639 01:13:40,420 --> 01:13:43,060 Irgendwelche Gedanken, warum ich das tue? 1640 01:13:43,060 --> 01:13:43,690 Yeah. 1641 01:13:43,690 --> 01:13:46,010 [Unverständlich] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. MALAN: Also haben wir nicht rufen Sie die Funktion jede einzelne Zeit. 1643 01:13:47,630 --> 01:13:48,040 Genau. 1644 01:13:48,040 --> 01:13:50,350 Erinnern Sie sich an für Loops, dass sie super einfach sind, wenn Sie eine Art 1645 01:13:50,350 --> 01:13:52,180 verstehen, dass dies die Initialisierung, die 1646 01:13:52,180 --> 01:13:53,330 Zustand, und das Update. 1647 01:13:53,330 --> 01:13:55,430 Das Problem ist, dass die Bedingung auf jeden Fall 1648 01:13:55,430 --> 01:13:56,600 Iteration der Schleife. 1649 01:13:56,600 --> 01:13:59,930 Und so in diesem Beispiel hier ist das, was schlecht über die Tatsache, 1650 01:13:59,930 --> 01:14:03,500 dass dies mein Zustand? 1651 01:14:03,500 --> 01:14:05,920 Du nennst strlen wieder und wieder und wieder. 1652 01:14:05,920 --> 01:14:08,990 Aber sobald ich in DAVID eingegeben, ist die Länge der Zeichenkette fünf. 1653 01:14:08,990 --> 01:14:11,560 Und es wird nicht auf jeder Iteration der Schleife ändern, da die 1654 01:14:11,560 --> 01:14:15,560 Zeichenfolge noch D-A-V-I-D. So ist dies ein Hinweis auf, was los ist, um ein zu 1655 01:14:15,560 --> 01:14:19,650 zunehmend wichtige Idee als Design-Entscheidung bekannt, wo - nur nicht 1656 01:14:19,650 --> 01:14:21,640 machen den Computer zu tun unnötige Arbeit. 1657 01:14:21,640 --> 01:14:25,630 >> Wie nun eine Vorschau auf pset 2, pset 2 in der Standard Edition ist 1658 01:14:25,630 --> 01:14:28,850 werde dich herausfordern tatsächlich umzusetzen gewisse Anzahl von Ziffern, einige 1659 01:14:28,850 --> 01:14:32,650 Anzahl der Verschlüsselungs-Algorithmen, so dass Sie sowohl verschlüsseln und entschlüsseln 1660 01:14:32,650 --> 01:14:35,530 geheime Botschaften, ähnlich wie das ein Ralphie dort decodiert. 1661 01:14:35,530 --> 01:14:38,720 In der Hacker-Ausgabe pset 2, werden wir noch ein wenig weiter gehen. 1662 01:14:38,720 --> 01:14:42,010 Wir gehen Hand Sie eine Datei von einem tatsächlichen Computer-System, das a enthält 1663 01:14:42,010 --> 01:14:45,690 ganze Reihe von Benutzernamen und tatsächlichen verschlüsselte Passwörter und die Herausforderung 1664 01:14:45,690 --> 01:14:49,110 Für die Hacker Edition wird es sein, die Passwörter und Gestalt zu knacken 1665 01:14:49,110 --> 01:14:53,060 was Kryptographie oder welches Geheimnis wurde tatsächlich verwendet 1666 01:14:53,060 --> 01:14:55,080 erzeugen die Passwörter. 1667 01:14:55,080 --> 01:14:58,360 Und wir werden dies durch den Einsatz einer neuen Funktion hier C, dass ich gebe zu tun 1668 01:14:58,360 --> 01:15:02,200 Sie nur eine Demo, wie Befehlszeilenargumente bekannt. 1669 01:15:02,200 --> 01:15:05,930 >> So stellt sich heraus, wie einige von euch im Schnitt oder in Lehrbüchern gesehen haben, 1670 01:15:05,930 --> 01:15:09,850 Haupt nicht immer für nichtig in Klammern sein. 1671 01:15:09,850 --> 01:15:14,060 Es stellt sich heraus, dass Haupt auch wie folgt geschrieben werden, mit zwei Argumenten, 1672 01:15:14,060 --> 01:15:19,690 argc und argv, wo argc ist die Anzahl der Wörter, die Sie nach Typ 1673 01:15:19,690 --> 01:15:21,940 den Namen des Programms auf der Kommandozeile. 1674 01:15:21,940 --> 01:15:24,550 Und argv ist die tatsächlichen Worte. 1675 01:15:24,550 --> 01:15:29,470 Und wie die eckigen Klammern gibt vorschlagen, ist argv offenbar ein Array. 1676 01:15:29,470 --> 01:15:33,720 Es wird ein String nach einer Zeichenfolge nach einer Zeichenkette in Erinnerung sein. 1677 01:15:33,720 --> 01:15:36,170 Also, was wir in der Lage sein zu tun, beginnend mit pset 2, 1678 01:15:36,170 --> 01:15:37,310 etwas wie dieses. 1679 01:15:37,310 --> 01:15:42,450 Wenn ich argv1 zu machen, ist das ein Beispiel wir wieder kommen werde am Montag, und führen Sie 1680 01:15:42,450 --> 01:15:45,180 es feststellen, dass es nicht scheinen, um etwas noch nicht. 1681 01:15:45,180 --> 01:15:47,050 Es gibt einfach seine eigenen Namen. 1682 01:15:47,050 --> 01:15:53,220 Aber wenn ich Abschied Klasse, beachten Sie, dass dieses Programm offenbar iteriert 1683 01:15:53,220 --> 01:15:57,030 gegenüber jedem der Worte, die bei der Eingabeaufforderung eingegeben wurden. 1684 01:15:57,030 --> 01:16:02,050 Und die Mittel, mit denen wir den Zugang zu Worte, die der Benutzer gewinnen wird 1685 01:16:02,050 --> 01:16:06,780 eingegeben an der Eingabeaufforderung ist durch Änderung main, ab diesem Wochenende, von int 1686 01:16:06,780 --> 01:16:10,710 main (void) auf int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Und so wird Befehlszeilenargumente geboren werden. 1688 01:16:13,700 --> 01:16:17,210 Und wenn Sie wirklich anspruchsvolle bekommen an dieser, werden Sie in der Lage sein zu schreiben 1689 01:16:17,210 --> 01:16:21,370 wirklich trippy Programme wie dieses hier, das darüber hinaus geht 1690 01:16:21,370 --> 01:16:25,520 einige der Funktionen haben wir bisher getan, aber alle ziemlich mächtig. 1691 01:16:25,520 --> 01:16:27,330 >> Also werden wir dies mit diesen verlassen auf dem Bildschirm. 1692 01:16:27,330 --> 01:16:29,160 Und wir werden uns am Montag sehen.