1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> Sprecher 1: Hallo allerseits. 3 00:00:05,680 --> 00:00:07,530 Wir werden, um loszulegen. 4 00:00:07,530 --> 00:00:09,330 Ich glaube, die Leute sind immer noch Filterung in zu sein. 5 00:00:09,330 --> 00:00:12,840 Aber im Interesse der Zeit, so können wir erhalten Sie Jungs von hier auf Zeit, 6 00:00:12,840 --> 00:00:14,110 wir gehen zu starten. 7 00:00:14,110 --> 00:00:18,780 Also willkommen in der CS50 Quiz 0 Bewertung. 8 00:00:18,780 --> 00:00:23,020 Für diejenigen unter Ihnen, die nicht erkannt haben, noch haben Sie eine Frage am Mittwoch. 9 00:00:23,020 --> 00:00:25,700 Woo-Hoo. 10 00:00:25,700 --> 00:00:29,780 >> Wenn Sie noch nicht begonnen haben oder noch studieren haben noch nicht begriffen, dass diese vorhanden ist, 11 00:00:29,780 --> 00:00:34,070 Vergangenheit Quiz und alle Informationen über die Ihr Quiz sind auf cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Es gibt ein paar ziemlich gute Sachen dort, Vergangenheit Quiz aus der letzten 10 13 00:00:38,090 --> 00:00:43,760 Jahre sowie Informationen über dieses Quiz und Themen 14 00:00:43,760 --> 00:00:46,250 dass abgedeckt werden. 15 00:00:46,250 --> 00:00:48,980 Also lassen Sie uns beginnen. 16 00:00:48,980 --> 00:00:54,240 >> So euch erinnern sich vielleicht daran, die erste Tag der Klasse David hatte diese Lampen auf. 17 00:00:54,240 --> 00:00:59,650 So im Wesentlichen alles, was geht unter der Haube eines Computers 18 00:00:59,650 --> 00:01:00,860 in binärer getan. 19 00:01:00,860 --> 00:01:04,080 Binary bedeutet, was es klingt wie, 0 und 1 ist. 20 00:01:04,080 --> 00:01:09,290 Es hat zwei Werte, dass dargestellt werden kann. 21 00:01:09,290 --> 00:01:14,675 >> So wie in den ersten Tag des § als David machte Licht 22 00:01:14,675 --> 00:01:21,990 Glühbirne auf darstellen, oder 1, unser Computer versteht binär als 0 und 23 00:01:21,990 --> 00:01:24,110 1 ist, ein oder aus. 24 00:01:24,110 --> 00:01:25,360 Grundlagen der Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Jeder Ort vertreten ist in der Basis zwei. 27 00:01:32,470 --> 00:01:36,260 So können Sie 2 bis 0 auf der ADD 1 auf die 2 bis hinauf. 28 00:01:36,260 --> 00:01:41,970 >> Zu berechnen, was Ihre binäre ist, dezimal, folgen Sie einfach dieser Gleichung 29 00:01:41,970 --> 00:01:42,840 Typ Sache. 30 00:01:42,840 --> 00:01:49,510 Wenn Sie eine 1 in einem dieser Orte haben, Sie vermehren sich durch was auch immer 31 00:01:49,510 --> 00:01:53,820 Basis ist es in, fügen Sie es auf, und Sie bekommen die dezimal. 32 00:01:53,820 --> 00:01:57,930 Also das ist, wie man zählt bis 5 in binär. 33 00:01:57,930 --> 00:02:01,400 Genau wie das, was wir tun, auf die letzten Folie, das ist, wie Sie es 34 00:02:01,400 --> 00:02:02,650 1 bis 5 darstellen. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Ebenso wie nur Sie hinzufügen können und subtrahieren dezimal oder Basis 10, oder 37 00:02:09,660 --> 00:02:13,040 wirklich keine Basis, auf hinzufügen können und subtrahieren in binär. 38 00:02:13,040 --> 00:02:18,400 Genau das, was man erwarten würde, wenn Sie Fügen Sie die beiden auf, wenn er größer ist gleich 39 00:02:18,400 --> 00:02:24,220 als 1 ist, tragen Sie eine 1 ist, machen es zu einem 0, und tun dem Zusatz, dass Art und Weise, nur 40 00:02:24,220 --> 00:02:29,910 wie Sie mit regelmäßigen erwarten Dezimalzahl oder eine andere Basis. 41 00:02:29,910 --> 00:02:30,970 Cool. 42 00:02:30,970 --> 00:02:35,140 >> So wie ich schon sagte, alles, was geht unter der Haube unseres Computers 43 00:02:35,140 --> 00:02:37,560 in 0-en und 1-en oder binär erfolgt. 44 00:02:37,560 --> 00:02:43,470 So, wie wir zum Ausdruck bringen, zum Beispiel, Buchstaben oder Zahlen oder Zeichen? 45 00:02:43,470 --> 00:02:45,560 Und die Antwort darauf ist ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII ist eine Zuordnung zwischen den Zeichen dass wir in der Regel in der zu sehen 47 00:02:49,380 --> 00:02:53,360 Englisch Sprache wie von A, B, C ist, unterstreichen, Bindestriche und 48 00:02:53,360 --> 00:02:54,910 so etwas. 49 00:02:54,910 --> 00:02:57,260 Und es Karten, die zu einem ASCII-Wert. 50 00:02:57,260 --> 00:03:03,080 Eine ASCII-Wert ist nur eine Zahl, die können von Ihrem Computer zu verstehen. 51 00:03:03,080 --> 00:03:07,430 Und genau wie Sie zusätzlich tun können, und Subtraktion mit Zahlen, die Sie tun können 52 00:03:07,430 --> 00:03:10,890 sie mit ASCII-Werte. 53 00:03:10,890 --> 00:03:14,050 >> So dass in diesem Beispiel, was wird diese ausdrucken? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Ja, so einfach A Raum B Raum C Raum D. Wo hast meine Maus gehen? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Beachten Sie einen int bei 65 zu definieren. 58 00:03:43,380 --> 00:03:47,080 Und wenn Sie, dass mit Hilfe drucken Prozent C, werde es, dass als zu interpretieren 59 00:03:47,080 --> 00:03:49,330 Charakter und druckt A. 60 00:03:49,330 --> 00:03:52,800 >> Ebenso können Sie erklären können es als ein Zeichen. 61 00:03:52,800 --> 00:03:56,860 Und wenn Sie es mit Hilfe Prozent drucken C, es werde das interpretieren, wie 62 00:03:56,860 --> 00:04:05,240 Prozent D. Und wie können Sie eine hinzufügen Nummer, können Sie hinzufügen Zeichen sind 63 00:04:05,240 --> 00:04:06,878 ASCII-Werte in diesem Fall. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> So ein wenig Zeiger für alle. 66 00:04:16,130 --> 00:04:19,610 5, als String, nicht tatsächlich gleich 5. 67 00:04:19,610 --> 00:04:26,610 Also, wie könnten wir wandeln die String 5 auf die ganze Zahl 5? 68 00:04:26,610 --> 00:04:28,930 Irgendwelche Ideen? 69 00:04:28,930 --> 00:04:31,630 Ja. 70 00:04:31,630 --> 00:04:36,720 >> Also, wenn wir 5 als String, können wir 0 zu subtrahieren. 71 00:04:36,720 --> 00:04:37,820 Und das wird uns geben 5. 72 00:04:37,820 --> 00:04:41,670 Und ähnlich, wenn wir 5 als ein integer, hinzufügen, dass auf den String 0. 73 00:04:41,670 --> 00:04:43,112 Und das gibt uns die Zeichenfolge 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Cool. 76 00:04:48,350 --> 00:04:52,940 >> Nun, zurück zu erinnern, wo ein Vortrag sprachen wir über Algorithmen. 77 00:04:52,940 --> 00:04:57,260 Also, wie wollen wir eigentlich einen Computer interessante Dinge zu tun? 78 00:04:57,260 --> 00:05:00,460 Sie wissen, nur Addition und Subtraktion Zahlen und Druck Dinge nicht 79 00:05:00,460 --> 00:05:01,730 so spannend. 80 00:05:01,730 --> 00:05:04,620 In der Regel wollen wir unser Computer an führen eine Art von Algorithmus. 81 00:05:04,620 --> 00:05:07,820 Etwas mehr komplexe als nur einfache Arithmetik. 82 00:05:07,820 --> 00:05:11,930 >> Ein Algorithmus ist nur eine Schritt für Schritt-Set von Anweisungen, wie Sie ausführen 83 00:05:11,930 --> 00:05:14,640 eine bestimmte task-- 84 00:05:14,640 --> 00:05:15,660 Genau wie ein Rezept. 85 00:05:15,660 --> 00:05:19,990 Sie könnten der erste Tag des erinnern Klasse, wo David hatte uns zählen ein Zimmer 86 00:05:19,990 --> 00:05:22,550 von Menschen und wie viele Menschen waren im Zimmer. 87 00:05:22,550 --> 00:05:24,480 Sie vielleicht Zählung verwendet werden einen nach dem anderen. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 In diesem Fall ist ein linearer Algorithmus. 90 00:05:28,010 --> 00:05:31,710 >> Aber David eingeführt einen Algorithmus für Sie, die Leute im Zimmer angerechnet 91 00:05:31,710 --> 00:05:37,340 wo jeder steht auf, sagen Sie Ihrem Anzahl an eine andere Person, hinzufügen, dass 92 00:05:37,340 --> 00:05:39,200 Anzahl auf, und eine Person setzt sich. 93 00:05:39,200 --> 00:05:40,410 Und Sie das wiederholen. 94 00:05:40,410 --> 00:05:42,910 Das ist eine Art von Algorithmus. 95 00:05:42,910 --> 00:05:47,520 Wir können, wie effizient eine Analyse Algorithmus auf Basis ihrer Laufzeit. 96 00:05:47,520 --> 00:05:49,680 Aber wir werden ein wenig sprechen dazu später mehr. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> So können auch alle Algorithmen in Pseudocode beschrieben werden. 99 00:05:57,090 --> 00:06:01,120 Pseudocode ist nur eine englische wie Syntax verwendet werden, um darzustellen 100 00:06:01,120 --> 00:06:02,420 Programmiersprache. 101 00:06:02,420 --> 00:06:06,070 Zum Beispiel, wenn man wollte, um einen Benutzer zu fragen Zu meinen Lieblingszahl erraten, wir 102 00:06:06,070 --> 00:06:08,390 haben könnten als solche Pseudocode. 103 00:06:08,390 --> 00:06:09,850 >> Holen Sie sich ein Nutzer zu erraten. 104 00:06:09,850 --> 00:06:13,570 Wenn die Vermutung richtig ist, sagen Sie ihnen, sie korrekt sind, sonst sagen Sie ihnen, 105 00:06:13,570 --> 00:06:15,560 sie sind nicht korrekt. 106 00:06:15,560 --> 00:06:22,530 Und Pseudocode ist ein Weg vorge repräsentieren eine Idee oder einen Algorithmus. 107 00:06:22,530 --> 00:06:26,910 So, jetzt wollen wir vielleicht wirklich schreiben dies in der Sprache, die der Computer 108 00:06:26,910 --> 00:06:27,980 vielleicht Verständnis. 109 00:06:27,980 --> 00:06:35,660 So konnten wir unsere Pseudocode schreiben und interpretieren, dass in den Quellcode. 110 00:06:35,660 --> 00:06:41,320 >> So weit, muss im Quellcode haften zu einer bestimmten Syntax 111 00:06:41,320 --> 00:06:42,490 Programmiersprache. 112 00:06:42,490 --> 00:06:45,430 Und so weit, in CS50, haben wir worden, die meist c. 113 00:06:45,430 --> 00:06:48,320 So könnte dies Quellcode für C liegen. 114 00:06:48,320 --> 00:06:51,440 Später im Verlauf, Sie kommen nachts Kontakt mit anderen Programmier 115 00:06:51,440 --> 00:06:52,480 Sprachen wie PHP. 116 00:06:52,480 --> 00:06:57,540 Oder wenn Sie sogar anderen Klassen, die Sie vielleicht Java, Python oder sogar OCML tun. 117 00:06:57,540 --> 00:07:01,570 Aber in unserer Programmiersprache C, das ist wie wir den Quellcode für schreiben 118 00:07:01,570 --> 00:07:04,760 Der Pseudocode-Algorithmus, dass Ich habe gerade vorher beschrieben. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Wie funktioniert Ihr Computer tatsächlich das verstehen? 121 00:07:11,430 --> 00:07:14,490 Wie ich schon sagte, ist es eigentlich nur versteht Nullen und Einsen. 122 00:07:14,490 --> 00:07:17,880 Also wie kann es von der Quelle zu bekommen Code, um etwas, das sein kann, 123 00:07:17,880 --> 00:07:18,960 verstanden? 124 00:07:18,960 --> 00:07:22,920 Nun, wir haben etwas rief ein Compiler. 125 00:07:22,920 --> 00:07:28,450 >> Wenn Sie in den meisten zurück erinnern Ihre pset- eine Art von Programm hatten Sie 126 00:07:28,450 --> 00:07:30,370 in einem Punkt c-Datei geschrieben. 127 00:07:30,370 --> 00:07:32,550 Und dann machen Sie geben würde. 128 00:07:32,550 --> 00:07:35,970 Also, was ist zu machen zu tun? 129 00:07:35,970 --> 00:07:39,970 >> Sie können eingeben, um Ihre kompilieren Programm, weil someone-- 130 00:07:39,970 --> 00:07:42,730 wer schrieb Ihre p Satz; wahrscheinlich David-- 131 00:07:42,730 --> 00:07:44,190 erstellt ein Makefile. 132 00:07:44,190 --> 00:07:51,320 Und das sagt zu, zu wissen, zu laufen Ihre Compiler, genannt Klappern, das wird 133 00:07:51,320 --> 00:07:55,560 kompilieren den Quellcode zu Objekt Code, der Nullen und Einsen ist, 134 00:07:55,560 --> 00:07:57,720 dass Ihr Computer versteht. 135 00:07:57,720 --> 00:08:01,610 Aber ein wenig später, gehen wir mehr in die Tiefe zu Compiler. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> So erinnern pSoll 0, where-- ja, Sie haben eine Frage? 138 00:08:10,800 --> 00:08:11,620 >> ZIELGRUPPE: [unverständlich]? 139 00:08:11,620 --> 00:08:12,490 >> Sprecher 1: Ja. 140 00:08:12,490 --> 00:08:14,960 Ich denke, dass sie tatsächlich sollte online sein. 141 00:08:14,960 --> 00:08:15,120 Ja. 142 00:08:15,120 --> 00:08:16,572 >> ZIELGRUPPE: Ist es wie [unverständlich]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> Sprecher 1: Es ist nicht. 145 00:08:20,830 --> 00:08:25,810 Die sind auf cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> ZIELGRUPPE: Slash Quiz, Schrägstrich 2013 Schrägstrich 0, und nur durch klicken 147 00:08:32,900 --> 00:08:35,956 Quiz Quiz 2013 0, Rezensionsteil gleitet. 148 00:08:35,956 --> 00:08:40,380 >> Sprecher 1: Ja, also, wenn Sie Jungs wollen nach oben ziehen und schauen Sie es auf Ihrem 149 00:08:40,380 --> 00:08:42,740 eigenen Computer, das ist auch in Ordnung. 150 00:08:42,740 --> 00:08:43,130 Sag das noch einmal. 151 00:08:43,130 --> 00:08:44,546 >> ZIELGRUPPE: [unverständlich]. 152 00:08:44,546 --> 00:08:48,780 >> Sprecher 1: Ja, [unverständlich] die Dummy-Variable. 153 00:08:48,780 --> 00:08:49,644 Oh, ja? 154 00:08:49,644 --> 00:08:51,372 >> ZIELGRUPPE: [unverständlich]? 155 00:08:51,372 --> 00:08:54,300 >> Sprecher 1: Nein, Streiks sind nicht auf die Prüfung. 156 00:08:54,300 --> 00:08:55,950 Sorry, ihre Frage war, Streiks in der Prüfung. 157 00:08:55,950 --> 00:08:59,530 Und es ist nicht. 158 00:08:59,530 --> 00:09:05,780 So pSoll 0, Jungs sollten alle etwas mit kratz implementiert. 159 00:09:05,780 --> 00:09:13,100 Und wir lernten einige grundlegende Programmier Bausteine ​​mit Kratzer. 160 00:09:13,100 --> 00:09:15,590 >> Werfen wir also einen Blick auf einige dieser Bausteine 161 00:09:15,590 --> 00:09:18,170 dass ein Programm zu machen. 162 00:09:18,170 --> 00:09:20,570 Erste ist Booleschen Ausdruck. 163 00:09:20,570 --> 00:09:24,540 Boolesche Ausdrücke sind Einsen und 0 oder irgend etwas, das hat 164 00:09:24,540 --> 00:09:25,700 zwei mögliche Werte. 165 00:09:25,700 --> 00:09:30,320 In diesem Fall, wahr oder falsch, oder ausschalten, und ja oder nein. 166 00:09:30,320 --> 00:09:35,390 Ein Beispiel für eine einfache, sehr einfach, Programm, das eine Boolesche verwendet 167 00:09:35,390 --> 00:09:39,140 Ausdruck hier oben. 168 00:09:39,140 --> 00:09:43,220 >> Also, um für boolesche Ausdrücke nützlich sein, haben wir Boolesche Operatoren. 169 00:09:43,220 --> 00:09:48,920 Diese Operatoren sind, die verwendet werden können, auf bestimmte Werte zu vergleichen. 170 00:09:48,920 --> 00:09:52,820 So haben wir und oder nicht gleich, kleiner oder gleich, größer oder 171 00:09:52,820 --> 00:09:55,130 gleich und kleiner als oder mehr. 172 00:09:55,130 --> 00:09:59,060 Aber diese Betreiber sind nicht sehr nützlich es sei denn, wir können sie in Kombination 173 00:09:59,060 --> 00:10:00,320 Bedingungen. 174 00:10:00,320 --> 00:10:04,370 >> So euch vielleicht daran erinnern, von Grund auf neu und von Ihrem p setzt, dass wir 175 00:10:04,370 --> 00:10:05,400 hatte Bedingungen. 176 00:10:05,400 --> 00:10:09,710 Sie sind im Wesentlichen wie Gabeln in die Logik Ihres Programms, 177 00:10:09,710 --> 00:10:12,670 führt, je nachdem ob eine Bedingung erfüllt ist. 178 00:10:12,670 --> 00:10:18,150 So eine der Bedingungen, die wir hatten viele Male in diesem Kurs verwendet wird, ist die 179 00:10:18,150 --> 00:10:21,470 wenn sonst, wenn, und sonst Bedingungen. 180 00:10:21,470 --> 00:10:24,060 >> Hier ist ein Beispiel dafür, wie Sie können diese verwenden. 181 00:10:24,060 --> 00:10:28,430 Hat jemand den Unterschied zwischen wissen nur verwenden, wenn alle Aussagen 182 00:10:28,430 --> 00:10:32,530 Weg hinunter Verse if, else, wenn, und sonst kombiniert? 183 00:10:32,530 --> 00:10:33,013 Ja? 184 00:10:33,013 --> 00:10:34,263 >> ZIELGRUPPE: [unverständlich]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> Sprecher 1: Genau. 187 00:10:42,160 --> 00:10:50,210 Also, wenn ich hatte, wenn den ganzen Weg hinunter diese Weg, auch wenn diese Bedingung zurück 188 00:10:50,210 --> 00:10:52,800 wahr, es wird immer noch weiter Testen der nächsten zwei. 189 00:10:52,800 --> 00:11:00,120 Während bei einer else-if, else Rechnung, wenn die, die true zurückgibt, 190 00:11:00,120 --> 00:11:02,640 die anderen werden nicht geprüft. 191 00:11:02,640 --> 00:11:05,955 Haben Sie Fragen dazu? 192 00:11:05,955 --> 00:11:06,890 Cool. 193 00:11:06,890 --> 00:11:12,240 >> So können Sie eine if-else eines anderes zu verwenden Aussage, wenn Sie wissen, dass es nur kann 194 00:11:12,240 --> 00:11:14,470 Seien Sie einer dieser Fälle. 195 00:11:14,470 --> 00:11:21,550 So dass wir, wenn x kleiner als 0 ist, ist es auf jeden Fall nicht zu sein 196 00:11:21,550 --> 00:11:22,890 größer als 0 ist. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Als nächstes ein weiterer Baustein dass wir gelernt, sind Schleifen. 199 00:11:31,480 --> 00:11:33,310 Wir haben drei Arten von Schleifen. 200 00:11:33,310 --> 00:11:35,830 For-Schleifen, while-Schleifen, und tun, while-Schleifen. 201 00:11:35,830 --> 00:11:38,730 Und in der Regel, wenn Sie sich hinsetzen, um etwas schreiben, um zu entscheiden, haben Sie 202 00:11:38,730 --> 00:11:40,060 welche der drei, die Sie verwenden möchten. 203 00:11:40,060 --> 00:11:41,900 So, wie wir entscheiden, welche? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Wir verwenden in der Regel eine for-Schleife, wenn wir wissen, wie oft wir wollen laufen 206 00:11:48,790 --> 00:11:53,650 durch etwas oder wie oft wollen wir eine Aufgabe zu erfüllen. 207 00:11:53,650 --> 00:11:58,830 Wir verwenden while-Schleifen, wenn wir einige Bedingung, um wahr zu Laufen zu halten zu sein. 208 00:11:58,830 --> 00:12:03,730 Und wir benutzen, während sehr ähnlich Weile, aber wir unseren Code zu ausführen möchten 209 00:12:03,730 --> 00:12:04,880 mindestens einmal. 210 00:12:04,880 --> 00:12:09,410 >> So zu tun, während, was auch immer in der do ist wird immer mindestens ein Mal ausgeführt. 211 00:12:09,410 --> 00:12:13,120 Der Erwägung, dass mit der Zeit, es kann gar nicht laufen, wenn die 212 00:12:13,120 --> 00:12:15,490 Bedingung nicht erfüllt ist. 213 00:12:15,490 --> 00:12:16,740 Haben Sie Fragen dazu? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> So Struktur einer for-Schleife. 216 00:12:22,860 --> 00:12:23,620 Ihr habt alle gesehen. 217 00:12:23,620 --> 00:12:25,320 Sie initialisieren. 218 00:12:25,320 --> 00:12:26,600 Sie haben eine Art von Zustand. 219 00:12:26,600 --> 00:12:32,340 So zum Beispiel könnten wir initialisieren wie für i gleich 0 ist. 220 00:12:32,340 --> 00:12:34,040 i kleiner als 10 ist. 221 00:12:34,040 --> 00:12:35,442 Und i ++. 222 00:12:35,442 --> 00:12:39,010 Sehr einfach eine, die wir getan haben. 223 00:12:39,010 --> 00:12:42,210 >> Für eine while-Schleife, ähnlich, haben Sie eine Art der Initialisierung haben, 224 00:12:42,210 --> 00:12:44,980 eine Art von Zustand und eine Art Update. 225 00:12:44,980 --> 00:12:51,990 So können wir unsere for-Schleife auch umsetzen als while-Schleife mit diesem. 226 00:12:51,990 --> 00:12:56,000 Und in ähnlicher Weise mit einer do while-Schleife, wir könnten einige Initialisierung haben, 227 00:12:56,000 --> 00:12:58,640 etwas ausführen, aktualisieren Sie es, und dann überprüfen Sie die Bedingung. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> So, jetzt funktioniert. 230 00:13:05,140 --> 00:13:06,460 Wir haben alles zusammen. 231 00:13:06,460 --> 00:13:10,140 Wir möchten Sie vielleicht einige schreiben Art von Funktion. 232 00:13:10,140 --> 00:13:12,790 Gemeinsame Funktion, die Sie haben bereits gesehen, ist die Haupt. 233 00:13:12,790 --> 00:13:13,770 Haupt eine Funktion ist. 234 00:13:13,770 --> 00:13:16,160 Es hat einen Rückgabetyp int. 235 00:13:16,160 --> 00:13:18,470 Es hat einen Funktionsnamen, Haupt. 236 00:13:18,470 --> 00:13:20,810 Und es hat Argumente argc und argv. 237 00:13:20,810 --> 00:13:24,040 So ist nur eine Hauptfunktion. 238 00:13:24,040 --> 00:13:27,230 >> Andere Funktionen, die Sie verwendet haben, printf-- printf ist eine function-- 239 00:13:27,230 --> 00:13:29,330 Getint, toupper. 240 00:13:29,330 --> 00:13:32,010 Aber diese zufällig gewesen sein von uns umgesetzt 241 00:13:32,010 --> 00:13:33,270 eine Art Bibliothek. 242 00:13:33,270 --> 00:13:37,400 Wenn euch daran erinnern, wie Diese CS50.h Bibliothek oder die 243 00:13:37,400 --> 00:13:38,510 Standard-I / O-Bibliothek. 244 00:13:38,510 --> 00:13:39,200 Ja, in Frage zu stellen? 245 00:13:39,200 --> 00:13:41,610 >> ZIELGRUPPE: Ist Haupt nur innewohn c? 246 00:13:41,610 --> 00:13:44,740 Ist es nur eine Art [unverständlich]? 247 00:13:44,740 --> 00:13:47,370 >> Sprecher 1: Die Frage ist, wenn Haupt ist inhärent in c. 248 00:13:47,370 --> 00:13:51,460 Und ja, alle Funktionen eine Hauptfunktion. 249 00:13:51,460 --> 00:13:55,290 Es ist eine Art, die für den Computer zu wissen, wo Sie anfangen 250 00:13:55,290 --> 00:13:55,993 Ausführen des Codes. 251 00:13:55,993 --> 00:13:58,108 >> ZIELGRUPPE: Also würden Sie nicht [unverständlich]? 252 00:13:58,108 --> 00:13:59,480 >> Sprecher 1: Nein. 253 00:13:59,480 --> 00:14:00,760 Noch Fragen? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Cool. 256 00:14:04,770 --> 00:14:08,050 So wie können Sie eine Funktion verwenden das ist für Sie geschrieben, können Sie auch 257 00:14:08,050 --> 00:14:10,380 schreiben Sie Ihre eigene Funktion. 258 00:14:10,380 --> 00:14:17,050 Dies ist eine Funktion, dass jemand geschrieben haben, um die Lautstärke zu berechnen 259 00:14:17,050 --> 00:14:18,395 einer q, zum Beispiel. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Es gibt einen Rückgabetyp hier, in diesem Fall int, unsere Funktionsnamen q und unsere 262 00:14:29,500 --> 00:14:31,360 Liste der Parameter. 263 00:14:31,360 --> 00:14:34,550 >> Und beachten Sie, dass Sie die Daten zu schreiben Typ der Parameter, den Sie möchten 264 00:14:34,550 --> 00:14:38,660 verwenden oder aber die Funktion nicht wissen, welche Art von 265 00:14:38,660 --> 00:14:41,650 Parameter sollte ich akzeptieren. 266 00:14:41,650 --> 00:14:48,110 So, in diesem Fall soll eine ganze Zahl als unsere Eingabe. 267 00:14:48,110 --> 00:14:50,390 Warum also könnten wir wollen Funktionen nutzen? 268 00:14:50,390 --> 00:14:52,800 >> Zunächst einmal, toll für Organisation. 269 00:14:52,800 --> 00:14:56,350 Sie helfen brechen Sie den Code in mehr organisiert Stücke und machen 270 00:14:56,350 --> 00:14:57,960 es leichter zu lesen. 271 00:14:57,960 --> 00:14:59,760 Vereinfachung. 272 00:14:59,760 --> 00:15:01,740 Das ist gut für das Design. 273 00:15:01,740 --> 00:15:04,570 Wenn Sie lesen, ein Stück Code sind und die Hauptfunktion ist wirklich, 274 00:15:04,570 --> 00:15:07,750 wirklich lange, es schwieriger sein könnte Grund über das, was vor sich geht. 275 00:15:07,750 --> 00:15:11,710 Also, wenn Sie es nach unten in Funktionen zu brechen, es leichter zu lesen sein könnte. 276 00:15:11,710 --> 00:15:12,750 Und wiederverwenden-Fähigkeit. 277 00:15:12,750 --> 00:15:16,940 Wenn Sie ein Stück Code, dass Befinden genannt, oder führen Sie mehrmals, 278 00:15:16,940 --> 00:15:20,690 statt umgeschrieben, die Code 10-mal Ihre Hauptfunktion, könnte man 279 00:15:20,690 --> 00:15:21,440 möchte es wiederverwenden. 280 00:15:21,440 --> 00:15:25,740 Und dann jedes Mal, dass Sie verwenden müssen Stück Code, rufen Sie die Funktion. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> So, jetzt, wenn wir wieder zu kratzen erinnern, Wir sprachen auch über ein paar Konzepte, 283 00:15:35,380 --> 00:15:37,680 von denen eine Gewinde. 284 00:15:37,680 --> 00:15:41,120 Gewinde ist das Konzept der Mehrfach Codesequenzen 285 00:15:41,120 --> 00:15:43,040 Ausführen gleichzeitig. 286 00:15:43,040 --> 00:15:47,490 Also denken Sie zurück an Tag eins, wo David hatte euch zählen von der Anzahl der 287 00:15:47,490 --> 00:15:48,440 Personen im Raum. 288 00:15:48,440 --> 00:15:50,550 >> Wesentlichen, was los war auf alles von euch waren 289 00:15:50,550 --> 00:15:52,370 laufen separate Threads. 290 00:15:52,370 --> 00:15:55,540 Und diese Themen wurden zusammen kommen , eine Art von Antwort zu bekommen. 291 00:15:55,540 --> 00:15:58,890 Auch in Scratch, wenn Sie mehrere Sprites, können Sie 292 00:15:58,890 --> 00:16:01,070 haben eine Katze und einen Hund. 293 00:16:01,070 --> 00:16:08,770 Und sie würden gleichzeitig sein den Betrieb ihrer eigenen Skripten. 294 00:16:08,770 --> 00:16:10,020 Das ist ein Beispiel von Gewinden. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> Und das andere Konzept, das war Kratz eingeführt war Veranstaltungen. 297 00:16:18,000 --> 00:16:22,550 Und Ereignisse sind, wenn mehrere Teile Ihr Code miteinander kommunizieren. 298 00:16:22,550 --> 00:16:26,840 In Scratch, das war, als Sie verwendet die Broadcast-Steuerung und das, wenn ich 299 00:16:26,840 --> 00:16:29,500 Empfangsbausteine. 300 00:16:29,500 --> 00:16:35,170 >> Und auch in Problem-Set 4, sahen wir ein bisschen von Veranstaltungen. 301 00:16:35,170 --> 00:16:38,250 Ihr Jungs könnten verwendet haben die Gevent Bibliothek. 302 00:16:38,250 --> 00:16:42,450 Und es gab eine Funktion waitForClick in dem Sie warteten 303 00:16:42,450 --> 00:16:44,300 für den Benutzer zu klicken. 304 00:16:44,300 --> 00:16:47,870 Und Sie hier klicken, wird in diesem Fall wäre die Veranstaltung und warten Klick ist Ihr 305 00:16:47,870 --> 00:16:49,120 Event-Handler. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> Und auch im gesamten Betrieb Ihrer psets und die Arbeit an Ihrem pset- Sie 308 00:16:58,630 --> 00:17:01,920 könnte in Kontakt kam einige dieser Befehle. 309 00:17:01,920 --> 00:17:05,579 Das ist, was Sie in Ihrem getippt Terminal-Fenster oder was auch immer Fenster 310 00:17:05,579 --> 00:17:12,119 Das zeigt sich auf der g Bearbeitung auf, Wesentlichen, navigieren Sie Ihren Computer. 311 00:17:12,119 --> 00:17:19,440 >> So zum Beispiel, LS listet die Inhalt eines Verzeichnisses. 312 00:17:19,440 --> 00:17:22,510 Machen Verzeichnis ein neuer Ordner erstellt. 313 00:17:22,510 --> 00:17:24,819 CD, Verzeichnis wechseln. 314 00:17:24,819 --> 00:17:28,400 RM, zu entfernen, löscht eine Datei oder ein Verzeichnis. 315 00:17:28,400 --> 00:17:31,050 Und entfernen Sie dann Verzeichnis Entfernt ein Verzeichnis. 316 00:17:31,050 --> 00:17:32,300 >> ZIELGRUPPE: [unverständlich]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> Sprecher 1: Ja, sicher. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Sorry, war die Frage, ob Sie würde vorschlagen, setzen diese 321 00:17:46,040 --> 00:17:48,840 auf dem Spickzettel. 322 00:17:48,840 --> 00:17:49,440 Es könnte helfen. 323 00:17:49,440 --> 00:17:51,490 Wenn Sie Platz haben, können Sie es anziehen. 324 00:17:51,490 --> 00:17:56,170 Es ist auch nur in der Regel gut genug sich daran zu erinnern, weil, wenn Sie es verwenden, 325 00:17:56,170 --> 00:17:59,060 möchten Sie vielleicht nur haben es gemerkt. 326 00:17:59,060 --> 00:18:02,750 Das wird Ihnen das Leben viel einfacher. 327 00:18:02,750 --> 00:18:04,000 Habe ich Ihre Frage beantworten? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> So, jetzt sprachen wir ein wenig kurz über Bibliotheken. 330 00:18:14,290 --> 00:18:18,570 Aber die beiden wichtigsten sind, die wir schon seit Verwendung bisher im Zuge sind 331 00:18:18,570 --> 00:18:20,860 Standard-I / O und CS50. 332 00:18:20,860 --> 00:18:25,410 Welche Dinge sind im Lieferumfang enthalten in der Standard-I / O-Bibliothek? 333 00:18:25,410 --> 00:18:28,410 >> Ja, so weit wir printf benutzt habe. 334 00:18:28,410 --> 00:18:31,150 In CS50, haben wir getint verwendet und GetString. 335 00:18:31,150 --> 00:18:37,200 Und der Datentyp String geschieht auch in diesem CS50-Bibliothek deklariert werden. 336 00:18:37,200 --> 00:18:40,250 Wir werden ein wenig mehr in die Tiefe zu sprechen wie Bibliotheken arbeiten und wie sie 337 00:18:40,250 --> 00:18:41,870 Interaktion mit dem Rest des Codes. 338 00:18:41,870 --> 00:18:46,220 Aber das sind die zwei wichtigsten sind, dass wir in Kontakt mit so weit kommen 339 00:18:46,220 --> 00:18:48,430 der Kurs. 340 00:18:48,430 --> 00:18:50,050 >> Typen. 341 00:18:50,050 --> 00:18:58,120 Diese sind gut zu merken, wie viel Jeder Typ wird durch oder wie dargestellt 342 00:18:58,120 --> 00:19:02,840 viele Bytes jeweils vom Typ requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 Byte; char, 1 Byte. 344 00:19:04,990 --> 00:19:06,550 Schwimmer ist 4 Bytes. 345 00:19:06,550 --> 00:19:07,782 Was ist ein Doppel? 346 00:19:07,782 --> 00:19:09,032 >> ZIELGRUPPE: [unverständlich]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> Sprecher 1: Ja, so ein Schwimmer aber doppelt so groß. 349 00:19:16,240 --> 00:19:17,150 Was lange? 350 00:19:17,150 --> 00:19:18,400 >> ZIELGRUPPE: [unverständlich]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> Sprecher 1: OK. 353 00:19:24,680 --> 00:19:25,410 Was ist eine lange? 354 00:19:25,410 --> 00:19:26,660 >> ZIELGRUPPE: [unverständlich]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> Sprecher 1: Ja, ein int verdoppeln. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Ja. 359 00:19:34,705 --> 00:19:36,100 >> ZIELGRUPPE: [unverständlich]. 360 00:19:36,100 --> 00:19:38,030 >> Sprecher 1: Long [unverständlich]. 361 00:19:38,030 --> 00:19:41,860 Und dann eine lange, lange ist doppelt so. 362 00:19:41,860 --> 00:19:42,814 >> ZIELGRUPPE: Nein, nein. 363 00:19:42,814 --> 00:19:47,107 Eine lange ist nur ein int. 364 00:19:47,107 --> 00:19:50,910 Es hängt von der Architektur bevor die [unverständlich] 365 00:19:50,910 --> 00:19:52,922 int und haben die gleiche Größe. 366 00:19:52,922 --> 00:19:54,172 [Unverständlich]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> Sprecher 1: So eine lange und int gleich sind. 369 00:20:00,920 --> 00:20:02,943 Und dann eine lange, lange ist das Doppelte der Int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 Und dann, was ist der letzte Typ? 372 00:20:05,550 --> 00:20:06,510 >> ZIELGRUPPE: Zeiger. 373 00:20:06,510 --> 00:20:10,350 >> Sprecher 1: Ja, so haben wir gelernt, ein wenig über Zeiger. 374 00:20:10,350 --> 00:20:14,015 Und unabhängig davon, was ein Zeiger ist Hinweis zu-- es könnte ein Zeichen sein Stern 375 00:20:14,015 --> 00:20:15,880 oder ein int star-- 376 00:20:15,880 --> 00:20:20,530 es ist immer 4 Byte für einen Zeiger. 377 00:20:20,530 --> 00:20:21,633 Fragen dazu? 378 00:20:21,633 --> 00:20:22,116 Ja? 379 00:20:22,116 --> 00:20:24,531 >> ZIELGRUPPE: [unverständlich]? 380 00:20:24,531 --> 00:20:29,530 >> Sprecher 1: So ein langer und ein int sind das gleiche in diesem CS50-Appliance. 381 00:20:29,530 --> 00:20:32,302 >> ZIELGRUPPE: Das Gerät komplett austauschbar. 382 00:20:32,302 --> 00:20:33,510 >> Sprecher 1: Ja. 383 00:20:33,510 --> 00:20:36,610 So dann ist ein langer, langer Doppel ein int. 384 00:20:36,610 --> 00:20:39,250 >> ZIELGRUPPE: Das ist die 32-Bit? 385 00:20:39,250 --> 00:20:40,620 >> Sprecher 1: 32-Bit, ja. 386 00:20:40,620 --> 00:20:43,572 >> ZIELGRUPPE: Also [unverständlich]? 387 00:20:43,572 --> 00:20:46,790 >> Sprecher 1: Ja, wenn es nicht ausdrücklich sagen, du 388 00:20:46,790 --> 00:20:47,870 sollte eine 32-Bit übernehmen. 389 00:20:47,870 --> 00:20:50,040 >> ZIELGRUPPE: Es wäre etwas zu sagen wie unter der Annahme einer 390 00:20:50,040 --> 00:20:51,498 Architektur, wie das Gerät. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Für 64-Bit, die einzigen Dinge, Änderung sind sehnt und Zeiger. 393 00:21:01,710 --> 00:21:05,614 Beide [unverständlich]. 394 00:21:05,614 --> 00:21:06,590 >> Sprecher 1: Ja? 395 00:21:06,590 --> 00:21:07,566 >> ZIELGRUPPE: Frage. 396 00:21:07,566 --> 00:21:10,982 Also auf einer der Praxis Quiz, es fragt nach einem unsigned int. 397 00:21:10,982 --> 00:21:15,374 Also, wie wäre das bestimmt werden von einem int [unverständlich]? 398 00:21:15,374 --> 00:21:18,140 >> Sprecher 1: Ein unsigned ist auch in 4 Bytes. 399 00:21:18,140 --> 00:21:21,172 Aber was ist anders an einem signierten int und ein unsigned int? 400 00:21:21,172 --> 00:21:22,422 >> ZIELGRUPPE: [unverständlich]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> Sprecher 1: Richtig. 403 00:21:25,630 --> 00:21:27,570 Man kann negative Werte darstellen. 404 00:21:27,570 --> 00:21:28,580 Aber wie macht es das? 405 00:21:28,580 --> 00:21:30,536 >> ZIELGRUPPE: [unverständlich]. 406 00:21:30,536 --> 00:21:36,370 >> Sprecher 1: Ja, es spart 1 Bit, um das Zeichen zu repräsentieren. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Die unterzeichnete hat ein Bit, das stellt das Vorzeichen. 409 00:21:45,040 --> 00:21:48,886 Und unsigned ist einfach aller Positiv. 410 00:21:48,886 --> 00:21:50,365 >> ZIELGRUPPE: OK. 411 00:21:50,365 --> 00:21:54,230 Also sagen Sie, dass ein Doppel ist doppelt so groß wie ein Schwimmer? 412 00:21:54,230 --> 00:21:58,202 >> Sprecher 1: Doppel doppelt die Größe eines Schwimmers, ja. 413 00:21:58,202 --> 00:22:01,639 >> ZIELGRUPPE: Wie funktioniert ein Zeiger eine lange, lange [unverständlich]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> Sprecher 1: Die Frage ist also, wie funktioniert der Zeiger auf eine lange long-- 416 00:22:10,870 --> 00:22:13,800 wie ist das nur vier Bytes ein langer, langer seinen 8 Bytes. 417 00:22:13,800 --> 00:22:17,310 Also denken Sie daran, was ein Zeiger ist, Wesentlichen an der Basis Wert. 418 00:22:17,310 --> 00:22:19,046 >> ZIELGRUPPE: [unverständlich]. 419 00:22:19,046 --> 00:22:22,670 >> Sprecher 1: Ja, so ein Zeiger ist nur ein Speicher. 420 00:22:22,670 --> 00:22:28,040 So ist es nicht egal, wie viel Platz dass Zeiger verweist. 421 00:22:28,040 --> 00:22:32,060 Es braucht nur 4 Byte den Überblick zu behalten von dieser Speicherstelle. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Noch Fragen? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Cool. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> So das letzte, was ich habe ist die Standardausgabe. 428 00:22:47,460 --> 00:22:51,020 Sie sollten sie häufig verwenden genug, dass Sie sich erinnern können. 429 00:22:51,020 --> 00:22:54,800 Aber das ist, wenn wir printf beispiels. 430 00:22:54,800 --> 00:22:59,260 Und wir haben diese Platzhalter, die wurden Format-Codes bezeichnet. 431 00:22:59,260 --> 00:23:03,910 >> Also Prozent c char, i Prozent für int, und wir können auch d Prozent. 432 00:23:03,910 --> 00:23:05,130 Es ist die gleiche Sache. 433 00:23:05,130 --> 00:23:08,200 Aber im allgemeinen in CS50 wir versuchen Prozent die ich benutze. 434 00:23:08,200 --> 00:23:09,860 Prozent f für float. 435 00:23:09,860 --> 00:23:15,620 Ld Prozent für lange, lange und Prozent s für String. 436 00:23:15,620 --> 00:23:18,550 >> Ebenso Wir haben mit ein paar dieser Escape-Sequenzen. 437 00:23:18,550 --> 00:23:22,431 Zum Beispiel Backslash n für neue Zeile. 438 00:23:22,431 --> 00:23:26,910 Dies ist nur für, wenn Sie die Formatierung sind Code für Print f. 439 00:23:26,910 --> 00:23:27,260 Ja? 440 00:23:27,260 --> 00:23:28,906 >> ZIELGRUPPE: Was ist für d Prozent? 441 00:23:28,906 --> 00:23:31,850 >> Sprecher 1: So ist die Frage Ist das, was d Prozent für? 442 00:23:31,850 --> 00:23:33,270 Prozent D ist für Ganzzahlen. 443 00:23:33,270 --> 00:23:37,392 D Prozent Prozent und i gleich sind. 444 00:23:37,392 --> 00:23:41,130 >> ZIELGRUPPE: Was ist der Unterschied zwischen Backslash Backslash n und r? 445 00:23:41,130 --> 00:23:45,300 >> Sprecher 1: Die Frage ist also, was ist der Unterschied zwischen Spiel und n 446 00:23:45,300 --> 00:23:48,615 spiel r? 447 00:23:48,615 --> 00:23:50,906 Ich denke, Backslash r ist-- 448 00:23:50,906 --> 00:23:54,340 >> ZIELGRUPPE: Also Backslash r nur impliziert, kehrt zu dem Anfang der Zeile, 449 00:23:54,340 --> 00:23:56,670 ohne tatsächlich zu einer neuen Zeile. 450 00:23:56,670 --> 00:24:01,000 Also, wenn Sie einen Backslash r und Sie drucken zurück zum Anfang der Zeile 451 00:24:01,000 --> 00:24:04,005 dann mehr Material zu drucken, die Sie überschreiben das Zeug, das ist bereits auf 452 00:24:04,005 --> 00:24:04,390 [Unverständlich]. 453 00:24:04,390 --> 00:24:06,725 Wohingegen, n geht tatsächlich auf eine neue Linie und geht zu [unverständlich]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> Sprecher 1: Nun, alle anderen Fragen? 456 00:24:13,915 --> 00:24:15,430 In Ordnung. 457 00:24:15,430 --> 00:24:18,617 Ich werde es die Hand von Dan, fortsetzen wird. 458 00:24:18,617 --> 00:24:25,078 >> [Applaus] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Alle righty. 461 00:25:09,720 --> 00:25:18,590 Also werde ich über eine andere breit reden Reihe von Ideen aus der Klasse, die sind 462 00:25:18,590 --> 00:25:23,220 etwa Vertreter der Woche zwei und der Beginn der Woche drei Anfahren 463 00:25:23,220 --> 00:25:28,690 mit Gießen, die nur ein Weg ist Behandeln Wert eines bestimmten Typs als 464 00:25:28,690 --> 00:25:30,830 ein Wert von einem anderen Typ. 465 00:25:30,830 --> 00:25:34,110 So können wir dies mit Zeichen zu tun ints, Schwimmern zu ints und 466 00:25:34,110 --> 00:25:35,360 lange sehnt sich zu verdoppeln. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> All diese Dinge können als Arten verwendet werden der Behandlung einiger numerischer Wert 469 00:25:44,500 --> 00:25:48,370 minus char wie einige andere numerischen Wert. 470 00:25:48,370 --> 00:25:54,480 So gibt es einige Probleme mit diesem, von Natürlich, die, wenn Sie werfen kommt 471 00:25:54,480 --> 00:25:57,860 Dinge wie Schwimmer ints. 472 00:25:57,860 --> 00:26:00,500 Also das ist ein bisschen komisch. 473 00:26:00,500 --> 00:26:03,170 Wir haben einen Schwimmer, der 1,31 ist. 474 00:26:03,170 --> 00:26:05,220 Wir multiplizieren sie mit 10.000. 475 00:26:05,220 --> 00:26:08,380 Und dann haben wir es zu drucken als int. 476 00:26:08,380 --> 00:26:09,630 Was bedeutet diese Ausgabe? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10.000 mal 1.31. 479 00:26:14,020 --> 00:26:18,761 Also 13.000, das ist die Vermutung? 480 00:26:18,761 --> 00:26:20,685 >> ZIELGRUPPE: Ich denke, es ist 10.000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Also ich bin Multiplikation mit 10.000 bevor ich Gießen. 482 00:26:24,234 --> 00:26:25,202 >> ZIELGRUPPE: Oh. 483 00:26:25,202 --> 00:26:27,622 Würde dort nicht eine 9 sein und einige Zahlen 0? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Möglicherweise müssen einige seltsame Ziffern. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 So richtig, es ist 1,3 mal 10.000. 487 00:26:37,670 --> 00:26:40,040 Also das ist 13.000. 488 00:26:40,040 --> 00:26:41,313 Und diese zusätzliche weird-- 489 00:26:41,313 --> 00:26:42,160 >> ZIELGRUPPE: 13.100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13.100. 491 00:26:42,650 --> 00:26:44,910 Danke, Rob. 492 00:26:44,910 --> 00:26:46,610 Und diese zusätzliche weirdness-- 493 00:26:46,610 --> 00:26:48,060 Diese 9,9-- 494 00:26:48,060 --> 00:26:53,860 ist einfach, weil dieses Casting endete Abrundung wo 495 00:26:53,860 --> 00:26:55,394 es sollte nicht. 496 00:26:55,394 --> 00:26:55,871 Ja. 497 00:26:55,871 --> 00:26:58,256 >> ZIELGRUPPE: Das Casting passiert nach noch etwas? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Also, da ich diese im Druck, es bedeutet diese Multiplikation, bevor es 499 00:27:03,865 --> 00:27:05,230 funktioniert das Casting. 500 00:27:05,230 --> 00:27:06,140 >> ZIELGRUPPE: [unverständlich]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Ich denke, es würde zuerst gegossen, ja, die 10.000 wären. 502 00:27:11,350 --> 00:27:12,610 Noch etwas? 503 00:27:12,610 --> 00:27:13,330 Cool. 504 00:27:13,330 --> 00:27:16,344 Also das ist 13.099. 505 00:27:16,344 --> 00:27:17,840 Warum geschieht das? 506 00:27:17,840 --> 00:27:18,900 Ungenauigkeit. 507 00:27:18,900 --> 00:27:21,020 >> Schwimmer sind nicht perfekt. 508 00:27:21,020 --> 00:27:27,550 Sie können nur Zahlen, um einen Betreiber bestimmte Anzahl von signifikanten Stellen. 509 00:27:27,550 --> 00:27:35,120 Also, wenn wir uns auf auszudrucken 8 sig Feigen Diese Schwimmer, eine Art erhalten wir 510 00:27:35,120 --> 00:27:36,800 hässlich suchen Nummer. 511 00:27:36,800 --> 00:27:45,580 Und das ist, weil nicht genau 1.31 durch einfache dargestellt werden 512 00:27:45,580 --> 00:27:49,000 Potenzen von zwei in der Maschine. 513 00:27:49,000 --> 00:27:53,530 Also es endet unter dem nächsten raten, die bis Ende 514 00:27:53,530 --> 00:27:55,710 ein wenig niedrig. 515 00:27:55,710 --> 00:27:57,730 Sinnvoll? 516 00:27:57,730 --> 00:27:59,110 Ok. 517 00:27:59,110 --> 00:28:05,840 >> Nun schaltet sich eine andere Art der Dabei bedingte Anweisungen, wo alle 518 00:28:05,840 --> 00:28:09,900 wir kümmern uns um eine einzelne Variable. 519 00:28:09,900 --> 00:28:16,570 Also in diesem speziellen Beispiel, sind wir immer eine ganze Zahl von dem Benutzer. 520 00:28:16,570 --> 00:28:21,070 Und dann sind wir bei der Suche was das ganze Zahl ist. 521 00:28:21,070 --> 00:28:23,500 Vermutlich ist es die Nummer zwischen einem und vier. 522 00:28:23,500 --> 00:28:24,800 Das ist, was wir für die Nachfrage. 523 00:28:24,800 --> 00:28:28,450 >> So können Sie einen Schalter zu tun der Name variabel. 524 00:28:28,450 --> 00:28:34,290 Dann können Sie sich Fälle von möglichen gesetzt Werte es sein könnte. 525 00:28:34,290 --> 00:28:37,730 Also, falls einer, sagen, es ist niedrig. 526 00:28:37,730 --> 00:28:41,080 Und dann brechen, um aus der Schaltzustand so 527 00:28:41,080 --> 00:28:43,270 Sie nicht halten werde. 528 00:28:43,270 --> 00:28:44,830 >> Im nächsten case-- 529 00:28:44,830 --> 00:28:46,940 so bei zwei und bei three-- 530 00:28:46,940 --> 00:28:51,920 wenn es bei beiden es gerade sinkt auf die erste Zeile Code sieht es als mit 531 00:28:51,920 --> 00:28:55,400 Fall Drei bis es eine Pause sieht. 532 00:28:55,400 --> 00:29:00,430 Also der Grund, warum Sie bei eins zu bekommen, um nur Druck niedrig ist, weil ich 533 00:29:00,430 --> 00:29:01,890 haben diese Pause hier. 534 00:29:01,890 --> 00:29:05,360 Wenn ich, sagen wir, ignorierte diese break-- wenn ich warf diese breakaway-- 535 00:29:05,360 --> 00:29:09,740 es wäre zu drucken niedrig, und dann wäre es Drucken Mitte, und dann ist es brechen würde. 536 00:29:09,740 --> 00:29:12,200 >> Also Pausen sind ein wichtiger Bestandteil der Schaltzustände und 537 00:29:12,200 --> 00:29:14,340 sollten sie da sein. 538 00:29:14,340 --> 00:29:20,070 Etwaige Fälle, die nicht explizit angegeben werden werden durch die Standard gehandhabt 539 00:29:20,070 --> 00:29:26,645 Fall in den Schalter und sollte gegossen werden. 540 00:29:26,645 --> 00:29:31,363 >> ZIELGRUPPE: Also 1, 2, 3, und 4 würde n sein? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Werte, n kann. 542 00:29:33,310 --> 00:29:34,654 Ja. 543 00:29:34,654 --> 00:29:35,146 Ja? 544 00:29:35,146 --> 00:29:37,606 >> ZIELGRUPPE: Also, wenn Sie , dass [unverständlich]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Sie würde zu drucken niedrig, und dann es wäre Mitte zu drucken, und 547 00:29:46,830 --> 00:29:47,400 dann wäre es zu brechen. 548 00:29:47,400 --> 00:29:50,244 >> ZIELGRUPPE: Warum würde es drucken Mitte, wenn [unverständlich]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Also alles unter einem Fall Vor der Pause fällt unter. 551 00:30:00,550 --> 00:30:09,390 So ein Fall ist unter Druck bei eine als dies ist folgenden Druck. 552 00:30:09,390 --> 00:30:09,890 Ja? 553 00:30:09,890 --> 00:30:11,140 >> ZIELGRUPPE: [unverständlich]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Also diese Zahl ist nur eine bestimmte Wert, dass diese Variable 556 00:30:22,170 --> 00:30:23,420 nehmen können, oder? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Heißt das Sinn? 559 00:30:28,490 --> 00:30:28,990 Ja. 560 00:30:28,990 --> 00:30:31,490 >> ZIELGRUPPE: [unverständlich]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Ja, bei beiden würden drucken Mitte und dann brechen. 562 00:30:34,130 --> 00:30:35,380 >> ZIELGRUPPE: [unverständlich]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Ich denke, jeder? 565 00:30:40,050 --> 00:30:43,855 Welche anderen Datentypen können Sie umschalten? 566 00:30:43,855 --> 00:30:46,320 >> ZIELGRUPPE: Sie können wechseln über alle Datentypen. 567 00:30:46,320 --> 00:30:50,905 Aber es bedeutet nur etwas mehr als Zeichen und ints und solche Sachen, weil 568 00:30:50,905 --> 00:30:55,600 wenn Sie über einen Zeiger sind Schalt das nicht wirklich sinnvoll, 569 00:30:55,600 --> 00:30:59,555 Umschalten Lasten, wenn es auch lassen Sie das tun, weil der Floating-Point- 570 00:30:59,555 --> 00:31:02,840 in Präzision, würden Sie nicht wirklich wollen das sowieso tun. 571 00:31:02,840 --> 00:31:07,320 So ziemlich viel, nur ints und Zeichen und solche Sachen. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Ja, ist es, wenn Sie explizite Werte, die Sie kennen, glaube ich, kann 573 00:31:12,360 --> 00:31:14,250 dass ein Schalter ist eigentlich nützlich. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Gut? 576 00:31:18,990 --> 00:31:21,370 Ok. 577 00:31:21,370 --> 00:31:26,180 >> Scope ist der Bereich, der ein erklärter Variable erstreckt. 578 00:31:26,180 --> 00:31:32,190 Also in diesem kleinen Stück Code ich habe, wäre es voller Fehler. 579 00:31:32,190 --> 00:31:41,450 Und der Grund ist, dass ich diese int deklariert i innerhalb des Umfangs dieser for-Schleife. 580 00:31:41,450 --> 00:31:46,390 Und dann versuche ich, Referenz, die i außerhalb der for-Schleife, dass Umfang. 581 00:31:46,390 --> 00:31:50,330 >> Also im Grunde kann man über Umfang denken wie alles, was Sie erklären 582 00:31:50,330 --> 00:31:59,750 mit in einem Satz von geschweiften Klammern nur existiert innerhalb dieser geschweiften Klammern. 583 00:31:59,750 --> 00:32:04,990 Und wenn Sie versuchen, diese Variable außerhalb dieser geschweiften Klammern, werden Sie 584 00:32:04,990 --> 00:32:08,356 erhalte eine Fehlermeldung des Compilers. 585 00:32:08,356 --> 00:32:08,812 Ja? 586 00:32:08,812 --> 00:32:09,724 >> ZIELGRUPPE: Also das man nicht arbeiten? 587 00:32:09,724 --> 00:32:11,790 >> DAN: Das funktioniert nicht, ja. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Saiten. 590 00:32:18,660 --> 00:32:19,780 String ein char *. 591 00:32:19,780 --> 00:32:22,250 Sie sind genau die gleichen. 592 00:32:22,250 --> 00:32:25,540 Sie sind nur Zeiger auf Zeichen. 593 00:32:25,540 --> 00:32:33,000 Und alle Zeichenfolgen, die Sie haben sollten am Ende mit Backslash Null, das nur 594 00:32:33,000 --> 00:32:34,410 a c Konvention. 595 00:32:34,410 --> 00:32:36,680 >> Man nennt sie die NULL-Terminator. 596 00:32:36,680 --> 00:32:39,050 Und NULL-- 597 00:32:39,050 --> 00:32:41,670 Hauptstadt N, U Kapital, Kapital L, Hauptstadt L-- 598 00:32:41,670 --> 00:32:44,290 ist nicht die gleiche wie die NULL-Terminator. 599 00:32:44,290 --> 00:32:46,640 Dies ist ein Zeiger. 600 00:32:46,640 --> 00:32:48,280 Dies ist ein Zeichen. 601 00:32:48,280 --> 00:32:49,530 Sie sind sehr verschieden. 602 00:32:49,530 --> 00:32:50,200 Daran erinnern. 603 00:32:50,200 --> 00:32:52,320 Es wird auf der Quiz wahrscheinlich. 604 00:32:52,320 --> 00:32:54,040 Ich habe nicht das Quiz gesehen. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Ja? 607 00:32:58,840 --> 00:33:01,232 >> ZIELGRUPPE: Also NULL ist, sagen wir, der Zeiger? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Ja. 609 00:33:01,995 --> 00:33:05,170 >> ZIELGRUPPE: Was bedeutet [unverständlich]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Wenn, sagen wir, malloc wird aufgerufen, wenn Sie nicht genug Speicher, um zu bekommen 611 00:33:10,050 --> 00:33:14,400 was auch immer Größe Sie fragen, malloc NULL zurück. 612 00:33:14,400 --> 00:33:19,550 Es ist grundsätzlich immer dann, wenn eine Funktion soll einen Zeiger zurück, Sie 613 00:33:19,550 --> 00:33:22,600 müssen gegen NULL, da überprüfen NULL ist ein ziemlich good-- 614 00:33:22,600 --> 00:33:25,260 es ist, eine Art, die Müll-Wert. 615 00:33:25,260 --> 00:33:27,050 Es ist ein Null-Zeiger so weit wie zu gehen. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Immer, wenn Sie eine Funktion aufrufen, dass gibt einen Zeiger. 618 00:33:32,250 --> 00:33:35,960 Sie gehen, um zu prüfen sein zu wollen sicher, dass der Zeiger nicht NULL 619 00:33:35,960 --> 00:33:37,760 weil NULL ist sehr verbreitet. 620 00:33:37,760 --> 00:33:40,160 Es ist eine Art von Müll Rückkehr. 621 00:33:40,160 --> 00:33:44,902 Also, wenn etwas nicht richtig zu gehen, nur NULL zurück statt. 622 00:33:44,902 --> 00:33:45,898 >> ZIELGRUPPE: [unverständlich]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Ja, und das ist diese. 624 00:33:48,922 --> 00:33:51,750 >> ZIELGRUPPE: [unverständlich]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Formulieren Sie es wie dieses. 626 00:33:52,800 --> 00:33:54,150 Es ist der NULL-Terminator. 627 00:33:54,150 --> 00:33:56,560 Es ist Klein N-U-L-L, wenn Sie buchstabieren es. 628 00:33:56,560 --> 00:33:59,860 >> ZIELGRUPPE: Und ich ging einfach zurück und getestet. 629 00:33:59,860 --> 00:34:03,010 Und wenn Sie versuchen, eine Floating-Point setzen Wert in einen Schalter, wird es auf Sie schreien 630 00:34:03,010 --> 00:34:05,916 sagen, Aussage erfordert Ausdruck von Integer-Typ. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Dort gehen Sie. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Aber ja, was war die Frage noch mal? 634 00:34:12,246 --> 00:34:13,496 >> ZIELGRUPPE: [unverständlich]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Also Hauptstadt N, U Kapital, Kapital L, L ist die Hauptstadt eine tatsächliche c Sache. 637 00:34:23,679 --> 00:34:29,719 Es ist der NULL-Zeiger und wird nur als solche behandelt werden. 638 00:34:29,719 --> 00:34:33,530 Sie werden nicht immer versuchen, die Rechtschreib NULL-Zeichen und sehen jede 639 00:34:33,530 --> 00:34:35,630 anders als diese. 640 00:34:35,630 --> 00:34:36,610 Ja? 641 00:34:36,610 --> 00:34:42,490 >> ZIELGRUPPE: Also Rückkehr zu verkohlen oder max etwas in den Anmerkungen, wäre es 642 00:34:42,490 --> 00:34:43,960 verkörpern die gleiche Funktion als [unverständlich]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> ZIELGRUPPE: So beziehen Sie sich Rückkehr char max von getchar oder 645 00:34:54,949 --> 00:34:55,444 was auch immer es ist? 646 00:34:55,444 --> 00:34:55,940 >> ZIELGRUPPE: Ja. 647 00:34:55,940 --> 00:34:58,620 >> ZIELGRUPPE: Ja, so die allgemeine Begriff für all die Dinge, 648 00:34:58,620 --> 00:34:59,920 sind Sentinel-Werte. 649 00:34:59,920 --> 00:35:03,640 So wie eine Rückkehr int max von getint und char max von getchar, ist es 650 00:35:03,640 --> 00:35:06,010 soll wie, alles in Ordnung zu sein, wenn diese Dinge sind zu uns zurück, 651 00:35:06,010 --> 00:35:07,210 etwas schief gelaufen. 652 00:35:07,210 --> 00:35:09,950 >> Für Zeiger, wir haben nur zufällig Diese Wächter Wert, dass jeder 653 00:35:09,950 --> 00:35:10,750 stimmt auf. 654 00:35:10,750 --> 00:35:13,210 Und das ist das, was Sie zurück wenn etwas schief geht. 655 00:35:13,210 --> 00:35:15,910 So char max ist, was wir mit etwas darstellen 656 00:35:15,910 --> 00:35:18,100 wie NULL oder getchar. 657 00:35:18,100 --> 00:35:23,420 >> ZIELGRUPPE: Also, wenn Sie die Prüfung getchar bist, könnten Sie einfach NULL setzen? 658 00:35:23,420 --> 00:35:23,910 Würde das einen Unterschied machen? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Sie konnte nicht einfach mal NULL. 660 00:35:25,400 --> 00:35:30,130 Sie müssten char max weil das überprüfen Rückgabewert der Funktion ist 661 00:35:30,130 --> 00:35:35,416 ein Zeichen, das nicht ein Zeiger. 662 00:35:35,416 --> 00:35:35,888 Ja? 663 00:35:35,888 --> 00:35:38,248 >> Zielgruppe: Dieser Frage geht dahin, für die String-Länge. 664 00:35:38,248 --> 00:35:40,136 Nicht, dass die NULL-Zeichen enthalten? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Nein 666 00:35:41,000 --> 00:35:45,930 Und das ist tatsächlich, wie String-Länge weiß, zu stoppen, weil es durch geht 667 00:35:45,930 --> 00:35:49,070 Ihr Array von Zeichen, bis es sieht ein NULL-Zeichen. 668 00:35:49,070 --> 00:35:51,030 Und dann ist es wie alle Gut, ich bin fertig. 669 00:35:51,030 --> 00:35:52,130 >> ZIELGRUPPE: [unverständlich] fünf? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Hallo würde fünf sein. 671 00:35:53,990 --> 00:35:55,240 Yep. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 So Arrays sind kontinuierliche Speicherblöcke. 674 00:36:02,880 --> 00:36:08,480 Sie haben sofortigen Zugriff mit den Worten der Name des Arrays und dann in geschweiften 675 00:36:08,480 --> 00:36:16,720 Hosenträger, was auch immer Index, den Sie gehen wollen auf, sind sie von Null indiziert durch 676 00:36:16,720 --> 00:36:20,100 die Länge der Anordnung minus 1 ist. 677 00:36:20,100 --> 00:36:23,070 >> Und sie sind durch die Art der das erklärte Sache, die Sie in die Speicherung sind 678 00:36:23,070 --> 00:36:29,750 Array, der Name des Feldes, und Unabhängig von der Größe ist dieses Arrays. 679 00:36:29,750 --> 00:36:36,660 Das ist also ein char-Array der Länge sechs, die diese Werte enthält. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Ja? 682 00:36:42,700 --> 00:36:43,950 >> ZIELGRUPPE: [unverständlich]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Ja. 685 00:36:48,460 --> 00:36:51,340 >> ZIELGRUPPE: [unverständlich]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Wenn Sie, was los ist in das Array schon gemacht. 687 00:36:56,700 --> 00:37:02,260 So könnte man diese stattdessen angeben, wie sagen wir, char, was auch immer der Name des 688 00:37:02,260 --> 00:37:12,200 Array ist, leere Klammern gleich lockig Klammer H Komma Komma E L L Komma Komma 689 00:37:12,200 --> 00:37:16,290 O Komma NULL-Zeichen und geschweifte Klammer. 690 00:37:16,290 --> 00:37:18,180 Das wäre auch eine Erklärung zu arbeiten. 691 00:37:18,180 --> 00:37:20,886 >> ZIELGRUPPE: [unverständlich]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Dann müssen Sie haben die Größe schon gemacht. 693 00:37:23,110 --> 00:37:23,896 >> ZIELGRUPPE: [unverständlich]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Ja. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Alle righty. 697 00:37:32,420 --> 00:37:36,430 Befehlszeilenargumente sind eine Möglichkeit, Eingaben aus dem Benutzer als 698 00:37:36,430 --> 00:37:39,380 Argumente zur Haupt. 699 00:37:39,380 --> 00:37:40,600 Haupt zwei Argumente. 700 00:37:40,600 --> 00:37:47,680 Die Anzahl der Argumente, die sein wird entlang der Befehlszeile und eine bestandene 701 00:37:47,680 --> 00:37:55,340 String-Vektor oder ein String-Array aller Argumente. 702 00:37:55,340 --> 00:38:07,840 >> Wenn ich also etwa bezeichnet eine Funktion wie ein Punkt aus 1 Raum, 2 Raum, drei, 703 00:38:07,840 --> 00:38:10,110 argc würde 4 sein. 704 00:38:10,110 --> 00:38:17,370 Und die argv 0 würde ein Punkt aus sein. 705 00:38:17,370 --> 00:38:19,130 Argv1 wäre 1. 706 00:38:19,130 --> 00:38:23,030 argv2 wäre 2. argv3 wäre 3, in diesem speziellen Fall. 707 00:38:23,030 --> 00:38:23,310 Ja? 708 00:38:23,310 --> 00:38:25,400 >> ZIELGRUPPE: [unverständlich]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: Das letzte Element im Array da das Array Länge argc Plus 710 00:38:34,010 --> 00:38:41,050 einer der ARGB, das letzte Element ist der NULL-Zeiger. 711 00:38:41,050 --> 00:38:42,580 Es ist argc plus 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Also in dem Fall, dass ich gesagt habe, es ist einfach 0 würde argv ist ein Punkt heraus. 714 00:38:52,150 --> 00:38:56,330 argv 1 ist 1. argv2 ist 2. argv 3 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, die eine größere ist als arge wäre NULL. 716 00:39:03,490 --> 00:39:04,870 >> Und das ist der NULL-Zeiger. 717 00:39:04,870 --> 00:39:06,590 Ja. 718 00:39:06,590 --> 00:39:11,250 Und das ist, weil String ist ein char Stern ist ein Zeiger. 719 00:39:11,250 --> 00:39:14,102 So hat es die gleiche Art sein. 720 00:39:14,102 --> 00:39:14,595 Ja? 721 00:39:14,595 --> 00:39:16,074 >> ZIELGRUPPE: Zwei Fragen. 722 00:39:16,074 --> 00:39:21,004 So dass man, was ist der Unterschied zwischen Diese und andere GetString als eine Art 723 00:39:21,004 --> 00:39:22,483 in der Benutzer Motor? 724 00:39:22,483 --> 00:39:25,934 Und zwei, wird gespeichert in Ihre letzten Speicher? 725 00:39:25,934 --> 00:39:28,399 So wie, würde GetString sein [unverständlich]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Wo ist es gespeichert? 728 00:39:33,650 --> 00:39:34,905 Ich weiß nicht, wo sie gespeichert sind. 729 00:39:34,905 --> 00:39:40,000 >> ZIELGRUPPE: Also, eigentlich, wissen Sie, wie jede Funktion, die Sie nennen es Argumente 730 00:39:40,000 --> 00:39:42,170 im Stapel gespeichert? 731 00:39:42,170 --> 00:39:46,610 So argc und argv sind Argumente, die Haupt und sie sind auf dem Stack, oder wirklich 732 00:39:46,610 --> 00:39:49,131 nur über das, was Sie denken, wie der Start des Stapels. 733 00:39:49,131 --> 00:39:53,490 Was war der andere Teil der Frage? 734 00:39:53,490 --> 00:39:56,821 >> ZIELGRUPPE: Also, was ist die [unverständlich]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Ja, es ist nur eine andere Art und Weise Erhalten von Eingaben durch den Benutzer. 736 00:40:00,990 --> 00:40:06,030 Etwas effizienter und das hier ist es ist handlicher für Skripte, weil Sie 737 00:40:06,030 --> 00:40:10,070 kann nur Argumente an Ihrem Haupt Funktion, anstatt zu warten, 738 00:40:10,070 --> 00:40:13,400 für die Nutzer, wenn Sie nicht alle Benutzer. 739 00:40:13,400 --> 00:40:16,280 >> ZIELGRUPPE: Und ja, bekommen Saiten wäre [unverständlich]. 740 00:40:16,280 --> 00:40:17,922 Es würde die Dinge, die Sie brauchen, zu speichern. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Ja? 742 00:40:18,834 --> 00:40:21,114 >> ZIELGRUPPE: [unverständlich]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Ja, argv 0 enthält immer die Punkt Schrägstrich des Funktionsaufrufs. 744 00:40:27,545 --> 00:40:28,042 Ja? 745 00:40:28,042 --> 00:40:29,292 >> ZIELGRUPPE: [unverständlich]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Ja, jedes der Argumente in NULL-Zeichen beendet, weil sie 748 00:40:37,310 --> 00:40:38,310 Strings sind. 749 00:40:38,310 --> 00:40:40,892 >> ZIELGRUPPE: [unverständlich]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Ja, das ist argv argc ein NULL-Zeiger. 751 00:40:44,116 --> 00:40:45,112 >> ZIELGRUPPE: [unverständlich]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Oh ja. 753 00:40:47,104 --> 00:40:48,100 Ja, sorry. 754 00:40:48,100 --> 00:40:49,594 >> ZIELGRUPPE: Also [unverständlich]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Die Frage ist also, wenn Sie hatte die Befehlszeile Punkt Schrägstrich einen Punkt aus 1, 2, 757 00:41:16,340 --> 00:41:20,410 Würde die Anzahl der Befehlszeile Argumente zwei sein, oder würde es drei sein? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> ZIELGRUPPE: Ich denke, es funktioniert nicht wirklich wichtig sind. 760 00:41:28,240 --> 00:41:31,370 Ich neige dazu zu sagen, oh, haben Sie sich nicht über Alle Befehlszeilenargumente, wenn 761 00:41:31,370 --> 00:41:32,730 Offensichtlich ist die Funktion aufgerufen Sie. 762 00:41:32,730 --> 00:41:37,950 Also ich neige dazu, stimmlich nicht auch die Funktion von der Kommandozeile 763 00:41:37,950 --> 00:41:40,350 Argumente, auch wenn es in argv enthalten. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Aber wenn es auf der test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- und auch, wenn Sie etwas zu sagen wie argc gleich 3 ist, 766 00:41:46,550 --> 00:41:48,512 Sie sind in sicheren Stand. 767 00:41:48,512 --> 00:41:49,416 Ja? 768 00:41:49,416 --> 00:41:50,666 >> ZIELGRUPPE: [unverständlich]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Ich denke, wenn statt der Aufruf dieser in arge und argv String Klammern 771 00:42:09,510 --> 00:42:14,350 aber immer die gleichen Typen und gerade angerufen ihnen etwas anderes wie ein 772 00:42:14,350 --> 00:42:16,640 und b, wäre es immer noch funktionieren? 773 00:42:16,640 --> 00:42:18,790 Und es würde immer noch funktionieren, Sie würde just-- 774 00:42:18,790 --> 00:42:21,520 anstatt argc-- Sie würde a und b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Ja? 777 00:42:25,408 --> 00:42:26,658 >> ZIELGRUPPE: [unverständlich]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Also die Frage ist, ist GetString gehen in den Speicher im Heap speichern 780 00:42:38,850 --> 00:42:42,280 weil GetString ist char *. 781 00:42:42,280 --> 00:42:47,530 Es speichert Speicher im Heap, weil es ruft nun malloc im eigentlichen 782 00:42:47,530 --> 00:42:49,258 Umsetzung der GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, bewegen auf. 785 00:42:55,090 --> 00:42:55,950 >> Sicherheit. 786 00:42:55,950 --> 00:43:01,090 So wirklich sicher zu sein, auf keinen verlassen Sie ein und Sie niemand Zugang zu einem erlauben 787 00:43:01,090 --> 00:43:04,540 Ihre Informationen, weshalb jeder baut ihren eigenen Maschinen, 788 00:43:04,540 --> 00:43:09,580 ihre eigenen Betriebssysteme, die alle ihre Programme von Grund auf neu, und natürlich 789 00:43:09,580 --> 00:43:13,410 zu keinen anderen Computern zu verbinden über das Internet. 790 00:43:13,410 --> 00:43:17,350 Computer sind so unsicher. 791 00:43:17,350 --> 00:43:19,200 Sie sind wirklich. 792 00:43:19,200 --> 00:43:20,940 Wir haben mit anderen Menschen zu vertrauen. 793 00:43:20,940 --> 00:43:26,500 >> Und die Idee der Sicherheit ist, dass Sie versucht, die Menge zu begrenzen 794 00:43:26,500 --> 00:43:27,540 Vertrauen, das Sie brauchen. 795 00:43:27,540 --> 00:43:32,080 Und eines der Mittel, die Sie tun ist durch Kryptographie. 796 00:43:32,080 --> 00:43:34,950 Kryptographie ist im Wesentlichen wir haben Geheimnisse. 797 00:43:34,950 --> 00:43:38,880 >> Manchmal müssen wir unsere Geheimnisse weitergeben entlang durch, sagen wir, das Internet oder 798 00:43:38,880 --> 00:43:39,980 andere Dinge. 799 00:43:39,980 --> 00:43:43,180 Und wir wollen die Leute nicht , diese Geheimnisse zu kennen. 800 00:43:43,180 --> 00:43:50,100 So verschlüsseln wir unsere Geheimnisse in einer Weise, dass wir hoffen, dass niemand herausfinden. 801 00:43:50,100 --> 00:43:51,600 >> So dass wir used-- 802 00:43:51,600 --> 00:43:54,340 im Verlauf dieser class-- 803 00:43:54,340 --> 00:44:00,750 Dinge wie Caesar-Chiffre und [Unverständlich], die beide sehr, sehr sind 804 00:44:00,750 --> 00:44:03,200 unsicher Möglichkeiten der Verschlüsselung Dinge. 805 00:44:03,200 --> 00:44:07,930 Sie sind einfach, herauszufinden, was sie sind und was Ihre Geheimnisse sind. 806 00:44:07,930 --> 00:44:12,130 Die reale Welt wird wesentlich mehr komplizierte Verschlüsselungsverfahren. 807 00:44:12,130 --> 00:44:13,880 Und wir werden nicht in zu erhalten viel mehr. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Debugging. 810 00:44:19,430 --> 00:44:20,785 GDB ist die beste. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Ich werde das noch einmal betonen. 813 00:44:25,810 --> 00:44:30,920 Verwenden GDB die ganze Zeit jeden Zeit haben Sie ein Problem. 814 00:44:30,920 --> 00:44:36,030 Befehle, die in GDB nützlich sind, sind brechen, die Sie entweder eine Linie übergeben 815 00:44:36,030 --> 00:44:41,330 Nummer, der Name einer Funktion, im Wesentlichen wo in Ihrem Code, den Sie beenden möchten, 816 00:44:41,330 --> 00:44:45,600 und in der Lage, die Kontrolle zu nehmen. 817 00:44:45,600 --> 00:44:54,140 >> Drucken erfolgt eine variable und druckt Was auch immer das ist, dass variable 818 00:44:54,140 --> 00:44:55,990 Punkt in Ihrer Ausführung. 819 00:44:55,990 --> 00:45:00,130 Weiter geht Ihre Ausführung entlang einem Schritt. 820 00:45:00,130 --> 00:45:05,050 Und Schritt Schritte innerhalb einer Funktion in Ihrer Ausführung. 821 00:45:05,050 --> 00:45:10,480 >> Andere Dinge werden laufen, das ist, wie Sie tatsächlich ausführen Ihrem Code. 822 00:45:10,480 --> 00:45:16,630 Weiter nimmt alle erforderlichen Schritte , um zum nächsten Haltepunkt zu bekommen. 823 00:45:16,630 --> 00:45:18,300 Und es gibt viele, viele andere. 824 00:45:18,300 --> 00:45:19,040 Schauen sie auf. 825 00:45:19,040 --> 00:45:19,901 Sie sind großartig. 826 00:45:19,901 --> 00:45:20,863 Ja? 827 00:45:20,863 --> 00:45:22,113 >> ZIELGRUPPE: [unverständlich]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Ja, das ist ein Debugger. 830 00:45:28,200 --> 00:45:34,230 So ein Debugger ist ein Programm, können Sie Ihr Programm debuggen. 831 00:45:34,230 --> 00:45:39,931 Es ist nicht ein Programm, das für Bugs findet Sie, aber das wäre toll. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> Und zuletzt ist für mich suchen. 834 00:45:46,040 --> 00:45:51,470 So dass die Arten der Suche, die wir gesprochen etwa in dieser Klasse sind lineare Suche, 835 00:45:51,470 --> 00:45:55,960 die nur ist, dass man durch jede aussehen Element des Suchraums, eines 836 00:45:55,960 --> 00:46:00,410 Element in einer Zeit, bis Sie finden, was Sie für oder bis Sie suchen 837 00:46:00,410 --> 00:46:03,350 das Ende Ihrer Suchraum, an dem Punkt, den Sie sagen, dass Sie nicht finden konnte, 838 00:46:03,350 --> 00:46:06,360 das Element, das Sie gesucht haben. 839 00:46:06,360 --> 00:46:13,450 Und das dauert im besten konstante Zeit, was 0 von 1 und im schlimmsten Fall linear 840 00:46:13,450 --> 00:46:16,070 Zeit, die 0 für n ist. 841 00:46:16,070 --> 00:46:19,250 >> Binäre Suche, die braucht schmutzige Elemente. 842 00:46:19,250 --> 00:46:24,230 Sie gehen auf die Mitte des Elemente, sehen, ob das Element, das Sie suchen 843 00:46:24,230 --> 00:46:30,120 größer oder kleiner ist als das Element Sie befinden sich auf der Mitte. 844 00:46:30,120 --> 00:46:36,510 Es es ist größer, sagen Sie, dass der Boden Ihre Suchraum ist Ihr 845 00:46:36,510 --> 00:46:41,550 aktuelle Position, die Mitte, und Sie den Prozess neu zu starten. 846 00:46:41,550 --> 00:46:46,150 Wenn es kleiner, schauen Sie sagen, dass the-- ja, was ist los? 847 00:46:46,150 --> 00:46:47,400 >> ZIELGRUPPE: [unverständlich]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Ja. 850 00:46:54,260 --> 00:46:58,360 Jede Art von Art, die in beigebracht worden ist die Klasse ist Freiwild für den Test. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Gelächter] 853 00:47:04,920 --> 00:47:10,260 >> DAN: Und die Tatsache, dass Sie nicht gehabt haben um es für ein Problem-Set besitzen, es ist fair 854 00:47:10,260 --> 00:47:12,420 Spiel für den Test. 855 00:47:12,420 --> 00:47:15,186 >> ZIELGRUPPE: Können wir über sie gehen, wie zu-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Es wird übergegangen werden. 857 00:47:17,052 --> 00:47:20,496 >> Sprecher 2: Die eigentliche Code für [Unverständlich] ist auf study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Also, wenn Sie an der Praxis Problem zu suchen in der Merge-Sort-Seite 860 00:47:32,680 --> 00:47:35,880 study.cs50.net besteht die Code für die Umsetzung Mergesort. 861 00:47:35,880 --> 00:47:38,550 So müssen Sie nicht zu realisieren es sich heute Abend. 862 00:47:38,550 --> 00:47:42,090 Aber stellen Sie sicher, dass Sie es nicht verstehen, als nur auswendig zu lernen. 863 00:47:42,090 --> 00:47:45,035 >> ZIELGRUPPE: [unverständlich]? 864 00:47:45,035 --> 00:47:49,720 >> Sprecher 2: Die Merge-Sort Seite auf study.cs50.net gibt es eine Praxis, 865 00:47:49,720 --> 00:47:53,570 Problem, dass, wenn Sie durch den Klick Problem, am Ende befindet sich eine 866 00:47:53,570 --> 00:47:56,280 Lösung, die die Zusammenführung ist Art Umsetzung. 867 00:47:56,280 --> 00:47:58,510 Aber stellen Sie sicher, dass Sie es verstehen, und nicht nur auswendig zu lernen 868 00:47:58,510 --> 00:47:59,760 oder kopieren Sie es auf. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> ZIELGRUPPE: Und ein vollkommen gültig Problem für die Prüfung wäre 871 00:48:06,340 --> 00:48:07,990 so etwas wie hier ist eine Liste. 872 00:48:07,990 --> 00:48:12,100 Was bedeutet diese Liste wie nach aussehen einen Schritt der Auswahl Art oder 873 00:48:12,100 --> 00:48:13,330 Insertion Sort oder was auch immer. 874 00:48:13,330 --> 00:48:14,940 Eine volle Iteration der Liste. 875 00:48:14,940 --> 00:48:18,530 Also selbst wenn Sie nicht am Ende brauchen, um Code für sie, um es zu verstehen müssen Sie 876 00:48:18,530 --> 00:48:20,440 genug, zu wissen, wie es geht zu werden, die Änderung dieser Array. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Das ist es für mich. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Applaus] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hey alle. 883 00:49:07,410 --> 00:49:08,390 Mein Name ist Lucas. 884 00:49:08,390 --> 00:49:16,840 Ich werde über Rekursion sprechen, die alle die Sorten, die wir gelernt haben, und eine 885 00:49:16,840 --> 00:49:18,050 wenig von allen Zeigern. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Also zunächst einmal, Rekursion. 888 00:49:20,340 --> 00:49:22,951 Was bedeutet es, zu sagen, dass eine Funktion ist rekursiv? 889 00:49:22,951 --> 00:49:24,675 >> ZIELGRUPPE: nennt sich. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, nennt sich selbst, ja. 891 00:49:26,500 --> 00:49:27,700 So wie auf diesem Bild, zum Beispiel. 892 00:49:27,700 --> 00:49:30,280 Es ist wie das Bild in von einem Bild und so weiter. 893 00:49:30,280 --> 00:49:35,740 So zum Beispiel, können Sie als Dan have-- , was über binäre Such sprechen. 894 00:49:35,740 --> 00:49:41,840 Ein Weg, in dem binäre Suche ist rekursive ist die Tatsache, dass Sie 895 00:49:41,840 --> 00:49:43,130 versuchen, eine Zahl zu finden. 896 00:49:43,130 --> 00:49:44,250 So können Sie gehen bis in die Mitte. 897 00:49:44,250 --> 00:49:47,130 Und dann, wenn die Zahlen dort überprüfen Sie in der linken und in der rechten Seite. 898 00:49:47,130 --> 00:49:49,650 >> Und dann, wenn Sie herausfinden, die Anzahl ist werde auf der linken Seite, ist es das gleiche 899 00:49:49,650 --> 00:49:53,340 etwas wie tut die Suche erneut, aber nur auf der linken Seite der Liste. 900 00:49:53,340 --> 00:49:57,350 Also das ist, wie es klingt wie es ist rekursiv. 901 00:49:57,350 --> 00:50:01,870 Also das ist, warum Sie Jungs haben rekursive Lösung für Merge-Sort. 902 00:50:01,870 --> 00:50:04,270 >> OK, also hier ist ein Beispiel. 903 00:50:04,270 --> 00:50:07,280 Also sagen wir mal, dass ich wählen alle Zahlen von 1 bis n ist. 904 00:50:07,280 --> 00:50:13,790 Ich merke, dass die Summe der n Zahl n plus n minus 1 bis 1. 905 00:50:13,790 --> 00:50:17,810 Aber dann, wenn ich mir n minus 1 plus n minus 2 plus 1, das ist der gleiche 906 00:50:17,810 --> 00:50:20,680 etwas wie Summieren Zahlen bis zu N minus 1 ist. 907 00:50:20,680 --> 00:50:25,890 So kann ich die Summe von einer gleichen Summe sagen gleich n und die Summe von n minus 1 ist. 908 00:50:25,890 --> 00:50:28,010 Heißt das Sinn? 909 00:50:28,010 --> 00:50:32,630 >> Und ich würde auch etwas anderes haben genannt Basisfall, was das ist 910 00:50:32,630 --> 00:50:37,440 die Summe der Zahlen bis Null Null. 911 00:50:37,440 --> 00:50:42,770 Also, sobald ich auf die Anzahl zu bekommen Null, höre ich auf zu zählen. 912 00:50:42,770 --> 00:50:45,330 Heißt das Sinn? 913 00:50:45,330 --> 00:50:48,120 >> Also hier ist ein Beispiel, wie Ich kann umsetzen, dass. 914 00:50:48,120 --> 00:50:49,860 So habe ich diese Funktion in einigen. 915 00:50:49,860 --> 00:50:51,700 Das dauert eine ganze Zahl n. 916 00:50:51,700 --> 00:50:56,300 Also hier bin erst prüfen, ob n weniger oder gleich Null. 917 00:50:56,300 --> 00:51:00,310 So dass, wenn es weniger oder gleich Null ist, I Null zurück, was unsere Basisfall ist. 918 00:51:00,310 --> 00:51:05,690 Ansonsten kann ich nur zurückgeben n plus die Summe der Zahlen von 919 00:51:05,690 --> 00:51:07,190 ein bis n minus eins. 920 00:51:07,190 --> 00:51:09,360 Sinnvoll? 921 00:51:09,360 --> 00:51:10,100 Ok. 922 00:51:10,100 --> 00:51:11,610 >> Also hier ist, wie es aussieht. 923 00:51:11,610 --> 00:51:15,260 Sie haben Summe von 2 Gleichen 2 plus der Summe der 1. 924 00:51:15,260 --> 00:51:18,930 Und einige von 1 1 plus die Summe der 0, die 0 ist. 925 00:51:18,930 --> 00:51:20,216 Sinnvoll? 926 00:51:20,216 --> 00:51:25,342 Also, wenn wir uns die Stapel von Ihrem Programm, das ist, wie es aussieht. 927 00:51:25,342 --> 00:51:26,820 >> Erstens haben wir die Hauptfunktion. 928 00:51:26,820 --> 00:51:30,320 Und dann die Hauptfunktion genannt Summe 2. 929 00:51:30,320 --> 00:51:36,690 Und dann die Summe 2 wird sagen, oh, Summe 2 ist gleich 2 und die Summe von eins. 930 00:51:36,690 --> 00:51:39,460 Also ich Summe von 1 hinzufügen, um den Stapel. 931 00:51:39,460 --> 00:51:43,860 Und die Summe von 1 wird zu Summe nennen 0, die auch die hinzugefügt werden 932 00:51:43,860 --> 00:51:44,630 auf den Stapel. 933 00:51:44,630 --> 00:51:49,240 Und dann jede dieser sind diejenigen, die auf dem anderen haben, um zurückzukehren 934 00:51:49,240 --> 00:51:52,020 vor die anderen können weitermachen. 935 00:51:52,020 --> 00:51:56,240 >> So zum Beispiel, hier Summe von 0, Zunächst wird auf 0 zurück. 936 00:51:56,240 --> 00:51:58,320 Und wählen Sie dann Summe von 1. 937 00:51:58,320 --> 00:52:00,850 Dann Summe von 1 zu gehen zurück 1 bis 2 zu summieren. 938 00:52:00,850 --> 00:52:03,900 Und schließlich Summe von 2 wird , um zum Haupt zurück 3. 939 00:52:03,900 --> 00:52:05,320 Heißt das Sinn? 940 00:52:05,320 --> 00:52:09,496 >> Es ist wirklich wichtig zu verstehen, wie der Stapel arbeiten und versuchen, 941 00:52:09,496 --> 00:52:11,980 sehen, ob es Sinn macht. 942 00:52:11,980 --> 00:52:13,260 OK, so Sortierung. 943 00:52:13,260 --> 00:52:16,170 Also, warum ist die Sortierung wichtig, zunächst? 944 00:52:16,170 --> 00:52:18,260 Warum sollten wir uns kümmern? 945 00:52:18,260 --> 00:52:20,310 Anyone? 946 00:52:20,310 --> 00:52:20,695 Geben Sie mir ein Beispiel nennen? 947 00:52:20,695 --> 00:52:21,040 Ja? 948 00:52:21,040 --> 00:52:22,968 >> ZIELGRUPPE: [unverständlich]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Ja, OK. 950 00:52:24,700 --> 00:52:26,090 So können Sie effizienter zu suchen. 951 00:52:26,090 --> 00:52:28,580 Das ist ein guter Weg. 952 00:52:28,580 --> 00:52:32,462 So, zum Beispiel, haben wir eine Menge von Dinge, eigentlich in unserem Leben, 953 00:52:32,462 --> 00:52:32,920 geordnet sind. 954 00:52:32,920 --> 00:52:34,830 Zum Beispiel, Wörterbücher. 955 00:52:34,830 --> 00:52:39,210 >> Es ist sehr wichtig, alle haben Wörter in einer bestimmten Reihenfolge, dass wir 956 00:52:39,210 --> 00:52:41,970 leicht zugänglich machen können. 957 00:52:41,970 --> 00:52:43,280 Also das ist, was er sagte. 958 00:52:43,280 --> 00:52:45,530 Sie können effizienter zu suchen. 959 00:52:45,530 --> 00:52:48,740 Überlegen Sie, wie schwer es sein würde, um eine haben Wörterbuch, in dem die Wörter in 960 00:52:48,740 --> 00:52:49,500 zufälliger Reihenfolge. 961 00:52:49,500 --> 00:52:53,120 Sie haben, zu betrachten, so ziemlich, jedes einzelne Wort, bis Sie die 962 00:52:53,120 --> 00:52:54,720 Wort, das Sie suchen. 963 00:52:54,720 --> 00:52:58,710 >> Wenn Sie Facebook sind auch, wenn Sie Ihre Freunde suchen, sind Sie 964 00:52:58,710 --> 00:53:03,540 gehen, um zu sehen, dass Facebook setzen Sie Ihre näher Freund ist auf der Oberseite die, die 965 00:53:03,540 --> 00:53:05,470 dass Sie nicht zu, dass reden nicht viel. 966 00:53:05,470 --> 00:53:08,080 Wenn Sie den ganzen Weg gehen, um den Boden des Ihr Freund Liste, wirst du sehen, 967 00:53:08,080 --> 00:53:11,250 Menschen, die Sie wahrscheinlich noch nicht einmal erinnern, dass Sie Freunde mit sind. 968 00:53:11,250 --> 00:53:14,590 Und das ist, weil Facebook sortiert Ihre Freunde auf, wie 969 00:53:14,590 --> 00:53:16,472 schließen Sie sie sind. 970 00:53:16,472 --> 00:53:17,930 >> Also, Daten zu organisieren. 971 00:53:17,930 --> 00:53:18,450 Auch Pokemon. 972 00:53:18,450 --> 00:53:21,400 Sie sehen also, dass alle Pokemons haben Nummern. 973 00:53:21,400 --> 00:53:27,210 Und das ist, wie eine einfache Weg zum Zugreifen auf Daten. 974 00:53:27,210 --> 00:53:29,050 >> ZIELGRUPPE: Zugriff auf Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Ja. 976 00:53:29,890 --> 00:53:32,395 >> ZIELGRUPPE: [unverständlich]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Yep. 978 00:53:33,460 --> 00:53:35,140 OK, also Auswahl sortieren. 979 00:53:35,140 --> 00:53:41,610 Auswahl Art wird sich die Auswahl kleinste Wert einer unsortierten Liste jedes 980 00:53:41,610 --> 00:53:43,300 Zeit in jeder Iteration. 981 00:53:43,300 --> 00:53:46,800 Es ist eine Art wie die Art, die Sie tun in Ihrem Kopf, wenn Sie versuchen, 982 00:53:46,800 --> 00:53:48,430 Sortieren einer Liste auf der Hand. 983 00:53:48,430 --> 00:53:51,990 >> Im Grunde ist alles, was Sie tun, Sie schauen für die kleinste Zahl. 984 00:53:51,990 --> 00:53:54,280 Sie es in der sortierten Liste. 985 00:53:54,280 --> 00:53:56,230 Und dann haben Sie für den Look nächste kleinste Zahl. 986 00:53:56,230 --> 00:54:00,080 Und dann haben Sie weiterhin tun, daß und so weiter. 987 00:54:00,080 --> 00:54:04,600 >> Also Auswahl Art ist im Grunde Sie Wählen Sie jedes Mal das kleinste 988 00:54:04,600 --> 00:54:05,750 unsortierten Wert. 989 00:54:05,750 --> 00:54:10,840 Gesetzt am Ende der sortierten Teil der Liste. 990 00:54:10,840 --> 00:54:12,370 Und halten tun. 991 00:54:12,370 --> 00:54:15,890 Also lassen Sie schnell sehen, was das sieht aus wie. 992 00:54:15,890 --> 00:54:19,340 Also hier ist die sortiert und unsortierte Liste. 993 00:54:19,340 --> 00:54:23,350 >> Also für die sortierte Liste von, es ist zunächst leer. 994 00:54:23,350 --> 00:54:26,760 Und dann werde ich das wählen kleinste Zahl hier, die 2 ist. 995 00:54:26,760 --> 00:54:30,650 So bekomme ich die Nummer 2 und ich in der Vorderseite der Liste. 996 00:54:30,650 --> 00:54:34,910 Und dann habe ich für die nächstkleinere aussehen Element, das 3 ist. 997 00:54:34,910 --> 00:54:37,050 Also habe ich es am Ende der sortierten Liste. 998 00:54:37,050 --> 00:54:38,140 Und dann halte ich das tun. 999 00:54:38,140 --> 00:54:40,040 Ich finde, 4 und legte es am Ende. 1000 00:54:40,040 --> 00:54:41,360 Finden Sie 5 und legte es am Ende. 1001 00:54:41,360 --> 00:54:44,830 >> Und, wie alle diese mal schauen, dass Ich sage, legte sie am Ende ist, 1002 00:54:44,830 --> 00:54:46,850 im Grunde, das Wechseln von zwei Werten. 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 Und dann die letzte, die Sie gerade haben ein weiteres Element. 1006 00:54:52,825 --> 00:54:55,870 So ist es bereits sortiert. 1007 00:54:55,870 --> 00:54:57,800 >> OK, so insertion sort. 1008 00:54:57,800 --> 00:55:03,180 Insertion Sort wirst du auch bist das Ding der mit einer sortiert und 1009 00:55:03,180 --> 00:55:04,690 eine unsortierte Liste. 1010 00:55:04,690 --> 00:55:14,540 Die einzige Sache ist, dass jedes Mal, dass Sie sind ein Element hinzufügt, um die sortierten 1011 00:55:14,540 --> 00:55:18,170 Liste, die Sie gerade das Element holen, dass ist vor der unsortierten Liste. 1012 00:55:18,170 --> 00:55:20,880 Und dann wirst du was finden sind Position sollte es in der sortiert werden 1013 00:55:20,880 --> 00:55:22,300 Teil der Liste. 1014 00:55:22,300 --> 00:55:25,840 >> Mal sehen, was das so ist das macht mehr Sinn. 1015 00:55:25,840 --> 00:55:29,360 Also zunächst, zum Beispiel, ich versuche , um die Nummer drei in der INSERT 1016 00:55:29,360 --> 00:55:30,680 sortierten Teil der Liste. 1017 00:55:30,680 --> 00:55:31,800 So dass die Liste nicht alles. 1018 00:55:31,800 --> 00:55:34,160 So kann ich einfach die Zahl 3 ist. 1019 00:55:34,160 --> 00:55:37,480 >> Nun, ich möchte, um die Zahl 5 hinzufügen das sortierte Teil der Liste. 1020 00:55:37,480 --> 00:55:38,900 Also schaue ich mir die Nummer 5. 1021 00:55:38,900 --> 00:55:40,450 Ich merke, dass es mehr als 3 ist. 1022 00:55:40,450 --> 00:55:41,980 Also ich weiß, dass es nach 3 sein. 1023 00:55:41,980 --> 00:55:44,100 Also habe ich 3 und 5. 1024 00:55:44,100 --> 00:55:45,940 >> Dann möchte ich die Nummer 2 ein. 1025 00:55:45,940 --> 00:55:51,630 Ich merke, dass die Nummer 2 ist eigentlich dauern dann sowohl 3 und 5. 1026 00:55:51,630 --> 00:55:54,580 So habe ich eigentlich, um es alle setzen Weise am Anfang der Liste. 1027 00:55:54,580 --> 00:55:59,030 So habe ich, der Art der, verschieben alle Elemente in der sortierten Liste, so kann ich 1028 00:55:59,030 --> 00:56:01,970 Platz machen für die Nummer 2 ist. 1029 00:56:01,970 --> 00:56:03,160 >> Dann sehe ich die Nummer 6. 1030 00:56:03,160 --> 00:56:05,450 Ich sehe, dass es nach 5 sein. 1031 00:56:05,450 --> 00:56:06,240 Also habe ich es dort. 1032 00:56:06,240 --> 00:56:07,965 Und schließlich, schaue ich mir die Nummer 4. 1033 00:56:07,965 --> 00:56:11,030 Und ich merke, es sollte zwischen 3 und 5 liegt. 1034 00:56:11,030 --> 00:56:14,870 Und dann habe ich es dort und Verschiebung alle anderen Elemente. 1035 00:56:14,870 --> 00:56:16,120 Sinnvoll? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 So Bubble-Sort ist im Grunde das, was du bist werde do-- wir nennen es Blase 1039 00:56:25,730 --> 00:56:30,113 Art, weil Sie durch die list-- gehen es ist eigentlich besser, wenn ich nur zeigen, 1040 00:56:30,113 --> 00:56:32,300 Sie möchten this-- 1041 00:56:32,300 --> 00:56:35,030 und du wirst vergleichen sind benachbarte Zahlen. 1042 00:56:35,030 --> 00:56:38,410 Und du wirst zu tauschen sind ihre Positionen, wenn sie nicht 1043 00:56:38,410 --> 00:56:39,190 in der richtigen Reihenfolge. 1044 00:56:39,190 --> 00:56:42,570 >> Also im Grunde ist das, was zu gehen geschehen wird, ist hier beispielsweise, 1045 00:56:42,570 --> 00:56:44,160 Sie haben 8 und 6. 1046 00:56:44,160 --> 00:56:47,270 Sie wissen, dass die Sortierreihenfolge wird tatsächlich 6 und 5, oder? 1047 00:56:47,270 --> 00:56:49,540 So wirst du, um die Aufträge zu tauschen. 1048 00:56:49,540 --> 00:56:51,370 Dann sehe ich, 8 und 4 hier. 1049 00:56:51,370 --> 00:56:52,250 Und ich das gleiche tun. 1050 00:56:52,250 --> 00:56:53,400 Ich tauschen wieder. 1051 00:56:53,400 --> 00:56:55,070 Und schließlich, 2 und 8. 1052 00:56:55,070 --> 00:56:56,670 Ich tauschen sie auch. 1053 00:56:56,670 --> 00:57:01,690 >> Es heißt Bubble Sort, weil nach jeder dieser Iterationen eigentlich 1054 00:57:01,690 --> 00:57:05,910 die größte Zahl in der Liste bekommt alle die bis zum Ende der Liste. 1055 00:57:05,910 --> 00:57:06,940 Heißt das Sinn? 1056 00:57:06,940 --> 00:57:11,880 Weil es hält tauschen sie und bewegt ihn nach rechts. 1057 00:57:11,880 --> 00:57:14,440 >> OK, das ist so die zweite Iteration. 1058 00:57:14,440 --> 00:57:17,200 Es wäre dasselbe sein. 1059 00:57:17,200 --> 00:57:20,190 Ich werde eine Swap tun und dann wird die letzte. 1060 00:57:20,190 --> 00:57:23,290 Ich, dass es keine Swaps und die Liste wird sortiert. 1061 00:57:23,290 --> 00:57:27,460 So in Bubble Sort, halten wir im Grunde gehen Sie durch die Liste und tauschen 1062 00:57:27,460 --> 00:57:32,310 Dinge, bis ich merke, dass ich es nicht getan swaps tun, dass die Iteration, die 1063 00:57:32,310 --> 00:57:34,270 bedeutet, dass Liste bereits sortiert ist. 1064 00:57:34,270 --> 00:57:35,520 Sinnvoll? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Reden wir ein wenig über Laufzeit. 1067 00:57:40,870 --> 00:57:45,165 So seid ihr so ​​erinnern Big O, Omega, Theta und? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Ja? 1070 00:57:50,990 --> 00:57:53,070 OK, was ist Big O, erste von allen? 1071 00:57:53,070 --> 00:57:54,315 >> ZIELGRUPPE: [unverständlich]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Ja, es ist ein Worst-Case genannt Laufzeit, das bedeutet nur, dass es 1073 00:57:59,070 --> 00:58:03,470 wie viel Sie erwarten, dass die Programm nehmen zu laufen. 1074 00:58:03,470 --> 00:58:04,910 Wie, in Bezug von-- 1075 00:58:04,910 --> 00:58:06,660 in diesem case-- n. 1076 00:58:06,660 --> 00:58:09,150 Die Anzahl der Elemente in der Liste im schlimmsten Fall. 1077 00:58:09,150 --> 00:58:12,520 Wie im schlimmsten Fall möglich. 1078 00:58:12,520 --> 00:58:17,100 >> Also für Bubble Sort, zum Beispiel, Wir haben große O von N Square. 1079 00:58:17,100 --> 00:58:20,580 Warum haben wir das? 1080 00:58:20,580 --> 00:58:24,716 Warum ist Bubble Sort Big O N Square? 1081 00:58:24,716 --> 00:58:27,614 >> ZIELGRUPPE: [unverständlich]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Ja, so der schlimmste Fall sein wird dass ich muss n Iterationen zu tun. 1083 00:58:35,670 --> 00:58:39,260 Also jeder der Iterationen zu gehen bis zum Ende zu bringen das größte Element 1084 00:58:39,260 --> 00:58:40,290 auf der Liste. 1085 00:58:40,290 --> 00:58:44,230 So der schlimmste Fall ist, dass ich das Ding n-mal zu tun. 1086 00:58:44,230 --> 00:58:48,550 Und für jede dieser Zeiten, ich muss n-Swaps zu tun, weil ich zum Vergleich 1087 00:58:48,550 --> 00:58:49,870 jeweils zwei Elementen. 1088 00:58:49,870 --> 00:58:53,730 Also das ist, warum es n Quadrat denn es ist n mal n. 1089 00:58:53,730 --> 00:59:00,120 >> Dann ist auch n quadratische Auswahl sortieren Denn für jede Iteration, ich 1090 00:59:00,120 --> 00:59:02,650 Blick auf jedes einzelne Element in der Liste. 1091 00:59:02,650 --> 00:59:04,980 Und dann finden die kleinste, was bedeutet, dass ich 1092 00:59:04,980 --> 00:59:06,130 Blick durch n Elemente. 1093 00:59:06,130 --> 00:59:11,750 Und ich muss da nicht, dass n-mal Ich muss alle n Elemente auswählen. 1094 00:59:11,750 --> 00:59:18,273 >> Eine Insertion Sort ist auch N Square weil im schlimmsten Fall wird 1095 00:59:18,273 --> 00:59:20,950 sein, eine, muss ich einfügen n Zahlen, oder? 1096 00:59:20,950 --> 00:59:22,765 Also ich weiß schon, dass ich werde n Iterationen. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Aber für jede dieser Zahlen, wenn ich auf alle Zahlen in aussehen 1099 00:59:29,840 --> 00:59:34,380 Die sortierte Liste und legen Sie sie den ganzen Weg im vorderen, wird diese n quadratisch 1100 00:59:34,380 --> 00:59:36,230 denn es wird n mal n wieder. 1101 00:59:36,230 --> 00:59:38,280 Sinnvoll? 1102 00:59:38,280 --> 00:59:41,512 Was ist mit Omega? 1103 00:59:41,512 --> 00:59:42,886 >> ZIELGRUPPE: [unverständlich]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Es ist das beste Szenario. 1105 00:59:44,620 --> 00:59:48,810 So ist es wie in einer Menge Zeit für Sortierung, die besten Fall ist 1106 00:59:48,810 --> 00:59:50,660 wenn die Liste bereits sortiert. 1107 00:59:50,660 --> 00:59:52,670 So müssen Sie nicht wirklich nichts zu tun. 1108 00:59:52,670 --> 00:59:56,290 Bubble Sort hat die beste Fall von n ist. 1109 00:59:56,290 --> 00:59:58,820 Haben Sie Jungs wissen, warum? 1110 00:59:58,820 --> 01:00:00,620 >> ZIELGRUPPE: [unverständlich]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Ja, wenn Sie im Auge behalten ob Daten Ration hatte keine Swaps oder 1112 01:00:05,640 --> 01:00:10,533 nicht, wenn Sie etwas haben, wie zu setzen dann, wenn es eine Iteration, wenn der 1113 01:00:10,533 --> 01:00:15,140 Liste bereits sortiert, im Grunde, Was passieren wird ist, dass ich zu gehen 1114 01:00:15,140 --> 01:00:17,890 versuchen, jede zwei tauschen benachbarten Elementen. 1115 01:00:17,890 --> 01:00:19,920 Ich werde sehen, dass es gibt keine Swaps. 1116 01:00:19,920 --> 01:00:21,230 Und ich sofort zurück. 1117 01:00:21,230 --> 01:00:24,240 >> Also es bedeutet, dass ich musste einfach gehen Sie durch die Liste einmal. 1118 01:00:24,240 --> 01:00:28,990 So ist es, weil ich mir n bei n Elementen. 1119 01:00:28,990 --> 01:00:30,930 Warum Auswahl Art N Square? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Ja, auch wenn die Liste sortiert, für jeder Iteration der Auswahl Art, ich 1122 01:00:45,520 --> 01:00:47,590 haben, um die minimale Element auszuwählen. 1123 01:00:47,590 --> 01:00:49,980 Das heißt also, dass ich, um zu suchen bei allen Elementen in der unsortierten 1124 01:00:49,980 --> 01:00:53,350 Liste und finden Sie die Mindest für jede Iteration. 1125 01:00:53,350 --> 01:00:54,600 Heißt das Sinn? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> Und das Einsetzen Schwert n, weil in der Fall, dass ich versuche, um den Einsatz 1128 01:01:04,690 --> 01:01:09,320 Nummern und alle Zahlen, wenn ich versuchen, sie zu legen, sehe ich, dass sie 1129 01:01:09,320 --> 01:01:10,510 in der richtigen Position. 1130 01:01:10,510 --> 01:01:15,120 Ich habe nicht zu gehen überprüfen Sie alle anderen Zahlen in der unsortierten Liste. 1131 01:01:15,120 --> 01:01:17,170 Also das ist, warum es n sein. 1132 01:01:17,170 --> 01:01:19,480 Sinnvoll? 1133 01:01:19,480 --> 01:01:21,035 Und was ist Theta? 1134 01:01:21,035 --> 01:01:23,410 >> ZIELGRUPPE: [unverständlich]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Was, sorry? 1136 01:01:24,380 --> 01:01:24,960 Sag es noch einmal. 1137 01:01:24,960 --> 01:01:25,666 >> ZIELGRUPPE: [unverständlich]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Genau. 1139 01:01:26,490 --> 01:01:31,280 Sie können, so dass nur die Auswahl zu sehen in Merge gespeichert Art haben thgr. 1140 01:01:31,280 --> 01:01:39,920 Und das ist, weil Sie nur Theta- wenn sowohl Big O und Omega sind die gleichen. 1141 01:01:39,920 --> 01:01:41,520 Ok. 1142 01:01:41,520 --> 01:01:44,210 Und schließlich verschmelzen sortieren ist in der log n. 1143 01:01:44,210 --> 01:01:48,910 >> Und dann, als Dan sagte, Merge sort ist eine Art, wie die gleiche Weise, 1144 01:01:48,910 --> 01:01:50,320 Sie binäre Suche zu tun. 1145 01:01:50,320 --> 01:01:53,530 So erhalten Sie die Liste. 1146 01:01:53,530 --> 01:01:55,170 Und du wirst in der Hälfte. 1147 01:01:55,170 --> 01:02:00,580 Und dann haben Sie sie schneiden in kleineren Hälften. 1148 01:02:00,580 --> 01:02:01,730 Und dann hast du ihnen zu verschmelzen. 1149 01:02:01,730 --> 01:02:02,960 Euch daran erinnern, dass, nicht wahr? 1150 01:02:02,960 --> 01:02:04,960 OK, wie er sagte. 1151 01:02:04,960 --> 01:02:08,330 >> OK, Zeiger. 1152 01:02:08,330 --> 01:02:11,078 Also, was ist ein Zeiger? 1153 01:02:11,078 --> 01:02:12,050 >> ZIELGRUPPE: [unverständlich]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: Eine Adresse. 1155 01:02:12,820 --> 01:02:13,720 Ok. 1156 01:02:13,720 --> 01:02:18,530 Ich weiß, dass David zeigt eine Reihe von Videos von Binky und Dinge zeigen 1157 01:02:18,530 --> 01:02:19,080 gegenseitig. 1158 01:02:19,080 --> 01:02:22,960 Aber Ich mag denken, von Zeigern als nur eine Adresse. 1159 01:02:22,960 --> 01:02:26,110 So ist es eine Variable, die gehen , um eine Adresse zu speichern. 1160 01:02:26,110 --> 01:02:31,940 >> So ist es gerade diese spezielle Variable dass vier Bytes lang. 1161 01:02:31,940 --> 01:02:36,550 Denken Sie daran, dass Zeiger auf alles ist immer vier Byte lange auf unser 32-Bit- 1162 01:02:36,550 --> 01:02:39,370 Maschine so der Fall das Gerät. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 Und es hat nur die Lage einer Variable darin. 1165 01:02:47,050 --> 01:02:50,240 >> OK, also gibt es diese Erinnerung, im Grunde. 1166 01:02:50,240 --> 01:02:57,420 So dass jeder Speicherblock tatsächlich eine Label, das die Adresse der ist 1167 01:02:57,420 --> 01:02:58,890 Slotty Speicher. 1168 01:02:58,890 --> 01:03:02,370 Das heißt also, dass ich kann ein Zeiger auf 1169 01:03:02,370 --> 01:03:03,380 jeder dieser Adressen. 1170 01:03:03,380 --> 01:03:09,930 Also der Grund, warum wir Zeiger verwenden ist wenn ich den Ort erinnern 1171 01:03:09,930 --> 01:03:12,300 dass eine bestimmte Variable ist ein Speicher. 1172 01:03:12,300 --> 01:03:16,560 >> Und euch daran erinnern, dass einer von denen Fällen war, wenn ich eine Funktion 1173 01:03:16,560 --> 01:03:20,820 wenn ich wirklich wollen, dass Sie Swap für Reals, habe ich eigentlich 1174 01:03:20,820 --> 01:03:22,110 haben, um einen Zeiger zu senden. 1175 01:03:22,110 --> 01:03:23,460 Nicht die Variable. 1176 01:03:23,460 --> 01:03:25,200 Denkt ihr daran? 1177 01:03:25,200 --> 01:03:26,450 Der Unterschied between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 was ist der Name? 1180 01:03:34,120 --> 01:03:36,010 Aufruf per Wert und Berufung Bezug, oder? 1181 01:03:36,010 --> 01:03:36,840 >> OK, ja. 1182 01:03:36,840 --> 01:03:38,330 So rufen nach Wert. 1183 01:03:38,330 --> 01:03:43,570 Wenn Sie senden Sie einfach eine Variable auf Sie funktionieren nur das Senden eines Wertes. 1184 01:03:43,570 --> 01:03:45,610 Sie sind also eigentlich Senden eine Kopie der Variablen. 1185 01:03:45,610 --> 01:03:49,720 Und Ihr Programm wurscht etwa wenn die gleiche Variable tatsächlich 1186 01:03:49,720 --> 01:03:51,650 eine Kopie. 1187 01:03:51,650 --> 01:03:56,330 >> Und fordern von Referenz bedeutet, dass Ich bin eigentlich die Übermittlung einer Kopie der 1188 01:03:56,330 --> 01:03:57,550 Zeiger auf diese Variable. 1189 01:03:57,550 --> 01:04:00,970 Also es bedeutet, dass ich schicke die Position dieser Variablen. 1190 01:04:00,970 --> 01:04:04,440 So spüre ich, haben die Position des Variable, wenn ich rufe die Funktion 1191 01:04:04,440 --> 01:04:09,700 mit Zeigern, ich bin in der Lage, tatsächlich ändern Sie die Daten, die in Haupt war. 1192 01:04:09,700 --> 01:04:12,050 Sinnvoll? 1193 01:04:12,050 --> 01:04:17,560 >> Obwohl, ist der Zeiger um eine Kopie, die Zeiger noch die reale Adresse 1194 01:04:17,560 --> 01:04:20,090 die Variable, die ich ändern möchten. 1195 01:04:20,090 --> 01:04:21,920 Sinnvoll? 1196 01:04:21,920 --> 01:04:24,290 >> So Erstellung Zeiger. 1197 01:04:24,290 --> 01:04:28,410 Denken Sie daran, den Zeiger immer der Typ, der es zeigt 1198 01:04:28,410 --> 01:04:29,890 und dann zu einem Stern. 1199 01:04:29,890 --> 01:04:31,030 Und dann steckt man den Namen. 1200 01:04:31,030 --> 01:04:35,765 Also denken Sie daran, dass, wenn Sie was auch immer Sterne, es ist wie ein Zeiger auf 1201 01:04:35,765 --> 01:04:38,990 dass das, was variable Typ, den Sie hatten. 1202 01:04:38,990 --> 01:04:42,850 >> Also hier in Stern, zum Beispiel, ist es einen Zeiger und eine ganze Zahl ist. 1203 01:04:42,850 --> 01:04:47,680 Und dann char Stern ist ein Zeiger char Sterne und so weiter. 1204 01:04:47,680 --> 01:04:47,960 Ja? 1205 01:04:47,960 --> 01:04:52,710 >> ZIELGRUPPE: Was, wenn wir eine Zeiger auf n zu Stern x. 1206 01:04:52,710 --> 01:04:55,255 Ich weiß, dass schafft einen Zeiger auf x. 1207 01:04:55,255 --> 01:04:59,432 Ist es auch x eine ganze Zahl zu erklären? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, also, wenn Sie sagen, n-Sterne-x, du bist nicht die Schaffung eines Zeigers auf ein 1209 01:05:05,170 --> 01:05:06,000 Variable x. 1210 01:05:06,000 --> 01:05:08,170 Sie erstellen einen Zeiger namens x. 1211 01:05:08,170 --> 01:05:09,396 >> ZIELGRUPPE: [unverständlich]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Also wenn ich sage, n-Sterne-x, ich bin sagen, hey, in Erinnerung, ich bin zu gehen 1213 01:05:14,250 --> 01:05:16,390 erhalten Sie eine dieser drei Boxen. 1214 01:05:16,390 --> 01:05:20,750 Und ich werde sagen, dass die wird zu x ist, das ist 1215 01:05:20,750 --> 01:05:22,000 wird ein Zeiger sein. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 Und etwas Interessantes über Zeiger ist, dass wir sagen, dass sie 1218 01:05:30,640 --> 01:05:32,620 4 Bytes für einen 32-Bit-Maschine. 1219 01:05:32,620 --> 01:05:36,320 Und der Grund dafür ist, dass 4 Bytes sind 32-Bit. 1220 01:05:36,320 --> 01:05:40,490 >> Und Maschinen, die 64 Bit eigentlich Zeiger haben Adressen 1221 01:05:40,490 --> 01:05:43,480 die 64 Bits lang sind. 1222 01:05:43,480 --> 01:05:49,820 So ist es nur, dass die Größe der Adressen in der Maschine unterschiedlich ist. 1223 01:05:49,820 --> 01:05:52,270 >> So Referenzierung und Dereferenzierung. 1224 01:05:52,270 --> 01:05:54,310 Es gibt zwei Operatoren, die Sie sollten daran denken, Jungs. 1225 01:05:54,310 --> 01:05:55,450 Die erste ist, Ampersand. 1226 01:05:55,450 --> 01:05:56,810 Die zweite ist Stern. 1227 01:05:56,810 --> 01:06:05,060 Verwirrt nicht von diesem Stern und diese Star, weil daran erinnern, dass in 1228 01:06:05,060 --> 01:06:06,950 diesem Fall müssen Sie n Stern. 1229 01:06:06,950 --> 01:06:08,700 >> Es ist wie eine ganze Ding zusammen. 1230 01:06:08,700 --> 01:06:10,720 Es gibt keine n Space Star. 1231 01:06:10,720 --> 01:06:12,070 So bedeutet es, dass es die Art. 1232 01:06:12,070 --> 01:06:14,870 Denken Sie daran, dass, wenn Sie Der veränderliche Stern, du bist 1233 01:06:14,870 --> 01:06:16,230 Gespräch über den Typ. 1234 01:06:16,230 --> 01:06:20,540 >> Wenn Sie nur Sterne und dann die haben Name der Variablen ist, bedeutet dies, dass 1235 01:06:20,540 --> 01:06:24,100 Sie Dereferenzierung des Zeigers, sind die bedeutet, dass Sie bei der suchen 1236 01:06:24,100 --> 01:06:28,290 Zeiger, der Suche nach der Adresse, es ist zeigt auf, gehen an diese Adresse, 1237 01:06:28,290 --> 01:06:30,850 und Blick auf, wenn Sie haben es. 1238 01:06:30,850 --> 01:06:34,310 So sage ich meinen Studenten, dass, wenn Sie Sterne, sollten Sie denken, dass es 1239 01:06:34,310 --> 01:06:36,850 die Abkürzung Gehalt. 1240 01:06:36,850 --> 01:06:39,770 >> Also, wenn Sie einen Zeiger haben, und Sie Sterne tun Zeiger, es ist die 1241 01:06:39,770 --> 01:06:41,720 Inhalt des Zeigers. 1242 01:06:41,720 --> 01:06:44,580 So dass Sie, was auch immer es ist zu zeigen gehen und Blick auf die konstanten Gehalt. 1243 01:06:44,580 --> 01:06:47,730 Und das kaufmännische ist die gleiche etwas wie Adresse. 1244 01:06:47,730 --> 01:06:52,560 >> Also wenn ich eine Variable a-- wie, lassen Sie uns sagen, dass ich ein int gleich 3-- 1245 01:06:52,560 --> 01:06:56,900 wenn ich will, um die Adresse zu finden, dass Variable eine Erinnerung, kann ich nur tun, 1246 01:06:56,900 --> 01:06:58,240 Ampersand ein. 1247 01:06:58,240 --> 01:07:00,280 Also ist es eine Adresse. 1248 01:07:00,280 --> 01:07:01,530 Sinnvoll? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Also hier ist ein Beispiel. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Diese fehlt int b und int c. 1253 01:07:11,530 --> 01:07:16,520 So int a = 3 bedeutet, dass Ich werde in den Speicher zu gehen. 1254 01:07:16,520 --> 01:07:19,870 Und ich werde einen Slot finden und setzen die Zahl 3 hier. 1255 01:07:19,870 --> 01:07:22,200 >> Und dann int b = 4. 1256 01:07:22,200 --> 01:07:23,100 Ich werde das gleiche tun. 1257 01:07:23,100 --> 01:07:25,840 Zum Speicher und legte eine Reihe 4 in einer der Boxen. 1258 01:07:25,840 --> 01:07:27,100 Und int gleich 5. 1259 01:07:27,100 --> 01:07:29,740 Finden Sie eine andere Box und legte eine Reihe 5. 1260 01:07:29,740 --> 01:07:36,160 >> Also, was ist diese Zeile aus tun? n-Sterne-pa entspricht Ampersand ein. 1261 01:07:36,160 --> 01:07:37,800 Also zunächst einmal, n-Sterne-pa. 1262 01:07:37,800 --> 01:07:39,050 Was tut sie? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> ZIELGRUPPE: [unverständlich]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Ja, so n-Sterne-pa, zuerst, deklariert einen Zeiger namens pa. 1266 01:07:47,890 --> 01:07:53,720 Und dann ist es die Zuordnung der Wert der dass Zeiger auf die Adresse einer sein. 1267 01:07:53,720 --> 01:07:55,790 So ein Ampersand. 1268 01:07:55,790 --> 01:07:58,510 Dann, wenn ich Sterne pb, Was ist ein Stern pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, sorry. 1271 01:08:03,150 --> 01:08:06,330 Dies wird auch fehlen. n-Sterne-pb. 1272 01:08:06,330 --> 01:08:07,905 Ich meine Sterne-PC. 1273 01:08:07,905 --> 01:08:11,200 Es tut mir leid. 1274 01:08:11,200 --> 01:08:11,940 Es ist die gleiche Sache. 1275 01:08:11,940 --> 01:08:16,408 Aber jetzt bin ich gut ar Schaffung eines Zeigers zu b und dann einen Zeiger auf c. 1276 01:08:16,408 --> 01:08:16,886 Ja? 1277 01:08:16,886 --> 01:08:18,136 >> ZIELGRUPPE: [unverständlich]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Ja. 1280 01:08:26,670 --> 01:08:32,630 Also, wenn Sie den Speicher gehen und Sie gehen die Box, die Bezeichner ist für pa, 1281 01:08:32,630 --> 01:08:37,149 Sie tatsächlich zu sehen eine Adresse ein. 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Ja? 1285 01:08:43,300 --> 01:08:45,605 >> ZIELGRUPPE: [unverständlich]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Ja, ist Zeiger eine Adresse. 1287 01:08:49,260 --> 01:08:50,120 Vergessen Sie nie, dass. 1288 01:08:50,120 --> 01:08:52,800 Es ist wie die wichtigsten Teil über Zeiger. 1289 01:08:52,800 --> 01:08:56,180 Es ist die Speicherung und Adresse bis zu einem gewissen variabel. 1290 01:08:56,180 --> 01:08:56,890 Noch etwas? 1291 01:08:56,890 --> 01:08:58,370 Noch Fragen? 1292 01:08:58,370 --> 01:08:59,189 Ok. 1293 01:08:59,189 --> 01:09:00,399 >> So Zeiger und Arrays. 1294 01:09:00,399 --> 01:09:08,189 Denken Sie daran, dass, wenn ich int Array 3, Im Grunde, was ich tue, ist, ich bin, Art 1295 01:09:08,189 --> 01:09:12,779 von und erklärte in einem Zeiger. 1296 01:09:12,779 --> 01:09:18,960 So Array ist ein bisschen wie ein Zeiger auf eine bestimmten Ort in Erinnerung, in der ich 1297 01:09:18,960 --> 01:09:21,999 für ganze Zahlen zugeordnet drei Slots. 1298 01:09:21,999 --> 01:09:23,430 Heißt das Sinn? 1299 01:09:23,430 --> 01:09:30,250 >> Also, wenn ich int Array 3, was ich bin Dabei Grundsätzlich schafft drei 1300 01:09:30,250 --> 01:09:31,479 Schlitze im Speicher. 1301 01:09:31,479 --> 01:09:33,899 Also habe ich nur drei Steckplätze finden im Speicher. 1302 01:09:33,899 --> 01:09:38,810 Also, wenn ich das tue, dann ein Star Array, es im Grunde bedeutet, den Inhalt des Array, 1303 01:09:38,810 --> 01:09:46,180 das heißt, ich löschen den Zeiger, ich gehe an diesen Ort, dass es auf den Hinweis, 1304 01:09:46,180 --> 01:09:47,939 und ich habe die Nummer eins. 1305 01:09:47,939 --> 01:09:53,729 >> Und dann, wenn ich Sterne Array plus 1, das ist das gleiche wie zu tun Array 1306 01:09:53,729 --> 01:09:59,690 Klammern ein, das bedeutet nur, ich gehe zu der Ort, den es zu zeigen. 1307 01:09:59,690 --> 01:10:03,000 Und dann die plus 1 Marken mich um eine Position. 1308 01:10:03,000 --> 01:10:06,510 Also gehe ich in diese Position, eigentlich, und legte die Nummer zwei. 1309 01:10:06,510 --> 01:10:10,900 >> Und dann, endlich, wenn ich Array plus 2, gehe ich dorthin, wo 1310 01:10:10,900 --> 01:10:11,825 Zeige Arrays an. 1311 01:10:11,825 --> 01:10:14,690 Und dann habe ich auf die Speicherblöcke zu bewegen. 1312 01:10:14,690 --> 01:10:16,240 Und dann habe ich die Nummer drei hier. 1313 01:10:16,240 --> 01:10:16,600 Ja? 1314 01:10:16,600 --> 01:10:21,400 >> ZIELGRUPPE: Also Sterne-Array ist einfach sagen, die erste Stelle. 1315 01:10:21,400 --> 01:10:25,090 Und Sie können 1, nur weil hinzuzufügen, Wir sind nur dann wirklich 1316 01:10:25,090 --> 01:10:27,295 verweisen, dass die erste Adresse. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Ja. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Warum haben wir zum Beispiel sagen, Array 0, Array 1 und Array 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Ich sage, warum Sie tun, 0, 1, 2, 3 anstelle von 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Einer der Gründe ist, ein Computer Programmierer lieber starten 1323 01:10:46,550 --> 01:10:47,750 Zählen von 0. 1324 01:10:47,750 --> 01:10:52,370 Beiden ist, denn wenn man Array 0 tun, es ist das gleiche wie zu tun Array 1325 01:10:52,370 --> 01:10:56,330 plus 0, was bedeutet, ich gehe zu , dass die Position, und ich nicht 1326 01:10:56,330 --> 01:10:59,320 überspringen alle Speicherblöcke. 1327 01:10:59,320 --> 01:11:01,750 Also ich habe keine Speicherblöcke zu bewegen. 1328 01:11:01,750 --> 01:11:02,015 Ja? 1329 01:11:02,015 --> 01:11:03,265 >> ZIELGRUPPE: [unverständlich]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Also ist sie zu fragen, was ist der Unterschied zwischen tun 1332 01:11:12,670 --> 01:11:14,000 dieser oder tun malloc. 1333 01:11:14,000 --> 01:11:17,550 Einer der Unterschiede ist, dass int Array 3 ist die Schaffung eines 1334 01:11:17,550 --> 01:11:19,260 Array auf dem Stapel. 1335 01:11:19,260 --> 01:11:23,080 Und wenn ich malloc tun, schafft auf dem Heap. 1336 01:11:23,080 --> 01:11:25,250 Heißt das Sinn? 1337 01:11:25,250 --> 01:11:28,870 >> Und wie funktioniert malloc eigentlich? 1338 01:11:28,870 --> 01:11:32,245 Warum also brauchen wir auch, um malloc verwenden? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Ihr Compiler Art von Figuren aus allen die Variablen, die Sie deklariert. 1341 01:11:39,700 --> 01:11:44,040 Und er schafft Raum für alle von ihnen in den Stapel. 1342 01:11:44,040 --> 01:11:47,180 So dass alle Ihre Variablen gehen irgendwo in dem Stapel sein. 1343 01:11:47,180 --> 01:11:49,460 So, hier ist die Umgebungsvariablen. 1344 01:11:49,460 --> 01:11:53,850 >> Also im Grunde, Raum für diese Variablen in Erinnerung an zuge 1345 01:11:53,850 --> 01:11:55,080 Kompilierung. 1346 01:11:55,080 --> 01:11:58,790 So bedeutet es, dass Ihr Computer all diese Variablen kennen 1347 01:11:58,790 --> 01:11:59,790 vorher. 1348 01:11:59,790 --> 01:12:02,500 Es braucht nicht zu wissen, welchen Wert Sie gehen in sie setzen. 1349 01:12:02,500 --> 01:12:05,490 Aber es muss wissen, wie viel Speicher Sie benötigen. 1350 01:12:05,490 --> 01:12:09,380 >> Aber jetzt lassen Sie uns sagen, dass zum Beispiel, Sie erstellen ein Array sind oder sich ein 1351 01:12:09,380 --> 01:12:13,430 Zeichenfolge, die Sie einnehmen von dem Benutzer. 1352 01:12:13,430 --> 01:12:17,300 Wie Sie wissen nicht, lange die Zeichenfolge sein wird, zum Beispiel. 1353 01:12:17,300 --> 01:12:20,600 So dass Sie nicht genau wissen, wie viele Speicherblöcke verteilen Sie, oder? 1354 01:12:20,600 --> 01:12:24,120 >> So dass es nicht wirklich Sinn für Sie sagen legte 100 Zeichen. 1355 01:12:24,120 --> 01:12:26,420 Und was dann, wenn der Benutzer schreibt 150? 1356 01:12:26,420 --> 01:12:27,670 Du wirst aufgeschraubt werden. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Also im Grunde, können Sie nicht sicher sein, wie viel Speicher Sie zuweisen müssen 1359 01:12:34,620 --> 01:12:35,960 wenn Sie das Programm kompilieren. 1360 01:12:35,960 --> 01:12:38,240 Sie weiß nur, dass auf die Laufzeit. 1361 01:12:38,240 --> 01:12:39,950 Also das ist, warum Sie die Haufen zu haben. 1362 01:12:39,950 --> 01:12:47,610 So der Haufen wird auf den Speicher haben die Sie während der Zuweisung sind 1363 01:12:47,610 --> 01:12:50,810 Dauer der Programmlauf. 1364 01:12:50,810 --> 01:12:55,780 >> Also im Grunde, wenn Sie malloc tun, was Sie tun, ist Speicher bei Zuteilung sind 1365 01:12:55,780 --> 01:13:00,160 Laufzeit, was bedeutet, dass Sie Entscheidung in diesem Moment, dass Sie 1366 01:13:00,160 --> 01:13:02,670 sollte, dass der Speicher. 1367 01:13:02,670 --> 01:13:04,210 Also das ist, wenn Sie es Zuweisung. 1368 01:13:04,210 --> 01:13:06,430 Heißt das Sinn? 1369 01:13:06,430 --> 01:13:11,690 >> Also denken Sie daran, der Stapel Variablen , die auf der Kompilierung erstellt. 1370 01:13:11,690 --> 01:13:14,560 Und dann hat der Heap-Variablen , die erstellt werden, wie Sie gehen 1371 01:13:14,560 --> 01:13:15,600 mit malloc, zum Beispiel. 1372 01:13:15,600 --> 01:13:16,850 >> ZIELGRUPPE: [unverständlich]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Also ist GetString werde malloc rufen. 1375 01:13:24,340 --> 01:13:26,710 Lassen Sie mich über malloc zu sprechen, und Ich werde GetString erklären. 1376 01:13:26,710 --> 01:13:32,000 So malloc dasselbe ist als Speicherzuweisung. 1377 01:13:32,000 --> 01:13:34,600 Also, es wird vergeben Speicher auf dem Heap. 1378 01:13:34,600 --> 01:13:40,010 Und es geht um einen Zeiger auf Rückkehr wo die Erinnerung wurde zugeordnet. 1379 01:13:40,010 --> 01:13:43,090 >> Also, wenn Sie do-- 1380 01:13:43,090 --> 01:13:44,910 hier für example-- 1381 01:13:44,910 --> 01:13:45,830 n-Sterne-Zeiger. 1382 01:13:45,830 --> 01:13:50,520 Und dann gleich Zeiger malloc Größe der Zoll mal 10. 1383 01:13:50,520 --> 01:13:52,110 Ich erstelle einen Zeiger. 1384 01:13:52,110 --> 01:13:59,020 Und dann bin ich, dass die Zuordnung Zeiger auf der Wert des Zeigers, die malloc 1385 01:13:59,020 --> 01:13:59,680 mir gibt. 1386 01:13:59,680 --> 01:14:04,150 >> Also ich frage malloc können Sie zuweisen Platz für 10 Ganzzahlen. 1387 01:14:04,150 --> 01:14:05,390 Das ist, was es sagt. 1388 01:14:05,390 --> 01:14:09,020 Und malloc gibt mir wieder ein Zeiger auf diesen Platz. 1389 01:14:09,020 --> 01:14:11,460 Sinnvoll? 1390 01:14:11,460 --> 01:14:12,270 Ok. 1391 01:14:12,270 --> 01:14:17,940 Ich Und GetString wird, im Grunde tut ein Aufruf von malloc, so dass Sie zuordnen können 1392 01:14:17,940 --> 01:14:21,680 Speicher während der Laufzeit. 1393 01:14:21,680 --> 01:14:26,460 >> Denken Sie daran, für null überprüfen weil malloc wird zu null zurück 1394 01:14:26,460 --> 01:14:28,200 wenn es keinen Speicher zuweisen. 1395 01:14:28,200 --> 01:14:31,660 Lassen Sie uns sagen, dass Sie für einen lächerlichen fragen Speichermenge. 1396 01:14:31,660 --> 01:14:33,950 Ihr Computer ist nicht sein der Lage, viel zuweisen, dass. 1397 01:14:33,950 --> 01:14:36,410 >> So malloc nur geht auf null zurück. 1398 01:14:36,410 --> 01:14:42,210 Also immer daran denken, wenn das Kontroll Zeiger, die Sie von malloc habe ist 1399 01:14:42,210 --> 01:14:45,640 null oder nicht, weil, wenn es ist, könnten Sie werden Dereferenzierung eines Zeigers und 1400 01:14:45,640 --> 01:14:48,340 dass Nebenfehler. 1401 01:14:48,340 --> 01:14:50,930 Und schließlich, nicht zu vergessen Ihre freien Speicher. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc schafft Speicher im Heap. 1404 01:15:00,560 --> 01:15:03,436 Und Sie den Speicher frei haben bevor das Programm beendet. 1405 01:15:03,436 --> 01:15:05,370 OK, das ist alles für mich. 1406 01:15:05,370 --> 01:15:07,900 Sorry, Rob. 1407 01:15:07,900 --> 01:15:07,950 Danke. 1408 01:15:07,950 --> 01:15:09,878 >> [Applaus] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Irgendwelche letzten Fragen vor Rob kommt? 1410 01:15:12,679 --> 01:15:13,138 Nein? 1411 01:15:13,138 --> 01:15:13,597 Ja? 1412 01:15:13,597 --> 01:15:15,892 >> ZIELGRUPPE: Ich habe nicht gesehen dieses online. 1413 01:15:15,892 --> 01:15:17,269 Haben Sie es hochgeladen? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Ich denke, Dave ist bald hochzuladen. 1415 01:15:19,106 --> 01:15:19,880 >> Dave: Es wird bekannt gegeben. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Es wird online sein. 1417 01:15:20,310 --> 01:15:21,175 >> ZIELGRUPPE: Es ist oben. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Es ist oben? 1419 01:15:22,090 --> 01:15:23,157 Ok. 1420 01:15:23,157 --> 01:15:23,644 Ja? 1421 01:15:23,644 --> 01:15:27,053 >> ZIELGRUPPE: [unverständlich]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Ja, können Sie kostenlos alle sollten die Speicher, der in der Halde gelegt wird. 1423 01:15:30,285 --> 01:15:31,535 >> ZIELGRUPPE: [unverständlich]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Ja. 1426 01:15:36,160 --> 01:15:39,980 Jedes Mal, wenn eine Kultur malloc haben, Sie sollten eine Kultur frei haben 1427 01:15:39,980 --> 01:15:42,640 nach dem Gebrauchs diese Variable. 1428 01:15:42,640 --> 01:15:44,800 So malloc und free sind immer zusammen. 1429 01:15:44,800 --> 01:15:45,410 Ihre besten Freunde. 1430 01:15:45,410 --> 01:15:46,720 Ja. 1431 01:15:46,720 --> 01:15:47,970 Rob? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Ich werde schnell gehen. 1434 01:15:56,850 --> 01:16:00,466 Und auch das Video wird aufgestellt werden. 1435 01:16:00,466 --> 01:16:01,716 Ich habe das Mikro an. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, so Woche fünf Sachen. 1438 01:16:26,230 --> 01:16:27,970 Das erste, was wir haben, ist der Stapel. 1439 01:16:27,970 --> 01:16:33,390 Also denken Sie daran, dass es nur einen Stapel Bild pro aktiven Funktionsaufruf. 1440 01:16:33,390 --> 01:16:34,710 Wir werden das in einer zweiten zu sehen. 1441 01:16:34,710 --> 01:16:37,850 Und auch daran erinnern, was wirklich geht in jeder Stapelrahmen sein werden 1442 01:16:37,850 --> 01:16:41,880 die lokalen Variablen der Funktionen, die Argumente, die übergeben werden, in unserem 1443 01:16:41,880 --> 01:16:43,880 Funktionen, zusammen mit ein paar andere Dinge, die Sie nicht wirklich 1444 01:16:43,880 --> 01:16:45,260 sich Sorgen machen müssen. 1445 01:16:45,260 --> 01:16:50,950 >> Also hier ist ein Beispiel-Programm, wo, Bekanntmachung Haupt wird printfing die Rückkehr 1446 01:16:50,950 --> 01:16:52,830 Wert von foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo wird nur gehen, um die Rückkehr Wert von 6 bar 4 Komma. 1448 01:16:57,930 --> 01:17:02,380 Und die Bar wird einige lokale eingestellt Variable n gleich 4 mal 6. 1449 01:17:02,380 --> 01:17:03,920 Und dann n zurück. 1450 01:17:03,920 --> 01:17:09,130 >> Lassen Sie uns also einen Blick auf die Stapel in ganz die eigentliche Iteration des Programms. 1451 01:17:09,130 --> 01:17:10,500 So gibt es die Unterseite unserer Stack. 1452 01:17:10,500 --> 01:17:12,620 Denken Sie daran, dass der Stapel wächst. 1453 01:17:12,620 --> 01:17:15,370 So an der Unterseite unserer Stapel, wir haben einen Stapelrahmen für Haupt. 1454 01:17:15,370 --> 01:17:17,000 Wenn das Programm startet, Haupt wird immer bei der sein 1455 01:17:17,000 --> 01:17:18,560 Unterseite unserer Stack. 1456 01:17:18,560 --> 01:17:20,880 >> Und was ist im Inneren unserer Stapelrahmen für Haupt? 1457 01:17:20,880 --> 01:17:23,810 Also auch wenn es keine lokalen Variablen, die Hauptsache, wie ich schon sagte, 1458 01:17:23,810 --> 01:17:29,670 wir haben arge und RGV nehmen Platz Innenseite der Hauptstapelrahmen. 1459 01:17:29,670 --> 01:17:33,260 Also Haupt geht jetzt um rufen Sie die Funktion foo. 1460 01:17:33,260 --> 01:17:35,125 Und das bedeutet, foo ist los bekommen ihren eigenen Stack-Frame. 1461 01:17:35,125 --> 01:17:36,970 >> So, jetzt haben wir innerhalb von sind die Funktion foo. 1462 01:17:36,970 --> 01:17:38,610 Und was muss gehen Stapelrahmen foo? 1463 01:17:38,610 --> 01:17:41,100 Nun, foo ein Argument n. 1464 01:17:41,100 --> 01:17:45,440 Und n gleich 4 ist da, dass ist das, was Haupt wird als Argument foo vorbei. 1465 01:17:45,440 --> 01:17:48,490 >> So, jetzt foo wird sich Bar an. 1466 01:17:48,490 --> 01:17:52,070 Was ist bar werde innen haben ihrer "Stack-Frame? 1467 01:17:52,070 --> 01:17:55,610 Es hat gleich 4 x y gleich sechs. 1468 01:17:55,610 --> 01:17:58,540 Das ist nicht alles, die wir gehen zu müssen, in der Stapelrahmen, weil bar 1469 01:17:58,540 --> 01:18:00,580 hat auch eine lokale Variable n. 1470 01:18:00,580 --> 01:18:03,370 Und n wir gehen gleich 24 gesetzt. 1471 01:18:03,370 --> 01:18:05,750 >> So, jetzt Bar wird zu n zurück. 1472 01:18:05,750 --> 01:18:09,300 So bar zurückkehrt 24 bis die Stapelrahmen foo. 1473 01:18:09,300 --> 01:18:12,560 Und weil Leiste wird nun wieder, dass bedeutet, dass wir knallen die Stapelrahmen 1474 01:18:12,560 --> 01:18:14,250 für bar von dem Stapel. 1475 01:18:14,250 --> 01:18:18,430 Also alle die Erinnerung, dass Bar gewesen mit ist jetzt vom Stapel. 1476 01:18:18,430 --> 01:18:21,550 >> Nun wird sich auch foo , um zum Haupt zurück 24. 1477 01:18:21,550 --> 01:18:25,470 So, jetzt, dass foo Rückkehr, die Speicher dass foo wurde mit seiner " 1478 01:18:25,470 --> 01:18:27,550 Stapelrahmen ist auch weg. 1479 01:18:27,550 --> 01:18:29,660 Und nun, Haupt wird sich printf nennen. 1480 01:18:29,660 --> 01:18:31,660 So ist nur ein weiterer printf-Funktion. 1481 01:18:31,660 --> 01:18:35,320 Wenn wir rufen printf, es geht um sein ein weiterer Stapelrahmen für die printf 1482 01:18:35,320 --> 01:18:36,470 Funktionsaufruf. 1483 01:18:36,470 --> 01:18:37,990 >> Was passieren wir printf? 1484 01:18:37,990 --> 01:18:40,090 Das ist was los zu gehen auf der Stapelrahmen. 1485 01:18:40,090 --> 01:18:44,970 Zumindest, wir vorbei dass i Prozent Schrägstrich-n und 1486 01:18:44,970 --> 01:18:47,180 Das Argument 24. 1487 01:18:47,180 --> 01:18:50,370 Es könnte mehr haben, es ist in Stapelrahmen wenn printf passiert zu sein, mit einigen 1488 01:18:50,370 --> 01:18:51,200 lokalen Variablen. 1489 01:18:51,200 --> 01:18:51,920 Wir wissen es nicht. 1490 01:18:51,920 --> 01:18:53,810 >> Aber all das geht in die printf Stapelrahmen. 1491 01:18:53,810 --> 01:18:55,740 Es wird die printf auszuführen. 1492 01:18:55,740 --> 01:18:56,830 Dann printf getan hat. 1493 01:18:56,830 --> 01:18:57,820 Es kommt wieder. 1494 01:18:57,820 --> 01:18:58,960 Schließlich Haupt ist getan. 1495 01:18:58,960 --> 01:18:59,860 Haupt zurückkehren wird. 1496 01:18:59,860 --> 01:19:02,020 Und dann unser Programm durchgeführt wird. 1497 01:19:02,020 --> 01:19:02,480 Ja? 1498 01:19:02,480 --> 01:19:04,505 >> ZIELGRUPPE: Sind Sie sehen [unverständlich] 1499 01:19:04,505 --> 01:19:05,900 Argumente [unverständlich] 1500 01:19:05,900 --> 01:19:06,830 Parameter? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: So gibt es einen feinen Unterschied zwischen Argumenten und Parametern. 1502 01:19:09,970 --> 01:19:14,400 Und wirklich, gemeinsam sprechen, neigen die Menschen nur mischen sie sich die ganze Zeit. 1503 01:19:14,400 --> 01:19:17,550 Aber Parameter sind die formalen Namen der Dinge. 1504 01:19:17,550 --> 01:19:20,180 >> So argc und argv sind die Parameter zur Haupt. 1505 01:19:20,180 --> 01:19:23,440 Argumente sind, was Sie wirklich Pass in wie diese Parameter. 1506 01:19:23,440 --> 01:19:28,340 So gibt es, wenn ich rufe foo von 4, 4 ist das Argument, ich bin im Vorbeigehen. 1507 01:19:28,340 --> 01:19:31,460 Und der Parameter n, der Innen foo, nimmt den Wert 4 1508 01:19:31,460 --> 01:19:32,880 seit 4 war das Argument. 1509 01:19:32,880 --> 01:19:35,826 >> ZIELGRUPPE: [unverständlich]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n ist eine lokale Variable zu sperren. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n ist immer noch lokal auf foo, aber es ist ein Parameter auf foo. 1513 01:19:44,960 --> 01:19:48,190 Es ist nicht eine lokale Variable. 1514 01:19:48,190 --> 01:19:48,546 Ja? 1515 01:19:48,546 --> 01:19:51,180 >> ZIELGRUPPE: [unverständlich]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo ist nur anrufen und Bar Rückkehr unabhängig bar zurück. 1517 01:19:55,400 --> 01:19:56,786 >> ZIELGRUPPE: [unverständlich]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Ja, nur um zu sehen, mehrere Stack-Frames. 1519 01:19:59,591 --> 01:20:00,082 Ja? 1520 01:20:00,082 --> 01:20:03,519 >> ZIELGRUPPE: Warum wurde foo genannt vor printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Warum wurde foo vor printf genannt? 1522 01:20:05,920 --> 01:20:10,740 So habe ich könnte stattdessen etwas getan wie int x gleich foo von 4 1523 01:20:10,740 --> 01:20:12,980 und dann gedruckt x. 1524 01:20:12,980 --> 01:20:17,900 Sondern kombinierte ich die Funktion rufen in die printf Argument. 1525 01:20:17,900 --> 01:20:23,670 >> Aber beachten Sie, dass wir nicht wirklich den Anruf an, bis wir printf ausführen 1526 01:20:23,670 --> 01:20:25,610 herauszufinden, was foo von 4 ist. 1527 01:20:25,610 --> 01:20:27,480 So werden wir diese bewerten. 1528 01:20:27,480 --> 01:20:32,504 Und nur einmal das erledigt gehen wieder zu kommen und zu bewerten diese. 1529 01:20:32,504 --> 01:20:32,990 Ja? 1530 01:20:32,990 --> 01:20:37,364 >> ZIELGRUPPE: Da sowohl bar [unverständlich] 1531 01:20:37,364 --> 01:20:41,738 Wert ist, warum haben wir nicht [unverständlich]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Sie sollten vollständig int sein. 1533 01:20:44,400 --> 01:20:46,260 Das war nicht mehr als gefangen mehreren Durchgängen. 1534 01:20:46,260 --> 01:20:49,010 So sollte es int Bar und int foo da beide von denen 1535 01:20:49,010 --> 01:20:50,460 kehren Zahlen. 1536 01:20:50,460 --> 01:20:54,214 Leere ist nur, wenn sie nicht gehen Istwerte zurückliefern. 1537 01:20:54,214 --> 01:20:54,692 Ja? 1538 01:20:54,692 --> 01:20:58,038 >> ZIELGRUPPE: Wenn Sie eine Linie hatte oben die Rückkehr, [unverständlich]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: Eine Zeile über der Rendite? 1541 01:21:03,730 --> 01:21:04,410 >> ZIELGRUPPE: Ja. 1542 01:21:04,410 --> 01:21:10,780 Wie, wenn Sie tat printf und [unverständlich], würde es zweimal drucken? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Also innerhalb von foo? 1544 01:21:12,992 --> 01:21:15,945 Wenn wir eine printf hier richtig? 1545 01:21:15,945 --> 01:21:16,750 >> ZIELGRUPPE: Ja. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Also, wenn wir eine printf Recht hatte hier wäre es einmal zu drucken. 1547 01:21:19,510 --> 01:21:23,400 Da wir foo einmal richtig fordern hier, dann werden wir die printf getroffen. 1548 01:21:23,400 --> 01:21:24,620 Dann werden wir bar nennen. 1549 01:21:24,620 --> 01:21:25,710 Und dann wird foo zurück. 1550 01:21:25,710 --> 01:21:26,275 Und das ist es. 1551 01:21:26,275 --> 01:21:30,985 Wir haben nur je begegnen printf einmal. 1552 01:21:30,985 --> 01:21:31,482 Ja? 1553 01:21:31,482 --> 01:21:32,973 >> ZIELGRUPPE: [unverständlich] 1554 01:21:32,973 --> 01:21:37,950 printf Aufruf foo, weil wir zuerst Aufruf printf und dann sind wir vorbei 1555 01:21:37,950 --> 01:21:38,580 die Argumente. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Also in der Theorie, ist nicht printf Aufruf foo? 1557 01:21:40,960 --> 01:21:42,220 Also nein. 1558 01:21:42,220 --> 01:21:47,360 Nur die Reihenfolge, in c ist los führen diese Dinge ist, bevor wir 1559 01:21:47,360 --> 01:21:49,800 eine Funktion aufrufen, alle Argumente an die Funktion haben 1560 01:21:49,800 --> 01:21:51,600 vollständig ausgewertet werden. 1561 01:21:51,600 --> 01:21:53,540 So wird dieser vollständig ausgewertet? 1562 01:21:53,540 --> 01:21:54,610 Ja, es ist nur ein String. 1563 01:21:54,610 --> 01:21:55,480 Es ist nur ein Wert. 1564 01:21:55,480 --> 01:21:57,200 >> Dann müssen wir komplett bewerten diese. 1565 01:21:57,200 --> 01:21:59,720 Sobald dies geschehen ist, nun alle ihre Argumente werden ausgewertet. 1566 01:21:59,720 --> 01:22:01,982 Und jetzt können wir die Aufruf von printf. 1567 01:22:01,982 --> 01:22:02,478 Ja? 1568 01:22:02,478 --> 01:22:03,966 >> ZIELGRUPPE: Eine Frage. 1569 01:22:03,966 --> 01:22:06,942 Wenn Sie eine Lücke Funktion haben, müssen Sie haben Rückgabe Semikolon? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Sie müssen nicht eine Rückkehr Semikolon wenn Sie eine Funktion nichtig. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 Ok. 1573 01:22:14,780 --> 01:22:15,830 So, jetzt einige Haufen Zeug. 1574 01:22:15,830 --> 01:22:19,640 Heap ist so, wie wir zu tun mit dynamischer Speicherverwaltung. 1575 01:22:19,640 --> 01:22:23,100 Und diese direkt im Gegensatz zu der Stapel, die wir nennen automatische 1576 01:22:23,100 --> 01:22:24,100 Speicherverwaltung. 1577 01:22:24,100 --> 01:22:27,140 >> So auf den Stapel, die Sie nie wirklich mit, wie die lokalen Variablen umgehen 1578 01:22:27,140 --> 01:22:30,400 werden geschoben und alle tauchte ab diese Stack-Frames und all das Zeug. 1579 01:22:30,400 --> 01:22:31,070 Sie haben keine Sorgen zu machen. 1580 01:22:31,070 --> 01:22:32,070 Es ist automatisch. 1581 01:22:32,070 --> 01:22:36,990 So der Haufen ist manuell. 1582 01:22:36,990 --> 01:22:38,070 Und die [unverständlich] 1583 01:22:38,070 --> 01:22:41,260 kommt von diesen Funktionen malloc und free. 1584 01:22:41,260 --> 01:22:43,550 >> Also hier ist ein anderes Programm. 1585 01:22:43,550 --> 01:22:47,145 Alles, was wir tun, ist mallocing eine ganze Zahl ist. 1586 01:22:47,145 --> 01:22:49,360 Wir es in die Speicherung Sterne-x. 1587 01:22:49,360 --> 01:22:52,520 Natürlich haben wir, um zu überprüfen zu sehen, wenn x ist null. 1588 01:22:52,520 --> 01:22:56,400 Dann werden wir gerade eingestellt, was x wird auf 50 zeigt. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Drucken, was zu zeigen ist x, print x, und dann frei x. 1591 01:23:03,260 --> 01:23:08,920 >> Also, wie ist das eigentlich gut aussehen wird wenn wir uns auf unsere Stack und Heap? 1592 01:23:08,920 --> 01:23:10,950 Also werden wir wieder starten. 1593 01:23:10,950 --> 01:23:12,580 Der Boden unserer Stapel wie zuvor. 1594 01:23:12,580 --> 01:23:15,930 Denken Sie daran, dass dir häufen direkt wendet sich gegen die Stapel? 1595 01:23:15,930 --> 01:23:18,850 So werden wir das haben Spitze unserer Haufen da oben. 1596 01:23:18,850 --> 01:23:22,590 >> So dass die Unterseite der Stapel, haben wir Stapelrahmen für unsere Haupt. 1597 01:23:22,590 --> 01:23:28,000 Es hat den Raum für argc, argv, und wir haben nun eine lokale Variable X, die 1598 01:23:28,000 --> 01:23:30,030 ist ein int Stern. 1599 01:23:30,030 --> 01:23:32,240 Also, wir werden durchlaufen durch dieses Programm. 1600 01:23:32,240 --> 01:23:34,420 Das erste, was wir haben, ist ein Aufruf von malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Also machen wir einen Aufruf von malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc eine Funktion ist. 1603 01:23:37,100 --> 01:23:38,770 Es geht um einen Stack-Frame zu bekommen. 1604 01:23:38,770 --> 01:23:40,180 Was passieren wir von malloc? 1605 01:23:40,180 --> 01:23:41,610 Das wird nach innen zu gehen der Stapelrahmen. 1606 01:23:41,610 --> 01:23:45,130 Wir vorbei Größe n, die 4 ist. 1607 01:23:45,130 --> 01:23:49,700 So dass auf malloc übergeben. 1608 01:23:49,700 --> 01:23:50,910 >> Was bedeutet malloc tun? 1609 01:23:50,910 --> 01:23:53,820 Es packt uns etwas Platz auf dem Heap. 1610 01:23:53,820 --> 01:23:55,320 So werden wir auf den Heap zu gehen. 1611 01:23:55,320 --> 01:23:57,990 Und wir werden zu greifen 4 Bytes auf dem Heap. 1612 01:23:57,990 --> 01:24:01,500 So geben wir nur, dass eine beliebige Adresse. 1613 01:24:01,500 --> 01:24:06,680 0x123 Einfach so tun, dass ist ein Adresse, die auf dem Heap ist. 1614 01:24:06,680 --> 01:24:12,300 >> Also, was ist eigentlich in der die Bereich des Speichers an der Adresse Ox123? 1615 01:24:12,300 --> 01:24:13,080 Müll. 1616 01:24:13,080 --> 01:24:15,270 So haben wir nicht alles in ihm gespeichert. 1617 01:24:15,270 --> 01:24:18,830 So weit wir wissen, ist es könnte alles sein. 1618 01:24:18,830 --> 01:24:20,560 Sie sollten nicht davon ausgehen, es ist null. 1619 01:24:20,560 --> 01:24:23,870 Es ist sehr wahrscheinlich, nicht Null. 1620 01:24:23,870 --> 01:24:26,260 >> So, jetzt malloc Renditen. 1621 01:24:26,260 --> 01:24:28,020 Und was tun wir, wenn malloc zurückkehrt? 1622 01:24:28,020 --> 01:24:29,800 Wir setzen das, was er zurückkehrt. 1623 01:24:29,800 --> 01:24:32,290 Wir setzen x gleich, was es kehrt zurück. 1624 01:24:32,290 --> 01:24:33,690 Also was ist es der Rückkehr? 1625 01:24:33,690 --> 01:24:38,150 Es zurück 0x123 da dies die Adresse des Speicherblocks, dass sie 1626 01:24:38,150 --> 01:24:40,850 nur in dem Heap zugewiesen. 1627 01:24:40,850 --> 01:24:47,160 >> Also zurück 0x123 x geht jetzt eingestellt werden gleich 0x123, die, bildhaft, 1628 01:24:47,160 --> 01:24:52,940 wir häufig als x, der einen vorhandenen ziehen Pfeil nach diesem Block. 1629 01:24:52,940 --> 01:24:55,820 Aber x ist nur die Speicherung dieser Adresse. 1630 01:24:55,820 --> 01:24:58,670 So, jetzt müssen wir überprüfen, ob x ist null. 1631 01:24:58,670 --> 01:24:59,120 Es ist nicht null. 1632 01:24:59,120 --> 01:25:02,170 Wir geben vor, dass malloc gelungen. 1633 01:25:02,170 --> 01:25:04,950 >> So, jetzt Sterne-x gleich 50 ist. 1634 01:25:04,950 --> 01:25:08,450 So erinnert es bedeutet Sterne gehen an diese Adresse. 1635 01:25:08,450 --> 01:25:12,700 So 0x123 Wir gehen auf gehen an diese Adresse. 1636 01:25:12,700 --> 01:25:14,660 Also das bringt uns da oben. 1637 01:25:14,660 --> 01:25:16,310 Was tun wir an dieser Adresse? 1638 01:25:16,310 --> 01:25:19,020 Wir Speichern 50. 1639 01:25:19,020 --> 01:25:22,500 >> Also nach dieser Linie, ist das, was Dinge aussehen würde. 1640 01:25:22,500 --> 01:25:24,640 So, jetzt ist es nicht mehr Müll da oben. 1641 01:25:24,640 --> 01:25:28,910 Jetzt wissen wir, dass 50 ist, dass bestimmte Adresse, weil 1642 01:25:28,910 --> 01:25:32,410 setzen wir sie auf das. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 So, jetzt werden wir f drucken. 1645 01:25:34,370 --> 01:25:38,490 >> Also zuerst werden wir Sterne x drucken. 1646 01:25:38,490 --> 01:25:39,640 Also, was ist Sterne-x? 1647 01:25:39,640 --> 01:25:44,300 Auch Sterne-x bedeutet, gehen Sie zu der Sache, dass x verweist. 1648 01:25:44,300 --> 01:25:47,140 So x speichert 0x123 Go dazu. 1649 01:25:47,140 --> 01:25:48,490 Wir erhalten 50. 1650 01:25:48,490 --> 01:25:50,540 So drucken Sie f, dass. 1651 01:25:50,540 --> 01:25:54,900 Und das bedeutet, es wird gedruckt 50. 1652 01:25:54,900 --> 01:25:56,850 Und dann, die zurückgibt. 1653 01:25:56,850 --> 01:25:58,340 >> Und dann haben wir die zweite printf. 1654 01:25:58,340 --> 01:25:59,370 Wir sind jetzt Prozent p. 1655 01:25:59,370 --> 01:26:01,680 Wenn Sie es nicht gesehen haben, das ist nur, wie Sie einen Zeiger zu drucken. 1656 01:26:01,680 --> 01:26:04,960 So haben wir i Prozent, Prozent f, und alle diejenigen, die bereits. 1657 01:26:04,960 --> 01:26:07,160 Also Prozent p, drucken Sie ein Zeiger. 1658 01:26:07,160 --> 01:26:08,920 >> X so ist ein Zeiger. 1659 01:26:08,920 --> 01:26:13,440 Also, wenn wir gehen, um x selbst zu drucken, wir Druck Was ist eigentlich in 1660 01:26:13,440 --> 01:26:19,220 x, der 0x123 ist also der erste Druck f Drucklegung 50. 1661 01:26:19,220 --> 01:26:23,620 Die zweite Druck f wird zu drucken 0x123 Ja? 1662 01:26:23,620 --> 01:26:27,460 >> ZIELGRUPPE: Haben Sie Prozent verwenden x, um einen Zeiger drucken? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Also haben Sie Prozent verwenden x, um einen Zeiger drucken? 1664 01:26:31,200 --> 01:26:38,350 So kann man aber nur x Prozent, in der Regel, denn wie, wenn Sie einige haben 1665 01:26:38,350 --> 01:26:40,325 integer und Sie drucken möchten es als Hexadezimalzahl. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Das ist, wie Sie das tun. 1668 01:26:44,880 --> 01:26:47,160 >> Ange Prozent würde d drucken als Dezimalzahl. 1669 01:26:47,160 --> 01:26:50,310 Das ist waren wir bekommen Prozent d. i ist nur Integer. 1670 01:26:50,310 --> 01:26:52,690 Prozent p spezifisch für Zeiger. 1671 01:26:52,690 --> 01:26:54,060 >> X so ist ein Zeiger. 1672 01:26:54,060 --> 01:26:56,360 Wir wollen Prozent p verwenden. 1673 01:26:56,360 --> 01:26:57,937 Aber Prozent x funktionieren könnte. 1674 01:26:57,937 --> 01:26:58,414 Ja? 1675 01:26:58,414 --> 01:26:59,664 >> ZIELGRUPPE: [unverständlich]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Ja. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Zumindest für diese call-- so dass ich hat es nicht in hier. 1680 01:27:13,440 --> 01:27:19,850 Aber diese beiden Argumente sind notwendigerweise Innere dieser Stapelrahmen 1681 01:27:19,850 --> 01:27:23,040 zusammen mit allen lokalen Variablen printf passiert zu sein mit. 1682 01:27:23,040 --> 01:27:27,020 Und dann der nächste Aufruf von printf jetzt innerhalb von printf Stapelrahmen ist 1683 01:27:27,020 --> 01:27:33,960 Prozent p Backslash n und unabhängig von der Wert von x, der 0x123 ist. 1684 01:27:33,960 --> 01:27:34,425 Ja? 1685 01:27:34,425 --> 01:27:35,675 >> ZIELGRUPPE: [unverständlich]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Es wird etwas drucken das sieht so aus. 1688 01:27:40,880 --> 01:27:41,846 >> ZIELGRUPPE: [unverständlich]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: So druckt er in der Adressformular aus. 1690 01:27:44,510 --> 01:27:47,003 Es sieht aus wie eine Adresse. 1691 01:27:47,003 --> 01:27:47,494 Ja? 1692 01:27:47,494 --> 01:27:49,458 >> ZIELGRUPPE: [unverständlich]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Warum ist was? 1694 01:27:51,075 --> 01:27:52,920 >> ZIELGRUPPE: [unverständlich]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Warum ist das Zeiger 4 Bytes? 1696 01:27:55,240 --> 01:27:58,500 So gibt es eine ganze Reihe von 0 hat vor diesem. 1697 01:27:58,500 --> 01:28:03,740 So ist es wirklich 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 Auf einem 64-Bit-System, gäbe es eine ganze Reihe von mehr Nullen. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Ja? 1701 01:28:11,900 --> 01:28:13,150 >> ZIELGRUPPE: [unverständlich]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Also der erste printf wird sich print-- 1704 01:28:21,130 --> 01:28:21,980 >> ZIELGRUPPE: [unverständlich]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Ja, es geht um zu drucken welche x zu zeigen ist. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Stern sagt, was ist das Sache, die auf. 1708 01:28:29,070 --> 01:28:30,300 Packen es. 1709 01:28:30,300 --> 01:28:31,455 Also was ist es, die auf? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Packen es. 1712 01:28:32,410 --> 01:28:33,390 Das ist, was wir zu drucken. 1713 01:28:33,390 --> 01:28:37,020 Der Erwägung, dass die nächste, wir sind nur Druck x selber. 1714 01:28:37,020 --> 01:28:38,850 Was im Inneren der f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 Ok. 1717 01:28:44,500 --> 01:28:46,620 >> Und dann, endlich, haben wir die frei. 1718 01:28:46,620 --> 01:28:48,040 Was passieren wir zu befreien? 1719 01:28:48,040 --> 01:28:49,470 Wir vorbei x. 1720 01:28:49,470 --> 01:28:52,380 Diese Zeit habe ich eigentlich angezeigt in dem Stapelrahmen. 1721 01:28:52,380 --> 01:28:56,370 >> So dass wir das Bestehen der Wert 0x123 zu befreien. 1722 01:28:56,370 --> 01:28:59,070 So, jetzt kostenlos kennt, alles in Ordnung, Ich muss gehen bis zu dem Heap 1723 01:28:59,070 --> 01:29:00,050 und frei, dass der Speicher. 1724 01:29:00,050 --> 01:29:03,920 Es ist nicht mehr mit, was ist an der Adresse 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> So frei ist, werde frei dass aus dem Haufen. 1726 01:29:07,010 --> 01:29:09,490 Jetzt ist unser Haufen ist wieder leer. 1727 01:29:09,490 --> 01:29:11,120 Wir haben keine Speicherlecks. 1728 01:29:11,120 --> 01:29:12,940 Jetzt kostenlos zurückkehren wird. 1729 01:29:12,940 --> 01:29:16,130 Beachten Sie, dass x ist immer noch 0x123. 1730 01:29:16,130 --> 01:29:18,240 Aber das ist jetzt nicht gültig Speicher. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Wir sollten nicht mehr dereferenzieren x. 1733 01:29:23,986 --> 01:29:24,440 Ja? 1734 01:29:24,440 --> 01:29:27,240 >> ZIELGRUPPE: Ist 0 zurück redundant? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Ist returen 0 redundant? 1736 01:29:28,290 --> 01:29:31,110 Ja. 1737 01:29:31,110 --> 01:29:33,950 Wir haben nur, dass es da wir haben eine Rück eine für Luft. 1738 01:29:33,950 --> 01:29:36,830 So ist es wie, ja, können gehören die return 0. 1739 01:29:36,830 --> 01:29:37,310 Ja? 1740 01:29:37,310 --> 01:29:38,560 >> ZIELGRUPPE: [unverständlich]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: So nach freien x, was passiert, wenn wir versuchen, den Zeiger dereferenzieren? 1743 01:29:45,580 --> 01:29:47,240 Es ist möglich, dass nichts schief geht. 1744 01:29:47,240 --> 01:29:49,330 Es ist möglich, dass wir immer noch 50. 1745 01:29:49,330 --> 01:29:53,590 >> Es ist möglich, auch, dass, dass der Speicher jetzt für etwas anderes verwendet. 1746 01:29:53,590 --> 01:29:57,140 So ist es nicht definiertes Verhalten. 1747 01:29:57,140 --> 01:30:00,772 Undefined und bedeutet nichts kann passieren. 1748 01:30:00,772 --> 01:30:01,250 Ja? 1749 01:30:01,250 --> 01:30:02,500 >> ZIELGRUPPE: [unverständlich]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Nein, also, wenn Sie zuweisen x auf etwas anderes. 1752 01:30:10,830 --> 01:30:15,870 Also, wenn wir hier die x gleich malloc etwas else-- 1753 01:30:15,870 --> 01:30:17,100 malloc Größe event-- 1754 01:30:17,100 --> 01:30:20,180 dann, dass Originalblock der Speicher wird nicht freigegeben. 1755 01:30:20,180 --> 01:30:21,490 Und wir haben offiziell verloren. 1756 01:30:21,490 --> 01:30:23,150 Das ist ein Speicherleck. 1757 01:30:23,150 --> 01:30:25,090 Wir haben alle Verweise verloren in diesem Speicherblock. 1758 01:30:25,090 --> 01:30:26,827 Also gibt es keine Möglichkeit, können wir jemals befreien sie. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, also dann wieder 0 Mitteln erfolgen. 1761 01:30:36,630 --> 01:30:37,900 >> Alles in Ordnung, so Stack-Überlauf. 1762 01:30:37,900 --> 01:30:39,320 Was ist die Idee hier? 1763 01:30:39,320 --> 01:30:41,210 Also denken Sie daran, wird Heap nach unten. 1764 01:30:41,210 --> 01:30:43,480 Stack steigt. 1765 01:30:43,480 --> 01:30:48,000 So war dies das Beispiel aus Vorlesung, Ich denke, an dem die Haupt ist gerade dabei, 1766 01:30:48,000 --> 01:30:51,380 rufen Sie diese Funktion foo, die gehen zu sich selbst rekursiv auf und rufen 1767 01:30:51,380 --> 01:30:52,320 immer wieder. 1768 01:30:52,320 --> 01:30:55,370 >> So Stack-Frames zu gehen genau die gleiche Arbeit. 1769 01:30:55,370 --> 01:30:58,130 So werden wir mit dem Haupt starten wie der Boden Stapelrahmen. 1770 01:30:58,130 --> 01:31:02,000 Dann wird sich Haupt foo nennen, die wird einen Stack-Frame zu bekommen. 1771 01:31:02,000 --> 01:31:04,260 >> Dann wird sich foo foo nennen wieder, die gehen, um zu bekommen 1772 01:31:04,260 --> 01:31:05,500 ein weiterer Stapelrahmen. 1773 01:31:05,500 --> 01:31:08,270 Und dann wieder und wieder, und wieder, und immer wieder, bis schließlich laufen wir 1774 01:31:08,270 --> 01:31:09,190 in dem Haufen. 1775 01:31:09,190 --> 01:31:11,990 Also das ist, wie wir ein Stapelüberlauf. 1776 01:31:11,990 --> 01:31:14,910 Und an diesem Punkt, seg Sie Schuld. 1777 01:31:14,910 --> 01:31:17,335 Oder Sie würde wirklich seg vor Fehler dieser Punkt aber ja. 1778 01:31:17,335 --> 01:31:19,660 >> ZIELGRUPPE: Ist die Kern Dump gleiche wie seg Schuld? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: So werden Sie sehen, Segmentierung Fehler Kern geworfen. 1780 01:31:26,140 --> 01:31:28,760 Sie erhalten einen Core-Dump, wenn Sie seg Schuld. 1781 01:31:28,760 --> 01:31:32,580 Und es ist wie ein Dump aller Inhalt der aktuellen Speicher so 1782 01:31:32,580 --> 01:31:36,670 dass Sie versuchen, identifizieren kann warum Sie SEG gestört. 1783 01:31:36,670 --> 01:31:37,135 Ja? 1784 01:31:37,135 --> 01:31:38,385 >> ZIELGRUPPE: [unverständlich]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Also einen Segmentation Fault Mittel es gibt einen Stack-Überlauf. 1787 01:31:45,460 --> 01:31:47,060 Also nicht unbedingt. 1788 01:31:47,060 --> 01:31:49,880 Eine Segmentierungsfehler bedeutet, dass Sie Berühren Speicher in einer Weise, 1789 01:31:49,880 --> 01:31:50,880 Sie sollte nicht sein. 1790 01:31:50,880 --> 01:31:54,750 Also eine Möglichkeit, dass das passiert ist, wenn Sie Stack-Überlauf, beginnen wir berühren 1791 01:31:54,750 --> 01:31:58,736 Speicher in einer Weise, die wir nicht sein sollte. 1792 01:31:58,736 --> 01:31:59,208 Ja? 1793 01:31:59,208 --> 01:32:00,458 >> ZIELGRUPPE: [unverständlich]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Also innerhalb einer Endlosschleife. 1796 01:32:05,830 --> 01:32:08,770 Wie, das ist wie eine rekursive unendlich Schleife und so haben wir ein anderes bekommen 1797 01:32:08,770 --> 01:32:09,770 Stapelrahmen jedes Mal. 1798 01:32:09,770 --> 01:32:13,540 Aber gerade innerhalb eines regulären unendlich, während one-- 1799 01:32:13,540 --> 01:32:16,390 Nun, lassen Sie uns nicht sogar drucken F-- 1800 01:32:16,390 --> 01:32:17,040 etwas zu tun. 1801 01:32:17,040 --> 01:32:18,390 Was auch immer. 1802 01:32:18,390 --> 01:32:20,610 >> Wir gehen nicht zu sein, immer ein weiterer Stapelrahmen. 1803 01:32:20,610 --> 01:32:22,530 Wir gehen nur zu halten Looping über diesen einzigen Befehl. 1804 01:32:22,530 --> 01:32:23,920 Der Stapel wird nicht wachsen. 1805 01:32:23,920 --> 01:32:27,290 Es ist die Tatsache, dass jeder rekursive Anruf wird uns einen Stack-Frame. 1806 01:32:27,290 --> 01:32:31,231 Das ist, warum wir einen Stack-Überlauf zu bekommen. 1807 01:32:31,231 --> 01:32:31,728 Ja? 1808 01:32:31,728 --> 01:32:38,189 >> ZIELGRUPPE: Also, wenn Sie gesagt, die bekommen while-Schleife und dann [unverständlich]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Also, wenn innerhalb der while-Schleife gab es eine printf, würden Sie immer noch 1810 01:32:42,000 --> 01:32:42,790 nicht seg Schuld. 1811 01:32:42,790 --> 01:32:46,090 Ich wollte einfach nicht, Dinge zu verwechseln. 1812 01:32:46,090 --> 01:32:46,610 Es wäre Schleife. 1813 01:32:46,610 --> 01:32:48,225 Sie würden einen einzelnen Stapel zu bekommen Rahmen für die printf. 1814 01:32:48,225 --> 01:32:49,580 >> Dann printf zurückkehren würde. 1815 01:32:49,580 --> 01:32:50,280 Dann können Sie wieder würden Schleife. 1816 01:32:50,280 --> 01:32:51,460 Sie würden einen einzelnen Stapel zu bekommen Rahmen für die printf. 1817 01:32:51,460 --> 01:32:52,850 Es würde zurückkehren. 1818 01:32:52,850 --> 01:32:54,060 Einzelstapelrahmen. 1819 01:32:54,060 --> 01:33:00,215 So dass Sie nicht immer diese unendliche häufen sich Stack-Frames. 1820 01:33:00,215 --> 01:33:03,185 >> ZIELGRUPPE: [unverständlich]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Ja. 1822 01:33:04,040 --> 01:33:09,360 Also das Stack-Überlauf passiert weil keine von diesen 1823 01:33:09,360 --> 01:33:11,600 Anrufe auf foo kehren zurück. 1824 01:33:11,600 --> 01:33:15,250 Also, wenn wir zurückkommen, dann würden wir beginnen zu verlieren Stack-Frames. 1825 01:33:15,250 --> 01:33:17,870 Und dann wären wir nicht in Stack-Überlauf. 1826 01:33:17,870 --> 01:33:20,070 Und das ist, warum Sie einen Basisfall müssen für Ihre persönliche Funktionen. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Ja? 1829 01:33:23,479 --> 01:33:27,375 >> ZIELGRUPPE: Ist der potenzielle Größe und die Stack für den Haufen das gleiche für 1830 01:33:27,375 --> 01:33:29,880 alle Programme? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Rund. 1832 01:33:31,910 --> 01:33:35,090 Ist die potenzielle Größe des Stapels und der Haufen das gleiche für alle Programme? 1833 01:33:35,090 --> 01:33:37,180 Rund. 1834 01:33:37,180 --> 01:33:40,080 Es gibt einige der Randomisierung bis wo beginnt der Stack und 1835 01:33:40,080 --> 01:33:42,400 wo der Haufen beginnt. 1836 01:33:42,400 --> 01:33:45,870 Wenn Sie zufällig eine ganze Menge haben globale Variablen und Dinge, könnte man 1837 01:33:45,870 --> 01:33:49,520 wegnehmen etwas Platz für Ihre Haufen. 1838 01:33:49,520 --> 01:33:54,060 >> Auf einem 64-Bit-System, können Sie praktisch haben unendlich Speicher. 1839 01:33:54,060 --> 01:33:55,820 Es gibt einfach so viel. 1840 01:33:55,820 --> 01:33:59,250 Zwischen 32 Bit und 64 Bit, dass ist ein bedeutender Unterschied. 1841 01:33:59,250 --> 01:34:02,350 >> Sie werden eine ganze Menge mehr zu bekommen Stack und Heap-Speicher auf einem 64-Bit- 1842 01:34:02,350 --> 01:34:05,810 System, weil es einfach mehr Adressen, die sie verwenden können. 1843 01:34:05,810 --> 01:34:09,360 Sondern auf einem einzelnen System, wird es ist etwa die gleiche Menge an Stapel 1844 01:34:09,360 --> 01:34:10,785 und Heap-Speicher. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 In Ordnung. 1847 01:34:15,530 --> 01:34:18,220 >> Also letzte Sache ist, Zusammenstellung. 1848 01:34:18,220 --> 01:34:19,810 So sollten Sie diesen Prozess wissen. 1849 01:34:19,810 --> 01:34:22,240 Es gibt vier große Schritte. 1850 01:34:22,240 --> 01:34:24,400 Also der erste sollte leicht zu merken. 1851 01:34:24,400 --> 01:34:25,085 Pre-Processing. 1852 01:34:25,085 --> 01:34:28,390 Es hat die Vorwahl in ihm vor. 1853 01:34:28,390 --> 01:34:32,080 So ist es vor allem anderen kommt. 1854 01:34:32,080 --> 01:34:34,000 >> Das ist daran zu erinnern, ist der Hash. 1855 01:34:34,000 --> 01:34:37,250 So Hash definiert und Hash enthält in all diesen. 1856 01:34:37,250 --> 01:34:39,560 Das sind alle Pre-Prozessor Richtlinien. 1857 01:34:39,560 --> 01:34:42,030 Dies sind die Dinge, die den Vorprozessor nimmt. 1858 01:34:42,030 --> 01:34:43,680 >> Also, was macht ein Pre-Prozessor zu tun? 1859 01:34:43,680 --> 01:34:44,850 Es ist ein wirklich dumm Sache. 1860 01:34:44,850 --> 01:34:49,380 Allen ist es in der Lage sind, alle diese Kopieren und Ausschneiden und Einfügen-Operationen. 1861 01:34:49,380 --> 01:34:51,790 >> So umfasst Standard-Hash-i0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Was ist das denn? 1863 01:34:52,990 --> 01:34:56,610 Es greifen die Standard-i0 dot h Datei und Einfügen in die Top 1864 01:34:56,610 --> 01:34:58,960 wo auch immer sie sagt, Hash enthält Standard i0 dot h. 1865 01:34:58,960 --> 01:35:02,480 >> Und jeder Hash definieren, dass wir gesehen, was ist das denn? 1866 01:35:02,480 --> 01:35:06,730 Seine Kopieren der Wert, den der Hash definiert ist als und Einfügen festgelegt, dass 1867 01:35:06,730 --> 01:35:08,500 wo immer Sie verwenden den Wert. 1868 01:35:08,500 --> 01:35:13,400 So der Präprozessor nur tut wirklich einfache textbasierte Operationen. 1869 01:35:13,400 --> 01:35:15,870 Es tut nichts, smart. 1870 01:35:15,870 --> 01:35:18,920 Also alles andere ist komplizierter. 1871 01:35:18,920 --> 01:35:22,970 >> Also jetzt, dass Präprozessor ist getan, wir eigentlich kompilieren. 1872 01:35:22,970 --> 01:35:24,320 Also, was hat der Zusammenstellung das? 1873 01:35:24,320 --> 01:35:27,310 Wir gehen jetzt von C-Code zu Assembler-Code. 1874 01:35:27,310 --> 01:35:27,570 Ja? 1875 01:35:27,570 --> 01:35:28,820 >> ZIELGRUPPE: [unverständlich]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Ja, fingen wir, dass. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 So kompilieren. 1880 01:35:38,660 --> 01:35:40,310 Wir von C auf Montage gehen. 1881 01:35:40,310 --> 01:35:42,470 Das ist also eine eigentliche Sprache zu ändern. 1882 01:35:42,470 --> 01:35:45,240 Kompilieren selbst bedeutet, sich von einer Hochsprache zu 1883 01:35:45,240 --> 01:35:47,340 eine geringere Sprache. 1884 01:35:47,340 --> 01:35:50,720 >> Und c ist eine Hochsprache im Vergleich zur Montage. 1885 01:35:50,720 --> 01:35:52,320 Was ist die Montage? 1886 01:35:52,320 --> 01:35:56,440 Seine Anweisungen, die sind ziemlich viel, für Ihre CPU gemacht. 1887 01:35:56,440 --> 01:35:59,130 Aber der Computer immer noch nicht verstehen Montage. 1888 01:35:59,130 --> 01:36:01,570 Es versteht nur Einsen und Nullen. 1889 01:36:01,570 --> 01:36:06,160 Der nächste Schritt ist die Montage, die bringt uns von diesen Anweisungen, 1890 01:36:06,160 --> 01:36:08,760 Ihre CPU versteht und tatsächlich übersetzt sie, um 1891 01:36:08,760 --> 01:36:10,820 Die Einsen und Nullen. 1892 01:36:10,820 --> 01:36:13,570 >> Also C über die Montage bis binär. 1893 01:36:13,570 --> 01:36:15,870 Aber ich glaube nicht eine ausführbare Datei vorhanden. 1894 01:36:15,870 --> 01:36:19,550 Also denken Sie an den CS50-Bibliothek. 1895 01:36:19,550 --> 01:36:23,070 Wir haben euch mit einem binären vorgesehen diese CS50-Bibliothek, die GetString hat 1896 01:36:23,070 --> 01:36:24,400 und getint und das alles. 1897 01:36:24,400 --> 01:36:25,700 >> Aber der CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 an und für itself-- ist nicht ausführbar. 1899 01:36:27,650 --> 01:36:29,570 Es muss nicht eine Hauptfunktion. 1900 01:36:29,570 --> 01:36:32,230 Es ist nur ein Haufen von binären die Sie verwenden können. 1901 01:36:32,230 --> 01:36:41,730 So Verknüpfung ist, wie wir zusammen alle bringen dieser verschiedenen Binärdateien 1902 01:36:41,730 --> 01:36:43,110 in eine tatsächliche ausführbare. 1903 01:36:43,110 --> 01:36:45,900 Eine, die Sie geben können Punkt Schrägstrich einen Punkt aus. 1904 01:36:45,900 --> 01:36:51,660 >> Also das ist, wie die Datei, die Sie schrieb, - was auch immer Ihr Programm ist-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser Punkt c. 1906 01:36:53,620 --> 01:36:55,100 Aber jetzt ist es kompiliert auf binär. 1907 01:36:55,100 --> 01:36:56,480 So Caesar dot o. 1908 01:36:56,480 --> 01:36:59,620 Und das ist unser CS50 Bibliotheken binär. 1909 01:36:59,620 --> 01:37:02,284 Und sie kombiniert in einer einzigen ausführbaren Datei. 1910 01:37:02,284 --> 01:37:02,758 Ja? 1911 01:37:02,758 --> 01:37:04,008 >> ZIELGRUPPE: [unverständlich]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Also zuerst, denken Sie daran, der Hash enthalten ist eigentlich ein 1914 01:37:12,710 --> 01:37:13,810 Vorprozessor Schritt. 1915 01:37:13,810 --> 01:37:14,750 Aber das ist getrennt. 1916 01:37:14,750 --> 01:37:20,730 Wenn Sie nicht mit Funktionen, die keine sind außerhalb des einzigen Datei dann, 1917 01:37:20,730 --> 01:37:26,100 Nein, Sie müssen nichts verlinken da haben Sie alles. 1918 01:37:26,100 --> 01:37:30,310 >> Das heißt, wird in printf verknüpft. 1919 01:37:30,310 --> 01:37:32,820 Wenn Sie jemals printf verwenden, das ist etwas das muss in verknüpft werden 1920 01:37:32,820 --> 01:37:35,740 weil du nicht schreiben das nicht. 1921 01:37:35,740 --> 01:37:39,530 Und in der Tat automatisch printf in verknüpft. 1922 01:37:39,530 --> 01:37:42,760 Sie wissen, wie in der Befehlszeile oder wenn Sie Typ führen, Sie sehen, es haben 1923 01:37:42,760 --> 01:37:46,690 Strich l CS50, der Link hat in der CS50-Bibliothek? 1924 01:37:46,690 --> 01:37:49,070 Printf, und so was, wird in automatisch verknüpft werden. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Alle anderen Fragen auf irgendetwas? 1927 01:37:53,930 --> 01:37:56,280 >> ZIELGRUPPE: [unverständlich]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Verknüpfung? 1929 01:37:58,300 --> 01:38:03,450 Wir haben eine ganze Reihe von verschiedene binäre Dateien. 1930 01:38:03,450 --> 01:38:06,410 Dies ist das bekannteste Beispiel dass wir verwenden, ist CS50-Bibliothek. 1931 01:38:06,410 --> 01:38:09,960 Wir haben für Sie und die gegebene Binary für dieses CS50-Bibliothek. 1932 01:38:09,960 --> 01:38:12,410 >> Sie wollen GetString verwenden in Ihrem Programm. 1933 01:38:12,410 --> 01:38:14,750 So können Sie gehen und GetString. 1934 01:38:14,750 --> 01:38:19,700 Aber ohne meine Binärcode für GetString, wenn Sie Ihren Code kompilieren 1935 01:38:19,700 --> 01:38:23,140 nach unten, kann man nicht wirklich laufen können Ihre Programm, weil GetString String ist 1936 01:38:23,140 --> 01:38:25,080 noch nicht vollständig definiert. 1937 01:38:25,080 --> 01:38:29,220 >> Es ist nur, wenn Sie in meinem binären verlinken dass GetString enthält, die jetzt alle 1938 01:38:29,220 --> 01:38:31,130 Recht, kann ich eigentlich GetString ausführen. 1939 01:38:31,130 --> 01:38:32,330 Meine Datei ist abgeschlossen. 1940 01:38:32,330 --> 01:38:34,208 Und ich kann diese ausführen. 1941 01:38:34,208 --> 01:38:34,697 Ja? 1942 01:38:34,697 --> 01:38:37,631 >> ZIELGRUPPE: Hat Verlinkung konvertieren die binäre auf executable? 1943 01:38:37,631 --> 01:38:42,032 Also selbst wenn Sie nicht über andere Bibliotheken, wäre es nicht noch sein 1944 01:38:42,032 --> 01:38:44,477 notwendig, um zu übersetzen die [unverständlich]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Also eine ausführbare ist immer noch in binär. 1946 01:38:48,640 --> 01:38:51,750 Es ist nur die Kombination einer ganzen Haufen von Binärdateien. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> ZIELGRUPPE: Vielen, vielen Dank. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Kein Problem. 1950 01:38:58,560 --> 01:38:59,540 Noch Fragen? 1951 01:38:59,540 --> 01:39:02,001 Ansonsten sind wir alle gesetzt. 1952 01:39:02,001 --> 01:39:02,690 In Ordnung. 1953 01:39:02,690 --> 01:39:02,990 Danke. 1954 01:39:02,990 --> 01:39:03,590 >> [Applaus] 1955 01:39:03,590 --> 01:39:04,490 >> ZIELGRUPPE: Danke. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Ja. 1957 01:39:05,740 --> 01:39:06,582