1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON HIRSCHHORN: Willkommen bis A5, jeder. 3 00:00:07,820 --> 00:00:11,270 Wir haben eine aufregende Woche vor uns, vor allem, weil es so viele neue 4 00:00:11,270 --> 00:00:12,350 steht in diesem Raum. 5 00:00:12,350 --> 00:00:12,920 Es ist wunderbar. 6 00:00:12,920 --> 00:00:15,740 Viele von euch sind hier durch einen Unfall, Das ist sogar noch besser. 7 00:00:15,740 --> 00:00:18,220 So werden Sie hoffentlich halten zu uns. 8 00:00:18,220 --> 00:00:20,220 >> Diese Woche werden wir verbringen der Großteil der Abschnitt 9 00:00:20,220 --> 00:00:21,870 Vorbereitung für das Quiz. 10 00:00:21,870 --> 00:00:26,580 Also nach unserer Tagesordnung, werden wir zu sprechen ein bisschen über Ressourcen für die Klasse, 11 00:00:26,580 --> 00:00:30,350 sondern auch für das Quiz, und dann wieder, verbringen den Großteil der Klasse sprechen 12 00:00:30,350 --> 00:00:31,390 über Fragen. 13 00:00:31,390 --> 00:00:33,900 Sobald wir fertig sind Beantwortung Ihrer Fragen, oder wenn Sie Ihre Fragen 14 00:00:33,900 --> 00:00:39,010 natürlich führen uns zu einigen Codierung, ich Probe haben Probleme, die aus Halbzeiten 15 00:00:39,010 --> 00:00:43,180 Vergangenheit, die wir in Abschnitt Live-Code zusammen, die auch bringen eine andere 16 00:00:43,180 --> 00:00:45,420 gute Themen zu decken. 17 00:00:45,420 --> 00:00:48,280 >> Also erstens, wie wir durch die für gegangen letzten paar Wochen, um Sie daran zu erinnern, 18 00:00:48,280 --> 00:00:51,700 Jungs, es gibt eine Tonne von Ressourcen für diesen Kurs zur Verfügung. 19 00:00:51,700 --> 00:00:55,020 Viele von ihnen werden unglaublich hilfreich , Sie, wie Sie weiter 20 00:00:55,020 --> 00:00:57,280 Studie für Quiz-0, da es ist Dienstag Nachmittag. 21 00:00:57,280 --> 00:00:59,630 Also alle von Ihnen haben Studium für ein bisschen. 22 00:00:59,630 --> 00:01:02,640 >> Es gibt Skripten und Quelle Code, die Sie 23 00:01:02,640 --> 00:01:04,050 definitiv auschecken. 24 00:01:04,050 --> 00:01:05,019 Sehen Sie sich die Shorts. 25 00:01:05,019 --> 00:01:07,470 Schauen Sie sich study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Und dann, die unten aufgeführt, eine Zahl von anderen Ressourcen. 27 00:01:11,770 --> 00:01:14,020 >> Auch hier ist morgen Quiz 0 um 1 Uhr. 28 00:01:14,020 --> 00:01:18,230 Wenn Sie dies nicht bereits getan haben, überprüfen aus der Über-Quiz 0 Dokument auf die 29 00:01:18,230 --> 00:01:21,370 Homepage der Kurs, um herauszufinden, wo sie das Quiz sind. 30 00:01:21,370 --> 00:01:25,770 Das Quiz beginnt um 01.10 Uhr und Enden 70 Minuten später. 31 00:01:25,770 --> 00:01:29,610 Also, wenn Sie sich zeigen, nach 01.10 Uhr, sind Sie werde, dass viele weniger Minuten erhalten 32 00:01:29,610 --> 00:01:30,940 als 70 um das Quiz zu nehmen. 33 00:01:30,940 --> 00:01:33,570 So stellen Sie sicher, dass Sie rechtzeitig da sind. 34 00:01:33,570 --> 00:01:38,690 Wenn Sie Student sind eine Erweiterung oder einige andere Tests Erwägungen ist 35 00:01:38,690 --> 00:01:40,400 vielleicht nicht um 1 Uhr morgen. 36 00:01:40,400 --> 00:01:43,540 Aber wieder, überprüfen Sie die Über-Quiz 0 dokumentieren, um sicherzustellen, dass Sie wissen, wann 37 00:01:43,540 --> 00:01:44,760 Sie nehmen das Quiz sind. 38 00:01:44,760 --> 00:01:46,440 Ich schrieb 75 Minuten hier oben. 39 00:01:46,440 --> 00:01:48,580 Ich denke, das ist richtig, nicht 70. 40 00:01:48,580 --> 00:01:53,420 >> Es deckt das gesamte Material von einer Woche 0 bis letzte Woche Vortrag am Mittwoch. 41 00:01:53,420 --> 00:01:59,350 Und wieder, für dieses Quiz, dass pro Dokument, erhalten Sie eine zweiseitige und 8 42 00:01:59,350 --> 00:02:03,770 1/2 von 11 Blatt Papier, die Sie erhalten als Notizen während des Quiz zu verwenden. 43 00:02:03,770 --> 00:02:08,570 Viele Menschen, wenn nicht die meisten Menschen, haben festgestellt, dass das einzige und hilfreiche Art und Weise 44 00:02:08,570 --> 00:02:11,970 zu studieren, für das Quiz ist es, machen eine Studie, Folie, eine 45 00:02:11,970 --> 00:02:13,730 ein Insider, der ihren. 46 00:02:13,730 --> 00:02:17,710 Also schauen vorbei, wenn diejenigen, Sie vorbei an diejenigen gesehen habe. 47 00:02:17,710 --> 00:02:19,960 Erreichen Sie Freunde zu sehen, was sie auf ihre Umsetzung. 48 00:02:19,960 --> 00:02:23,610 >> Aber die Hände nach unten, der beste Weg, können Sie Studie ist es, durch alles gehen und 49 00:02:23,610 --> 00:02:26,530 schnitzen es darauf an, was sollte oder nicht auf diesem Blatt gehören 50 00:02:26,530 --> 00:02:30,570 Papier, denn das ist nur ein wirklich hilfreich Möglichkeit für Sie, stellen Sie sicher, 51 00:02:30,570 --> 00:02:33,620 Sie durch alles gehst und haben eine gewisse Vertrautheit mit ihm. 52 00:02:33,620 --> 00:02:36,690 Die meisten Menschen, so finden wir, auch wenn sie haben das Blatt Papier sitzt direkt 53 00:02:36,690 --> 00:02:39,840 neben ihnen auf dem Quiz, nicht drehen darauf, weil wiederum die sehr 54 00:02:39,840 --> 00:02:43,290 Prozess zu gehen durch die Informationen hat ihnen geholfen, es zu lernen. 55 00:02:43,290 --> 00:02:45,370 >> Hat jemand irgendwelche Fragen haben, Quiz über 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Hat alle - 58 00:02:51,450 --> 00:02:53,230 Ich werde nicht um eine Show der Hände zu tun. 59 00:02:53,230 --> 00:02:53,550 Das macht nichts. 60 00:02:53,550 --> 00:02:54,790 Ich wollte die fragen Studium begonnen. 61 00:02:54,790 --> 00:02:58,360 Aber ich weiß nicht, Sie zu machen alle nicht die Hand heben. 62 00:02:58,360 --> 00:03:01,290 Also wie ich schon sagte - ja, Avi, nur zu. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Was wäre eine sinnvolle Sache sein auf der einen Pager setzen? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: Das ist bis zu Ihnen. 65 00:03:05,875 --> 00:03:08,210 >> JASON HIRSCHHORN: Sie erhalten Ihrem Urteil zu verwenden. 66 00:03:08,210 --> 00:03:13,220 Nützliche Dinge, die auf der einen Pager-setzen, wenn Sie über das große O verwechselt werden 67 00:03:13,220 --> 00:03:17,510 Laufzeit von verschiedenen Arten von Such und Sorten, setzte sich dort in ein 68 00:03:17,510 --> 00:03:18,760 Handy Dandy Diagramm. 69 00:03:18,760 --> 00:03:22,250 So, wenn Sie gebeten, dass auf der Quiz, brauchen Sie nicht zu versuchen und Figur 70 00:03:22,250 --> 00:03:23,560 Grund ihn aus oder durch die Laufzeit. 71 00:03:23,560 --> 00:03:24,730 Sie können einfach kopieren Sie es auf. 72 00:03:24,730 --> 00:03:28,320 Wenn Sie bei Quiz Vergangenheit viel sehen mal, da ist Laufzeit Fragen. 73 00:03:28,320 --> 00:03:34,150 Also das wäre ein Beispiel für eine gut Sache, auf Ihr One-Pager setzen. 74 00:03:34,150 --> 00:03:37,450 >> Andere gute Sachen anzuziehen, wenn Sie verwirrt darüber, wie zu erklären, ein 75 00:03:37,450 --> 00:03:40,570 Funktion oder, was die verschiedenen Teile die Funktionsdeklaration sind, schreiben 76 00:03:40,570 --> 00:03:43,400 dass dort, eine generische Version und dann vielleicht ein Beispiel. 77 00:03:43,400 --> 00:03:47,290 Wenn Sie verwirrt über Zeiger sind, ein Diagramm, wie Zeiger Arbeit ist 78 00:03:47,290 --> 00:03:48,660 wahrscheinlich wirklich hilfreich. 79 00:03:48,660 --> 00:03:52,440 Wenn Sie verwirrt über Rekursion, sind ein probieren rekursive Funktion dort 80 00:03:52,440 --> 00:03:54,980 könnte sich auch als sehr hilfreich. 81 00:03:54,980 --> 00:03:57,290 Heißt das, dass Ihnen ein paar Ideen? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Sie müssen verstehen, die gesamten Übersetzungsprozess, wie 83 00:04:01,820 --> 00:04:03,220 wie das alles funktioniert? 84 00:04:03,220 --> 00:04:06,620 >> JASON HIRSCHHORN: Alles abgedeckt wurde, dass könnte 85 00:04:06,620 --> 00:04:08,060 zeigen sich auf der Quiz. 86 00:04:08,060 --> 00:04:08,930 Fragen - 87 00:04:08,930 --> 00:04:11,300 aber wieder, werden einige Dinge stärker gewichtet werden als andere. 88 00:04:11,300 --> 00:04:14,330 Einige Dinge haben sich wieder kommen und wieder in der Klasse, in 89 00:04:14,330 --> 00:04:15,590 Vortrag und Abschnitt. 90 00:04:15,590 --> 00:04:17,220 Andere Dinge haben nicht kommen so oft. 91 00:04:17,220 --> 00:04:22,900 >> Wir haben viel über # include und redeten -L etwas und was bedeuten die in 92 00:04:22,900 --> 00:04:24,390 der Prozess Zusammenstellung. 93 00:04:24,390 --> 00:04:29,120 Wir haben viel über GDB gesprochen, festhalten, diese verschiedenen Flaggen, die wir verwenden, wenn 94 00:04:29,120 --> 00:04:33,100 wir etwas zu kompilieren, und was make15 zum Beispiel wirklich 95 00:04:33,100 --> 00:04:34,510 bedeutet, und wirklich. 96 00:04:34,510 --> 00:04:38,110 Wir haben nicht so viel reden jeder einzelne Schritt in 97 00:04:38,110 --> 00:04:39,240 der Prozess Zusammenstellung. 98 00:04:39,240 --> 00:04:40,410 Wir haben immer darüber gesprochen. 99 00:04:40,410 --> 00:04:42,550 Also es ist immer noch etwas, dass Sie vertraut sein sollten. 100 00:04:42,550 --> 00:04:44,610 Aber noch einmal, wir werden nicht zu sein - 101 00:04:44,610 --> 00:04:49,140 Dinge, die kommen immer häufiger in der Klasse sind eher mehr kommen 102 00:04:49,140 --> 00:04:52,495 oft und stark sein auf der Quiz gewichtet. 103 00:04:52,495 --> 00:04:53,280 >> Kühl. 104 00:04:53,280 --> 00:04:54,580 Alle anderen Fragen zu Quiz: 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, also habe ich eine Liste der Themen auf dem Brett. 107 00:05:00,050 --> 00:05:01,550 Ich ging durch den Lehrplan. 108 00:05:01,550 --> 00:05:07,340 Ich ging durch die Überprüfung von Abschnitt letzte Nacht, und diese Dias zu kommen 109 00:05:07,340 --> 00:05:13,710 mit einer nicht erschöpfenden Liste von Themen dass wir bisher in CS50 bedeckt 110 00:05:13,710 --> 00:05:16,800 und Dinge, die vielleicht erscheinen auf dem Quiz. 111 00:05:16,800 --> 00:05:19,900 Also ich werde nicht gehen durch jeder einzelne von ihnen. 112 00:05:19,900 --> 00:05:22,370 Das wäre viel mehr zu nehmen Zeit, als wir jetzt haben. 113 00:05:22,370 --> 00:05:26,880 Aber Ich habe dies hier hoffentlich Jog Ihr Gedächtnis, wie die Dinge, die kann 114 00:05:26,880 --> 00:05:28,420 oder auch nicht so vertraut mit dir sein. 115 00:05:28,420 --> 00:05:32,850 >> Und ich würde gerne den Großteil verbringen Abschnitt der Beantwortung Ihrer Fragen zu 116 00:05:32,850 --> 00:05:35,130 diese Themen, Themen, die werden hier nicht behandelt. 117 00:05:35,130 --> 00:05:36,130 Wir können Pseudo-Code zu schreiben. 118 00:05:36,130 --> 00:05:40,010 Wir können echten Code schreiben um sicherzustellen, dass Sie - 119 00:05:40,010 --> 00:05:44,280 Kann ich Ihre Frage beantworten und Ihnen helfen alle grundlegend zu verstehen, ein 120 00:05:44,280 --> 00:05:48,330 Viele dieser Themen, so dass Sie sich fühlen, vorbereitet und komfortabel in gehen 121 00:05:48,330 --> 00:05:50,150 das Quiz morgen. 122 00:05:50,150 --> 00:05:52,300 So lesen Sie über die Liste. 123 00:05:52,300 --> 00:05:54,780 Sie haben hoffentlich Abschnitt kommen mit einigen Fragen. 124 00:05:54,780 --> 00:05:58,480 Wenn Sie bereit sind, heben Sie Ihre Hand und wir werden beginnen. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Denken Sie daran, die Fragen, die Sie haben, Es gibt keine dummen Fragen. 127 00:06:05,200 --> 00:06:06,250 Wir haben das eine Menge gehört. 128 00:06:06,250 --> 00:06:09,490 Und die Fragen, die Sie haben, bin ich bereit auf, viele andere Menschen setzen beide 129 00:06:09,490 --> 00:06:11,740 hier sitzen und beobachten Online-als auch. 130 00:06:11,740 --> 00:06:13,770 So können nur Menschen helfen durch Fragen. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> Marcus zwischen dem Stapel und der Haufen, gibt es eine vorab zugewiesene 133 00:06:18,040 --> 00:06:22,880 Prozentsatz der Erinnerung, die wie folgt definiert ist dies ist für den Stapel oder die Haufen? 134 00:06:22,880 --> 00:06:25,010 Oder wie funktioniert das genau? 135 00:06:25,010 --> 00:06:26,230 >> JASON HIRSCHHORN: Gute Frage. 136 00:06:26,230 --> 00:06:28,640 Ich werde zurückverfolgen ein wenig. 137 00:06:28,640 --> 00:06:30,910 Hat jeder - 138 00:06:30,910 --> 00:06:31,660 bitte hier ehrlich. 139 00:06:31,660 --> 00:06:34,130 Ich weiß, ich frage Sie erhöhen Ihre Hand vor Ihren Kollegen. 140 00:06:34,130 --> 00:06:38,510 Aber gibt es Leute, die glauben, unwohl mit dem Stapel und Haufen 141 00:06:38,510 --> 00:06:42,980 und möchte gehen, dass über und was diese bedeuten? 142 00:06:42,980 --> 00:06:43,880 Heben Sie Ihre Hand, wenn - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Danke. 145 00:06:45,120 --> 00:06:48,420 So werden wir über den Stapel gehen und der Haufen wirklich schnell und dann 146 00:06:48,420 --> 00:06:50,370 Umzug in Beantwortung Ihrer Frage. 147 00:06:50,370 --> 00:06:58,250 >> Also, wenn wir zeichnen Sie ein Feld zu stellen Speicher auf Ihrem Computer, was sind einige 148 00:06:58,250 --> 00:07:02,160 Dinge, die in dieser Box gehen? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 Eine Hauptfunktion. 151 00:07:04,020 --> 00:07:05,890 Wo Haupt gehen? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [unverständlich]. 153 00:07:08,090 --> 00:07:09,390 >> JASON HIRSCHHORN: Also wir werden Haupt setzen hier unten. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Welche andere geht in diesem Feld? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Die Funktionen, die Sie anrufen. 158 00:07:18,140 --> 00:07:19,020 >> JASON HIRSCHHORN: Die Funktionen dass wir anrufen. 159 00:07:19,020 --> 00:07:20,440 Und wohin gehen sie? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: In dem Stapel. 161 00:07:21,300 --> 00:07:22,380 >> JASON HIRSCHHORN: Sie gehen in den Stapel. 162 00:07:22,380 --> 00:07:27,350 So werden wir auf diesen Aufruf was hier unten im Stapel. 163 00:07:27,350 --> 00:07:31,880 Und bis oben, haben wir die Haufen. 164 00:07:31,880 --> 00:07:35,450 Also Speicher ist nicht nur eine Box wie diese. 165 00:07:35,450 --> 00:07:37,330 Aber es ist eigentlich ziemlich ähnlich. 166 00:07:37,330 --> 00:07:40,840 Es wird eine Menge von Boxen über sein und mehr, je nachdem, wie groß Ihr 167 00:07:40,840 --> 00:07:43,730 Computer ist oder wie groß Ihr Gedächtnis ist. 168 00:07:43,730 --> 00:07:46,950 >> An der quote-unquote "unten" ist der Stapel. 169 00:07:46,950 --> 00:07:50,880 Und es gibt mehrere Dinge dass auf den Stapel. 170 00:07:50,880 --> 00:07:53,840 Und die auf den Funktionen hängen Sie haben in Ihrem Code. 171 00:07:53,840 --> 00:07:57,780 Sie haben immer eine Funktion in der Code aufgerufen Haupt, so gibt es immer eine 172 00:07:57,780 --> 00:08:00,480 Abschnitt hier unten in der stapeln, um Haupt gewidmet. 173 00:08:00,480 --> 00:08:03,980 >> Diese Abschnitte in dem Stapel werden Stack-Frames genannt. 174 00:08:03,980 --> 00:08:09,580 Wenn Sie eine andere Funktion aufrufen, sagen Haupt ruft eine binäre Suche, 175 00:08:09,580 --> 00:08:11,075 Wir stellen ein weiteres Bild auf dem Stapel. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Genauer gesagt, werden wir spenden einen Teil des Speichers auf unserer 178 00:08:17,320 --> 00:08:22,960 Computer zu speichern binäre Suche der lokalen Variablen und die binäre laufen 179 00:08:22,960 --> 00:08:24,150 Suche Code. 180 00:08:24,150 --> 00:08:26,810 >> So nennen wir binäre Suche. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 In diesem Teil des Speichers, wir gehen seinen lokalen Variablen. 183 00:08:33,340 --> 00:08:35,270 Wir werden seine printf Anrufe zu speichern. 184 00:08:35,270 --> 00:08:38,159 Was auch immer der Fall ist, ist die Funktion gehen, um genau dort gespeichert werden. 185 00:08:38,159 --> 00:08:40,350 Binäre Suche wird ausgeführt. 186 00:08:40,350 --> 00:08:42,210 Es wird, um die Ausführung zu vervollständigen. 187 00:08:42,210 --> 00:08:47,450 Was ist das Wort, dass in C bedeutet dass eine Funktion sollte 188 00:08:47,450 --> 00:08:49,306 vervollständigen seine Ausführung? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Return. 190 00:08:50,040 --> 00:08:50,870 >> JASON HIRSCHHORN: Zurück. 191 00:08:50,870 --> 00:08:53,230 Also, wenn Sie eine Rückrechnung sehen die Funktions Enden 192 00:08:53,230 --> 00:08:54,350 wenn er trifft, dass. 193 00:08:54,350 --> 00:08:56,740 So binäre Suche wird seine Rückkehr getroffen. 194 00:08:56,740 --> 00:09:01,360 Dieser Teil des Speichers wird im Wesentlichen up befreit werden. 195 00:09:01,360 --> 00:09:03,510 Und Haupt zurück, um die Ausführung zu gehen. 196 00:09:03,510 --> 00:09:07,240 Also überall dort, wo Haupt wird unterbrochen war, Call binäre Suche, bekommen einige Rückgabewert, 197 00:09:07,240 --> 00:09:08,700 und die Ausführung fortsetzen. 198 00:09:08,700 --> 00:09:10,840 Diese Stapelrahmen gehen weg. 199 00:09:10,840 --> 00:09:14,810 >> Wenn wir eine rekursive Funktion, rufen Sie die ist eine Funktion, die sich selbst aufruft über 200 00:09:14,810 --> 00:09:18,480 und mehr, vielleicht bekommen wir - sagen wir tat binäre Suche rekursiv. 201 00:09:18,480 --> 00:09:21,520 Wir könnten binäre Such Version eins zu bekommen, binäre Such zwei binäre Suche 202 00:09:21,520 --> 00:09:24,090 drei, vier binäre Suche, binäre Such fünf. 203 00:09:24,090 --> 00:09:27,950 Und dann diese letzten fünf binäre Suche wird den Basisfall und den Stapel schlagen 204 00:09:27,950 --> 00:09:31,010 Frames zurück und halten Schluss bis wir zurück zur Haupt. 205 00:09:31,010 --> 00:09:32,530 Wir können mehr als Rekursion in ein bisschen gehen. 206 00:09:32,530 --> 00:09:35,530 Aber all das ist zu sagen, wenn Sie Aufruf mehrere Funktionen in einer Zeit, 207 00:09:35,530 --> 00:09:39,250 es werde mehrere Stack Rahmen auf dem Stapel. 208 00:09:39,250 --> 00:09:42,900 >> Der Haufen, auf der anderen Seite, bis hier ist nicht für Funktionen, 209 00:09:42,900 --> 00:09:44,380 nicht für lokale Variablen. 210 00:09:44,380 --> 00:09:48,920 Es ist bei dynamisch zugeteilten Variablen. 211 00:09:48,920 --> 00:09:57,210 Das sind also Variablen, die sein können, im Haupt-oder ein initialisiert 212 00:09:57,210 --> 00:09:58,640 Funktion, die Hauptgespräche. 213 00:09:58,640 --> 00:10:00,790 Überall im Code, sie initialisiert werden. 214 00:10:00,790 --> 00:10:04,360 Und einen dynamisch initialisiert zugewiesene Variable. 215 00:10:04,360 --> 00:10:06,970 Welche Funktion in C verwenden wir? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON HIRSCHHORN: Malloc. 218 00:10:09,240 --> 00:10:10,800 Sie rufen malloc. 219 00:10:10,800 --> 00:10:12,260 Sie erhalten ein Erinnerungsraum. 220 00:10:12,260 --> 00:10:15,020 Und das Erinnerungsraum ist auf dem Heap. 221 00:10:15,020 --> 00:10:18,840 Und, dass der Raum der Erinnerung bleibt dort, bis Sie rufen Sie kostenlos. 222 00:10:18,840 --> 00:10:22,670 >> So dynamisch zugewiesenen Variablen in Haufen wird so lange existieren, wie Sie 223 00:10:22,670 --> 00:10:25,250 wollen, dass sie existieren, und sie wird nicht weg, bis Sie explizit 224 00:10:25,250 --> 00:10:26,760 ihnen sagen, weg. 225 00:10:26,760 --> 00:10:29,670 Sie können sie in einer Funktion erstellen. 226 00:10:29,670 --> 00:10:31,930 Stack, der Funktion Rahmen gehen weg. 227 00:10:31,930 --> 00:10:35,490 Aber diese Variable noch existieren in der Halde, bis sie befreit, 228 00:10:35,490 --> 00:10:39,650 möglicherweise durch die Funktion, die aufgerufen binäre Suche oder was auch immer. 229 00:10:39,650 --> 00:10:42,580 >> Also diese Haufen Variablen bleiben dort so lange, wie Sie wollen 230 00:10:42,580 --> 00:10:43,490 sie, dort zu bleiben. 231 00:10:43,490 --> 00:10:46,090 Und sie bekommen hier setzen. 232 00:10:46,090 --> 00:10:47,450 Und dann der nächste dort setzen wird. 233 00:10:47,450 --> 00:10:50,210 Sie halten immer gefüllt, und sie dort bleiben, bis Sie anrufen kostenlos. 234 00:10:50,210 --> 00:10:52,870 >> Und im Grunde, der Heap und der Stapel, immer auf Marcus 'Frage, 235 00:10:52,870 --> 00:10:54,500 aufeinander zuwachsen. 236 00:10:54,500 --> 00:10:57,730 Und wenn sie ineinander laufen, haben Sie Alle verwendeten Speicher in Ihren 237 00:10:57,730 --> 00:11:01,330 Computer, und Ihr Programm wird beendet weil Sie nicht mehr Speicher haben 238 00:11:01,330 --> 00:11:02,420 links zu bedienen. 239 00:11:02,420 --> 00:11:07,290 Zwischen ihnen gibt es möglicherweise andere Dinge. 240 00:11:07,290 --> 00:11:10,980 Aber für den Geltungsbereich dieses Kurses können Sie Sie brauchen sich nicht um die Sorgen machen. 241 00:11:10,980 --> 00:11:12,020 >> So dass die Antwort zu Ihrer Frage. 242 00:11:12,020 --> 00:11:13,520 Machen Sie sich deswegen keine Sorgen. 243 00:11:13,520 --> 00:11:15,550 Aber das war die lange Antwort. 244 00:11:15,550 --> 00:11:17,800 Alles, was Sie wissen müssen, ist die Heap und der Stapel wird - 245 00:11:17,800 --> 00:11:18,900 einem am unteren Ende beginnt. 246 00:11:18,900 --> 00:11:19,570 Der Stapel tut. 247 00:11:19,570 --> 00:11:20,790 Der Haufen ist da oben. 248 00:11:20,790 --> 00:11:21,990 Sie sich näher zueinander. 249 00:11:21,990 --> 00:11:23,110 >> Und wenn sie sich berühren, ist das ein Problem. 250 00:11:23,110 --> 00:11:24,500 Sie rannte aus der Erinnerung. 251 00:11:24,500 --> 00:11:28,760 Sondern auch, zusätzlich zu wissen, wo sie sind, was sowohl die gespeicherte 252 00:11:28,760 --> 00:11:30,512 Stack und Heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Wenn sie kollidieren, ist, dass ein Stack-Überlauf? 255 00:11:33,570 --> 00:11:35,670 >> JASON HIRSCHHORN: Wenn sie kollidieren, das ist nicht ein Stapelüberlauf. 256 00:11:35,670 --> 00:11:38,340 Ein Stack-Überlauf ist ein anderes Gebiet dass wir gehen vorbei, wenn Sie wollen. 257 00:11:38,340 --> 00:11:40,020 OK, wir kommen wieder auf, dass in einem Bit zu kommen. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Was ist das Wort genannt wenn sie einander treffen, die 259 00:11:42,730 --> 00:11:44,450 Stack und dem Heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON HIRSCHHORN: Denn jetzt, nicht zu befürchten. 261 00:11:46,640 --> 00:11:47,750 Genau wissen - 262 00:11:47,750 --> 00:11:50,530 Ich werde diese Frage zu beantworten nach dem Unterricht. 263 00:11:50,530 --> 00:11:52,680 Wenn sie ineinander laufen, lief aus Sie der Erinnerung, weil es keine mehr 264 00:11:52,680 --> 00:11:53,330 Raum gibt. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Sorry, was ist ein Segment Schuld? 266 00:11:55,450 --> 00:11:58,710 >> JASON HIRSCHHORN: Ein Segment Fehler können aufgerufen werden - 267 00:11:58,710 --> 00:12:02,240 es hängt davon ab, warum heißt der seg Schuld. 268 00:12:02,240 --> 00:12:06,260 Manchmal Ihren Stack-Überlauf, wird es sagen Segment als Fehler bemängeln. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Was Dereferenzierung ein Null-Variable? 270 00:12:08,180 --> 00:12:10,040 Ist das ein Segment Schuld? 271 00:12:10,040 --> 00:12:11,480 >> JASON HIRSCHHORN: Dereferenzierung ein Null-Zeiger - 272 00:12:11,480 --> 00:12:17,850 OK, also, wenn Sie einen Zeiger, die Sie haben auf gleich null, Zeiger, Rückruf, 273 00:12:17,850 --> 00:12:20,270 Speicher Speicheradressen als Werte. 274 00:12:20,270 --> 00:12:23,660 Und ein Null-Zeiger ist im Wesentlichen Speichern von 0 ist, die 0-ten 275 00:12:23,660 --> 00:12:26,670 Adresse in dieser Variable. 276 00:12:26,670 --> 00:12:30,010 So 0x, 0, 0, 0, 0, et cetera. 277 00:12:30,010 --> 00:12:35,030 Das 0-ten Adresse im Speicher, das nicht in unser Bild, das dort oben 278 00:12:35,030 --> 00:12:38,800 irgendwo, das ist reserviert für den Computer. 279 00:12:38,800 --> 00:12:40,130 Wir sind nicht erlaubt, sie zu berühren. 280 00:12:40,130 --> 00:12:44,680 >> Also, wenn Ihr Programm ist die Ausführung, wenn etwas versucht, den Speicher gehen 281 00:12:44,680 --> 00:12:48,990 Adresse 0, weiß er, dass das ist ein leerer Wert. 282 00:12:48,990 --> 00:12:50,820 Es weiß nichts da sein sollte. 283 00:12:50,820 --> 00:12:53,420 Also, wenn Sie es versuchen, und verwenden Sie etwas und zu behandeln, so etwas gibt oder 284 00:12:53,420 --> 00:12:58,355 versuchen, an diesem Ort zu gehen, sind Sie werde eine seg Fehler oder eine Fehlermeldung. 285 00:12:58,355 --> 00:13:00,520 Heißt das, Ihre Frage zu beantworten? 286 00:13:00,520 --> 00:13:03,170 >> Und jetzt werden wir wieder gehen um ein Überlaufen zu stapeln. 287 00:13:03,170 --> 00:13:09,560 Highlights im Stapel, wie Sie Jungs haben gesehen, in - zu ziehen lassen eine enge 288 00:13:09,560 --> 00:13:11,966 aus einem Stapel Rahmen. 289 00:13:11,966 --> 00:13:15,050 Kann jeder sehen, dass? 290 00:13:15,050 --> 00:13:16,650 So haben wir unsere Stapelrahmen. 291 00:13:16,650 --> 00:13:23,260 Wir sparen ein Array als lokaler Variable in dieser Funktion. 292 00:13:23,260 --> 00:13:29,510 So sagen unser Angebot hat fünf Spots. 293 00:13:29,510 --> 00:13:33,230 Alle fünf Personen gespeichert werden in diesem Stack-Frame. 294 00:13:33,230 --> 00:13:37,540 >> Wenn wir anfangen, über das Schreiben Grenzen dieses Array - 295 00:13:37,540 --> 00:13:43,990 also, wenn wir in dem Schreiben beginnen, sagen wir, das ist null. 296 00:13:43,990 --> 00:13:46,800 Das sind die fünf Indizes unserer Array. 297 00:13:46,800 --> 00:13:50,980 Wenn wir anfangen, in Index 5, schriftlich die haben wir nicht, wenn wir eine 298 00:13:50,980 --> 00:13:55,900 Array der Größe 5, starten wir in das Schreiben Index 6, 7, 8, 9, können wir einen Stapel bekommen 299 00:13:55,900 --> 00:13:57,960 Überlauffehler. 300 00:13:57,960 --> 00:14:00,510 >> Generell ist es nicht - 301 00:14:00,510 --> 00:14:04,910 Sie werden wahrscheinlich in Schwierigkeiten wenn Sie über gehen nach dem anderen. 302 00:14:04,910 --> 00:14:08,640 Aber im Allgemeinen, werden Sie in die bekommen meisten Probleme, wenn Sie über gehen durch eine Menge 303 00:14:08,640 --> 00:14:12,770 und Sie so weit über, dass Sie schreiben, gehen über die Rücksprungadresse, dass 304 00:14:12,770 --> 00:14:16,080 -Funktion, die bei der angeordnet ist Boden der Stapelrahmen. 305 00:14:16,080 --> 00:14:16,520 >> Denn, nicht wahr? 306 00:14:16,520 --> 00:14:17,670 Sie - in der - sorry. 307 00:14:17,670 --> 00:14:18,550 Nicht ", weil richtig." 308 00:14:18,550 --> 00:14:20,470 >> In der Stapelrahmen, haben Sie Ihre lokalen Variablen. 309 00:14:20,470 --> 00:14:27,090 Am unteren Rand des Stapels Rahmen ist die Absenderadresse. 310 00:14:27,090 --> 00:14:28,790 Das ist, wo die Funktion geht, wenn es vorbei ist. 311 00:14:28,790 --> 00:14:33,750 Und wenn Sie, dass die Rückkehr zu überschreiben Adresse, dann, wenn diese Stapelrahmen, 312 00:14:33,750 --> 00:14:36,680 wenn Sie durch den Stapel gehst Rahmen und Ausführung jede Zeile, du bist 313 00:14:36,680 --> 00:14:40,350 gehen, um zu Ihrem neuen Absenderadresse gehen das ist es, anstatt die schriftliche 314 00:14:40,350 --> 00:14:40,910 tatsächliche. 315 00:14:40,910 --> 00:14:45,050 Und das ist, wie wir gesehen haben, einige Sicherheitslücken 316 00:14:45,050 --> 00:14:46,780 kann mit dem Computer geschehen. 317 00:14:46,780 --> 00:14:52,760 >> So Stack-Überlauf, kurz gesagt, ist, wenn Sie das Teil in den Stack überschreiben 318 00:14:52,760 --> 00:14:55,440 Sie sollen zu verwenden, sind die lokale Variable sollen Sie zu bedienen, und 319 00:14:55,440 --> 00:14:58,070 insbesondere, wenn Sie Überschreiben beginnen wichtige Dinge wie die 320 00:14:58,070 --> 00:14:59,100 Rückkehr-Adresse. 321 00:14:59,100 --> 00:15:00,090 Und das ist, wo Sie eine Fehlermeldung. 322 00:15:00,090 --> 00:15:03,980 Oder vielleicht sogar Sie beginnen könnte auch das Schreiben in - 323 00:15:03,980 --> 00:15:05,370 sagen binäre Suche war rechts oberhalb der Haupt. 324 00:15:05,370 --> 00:15:07,790 Wenn Sie überschrieb eine Menge, die Sie konnte in den Haupt schreiben. 325 00:15:07,790 --> 00:15:10,230 Aber in der Regel, bevor eine Fehler erhalten Sie dann, weil der Computer weiß, 326 00:15:10,230 --> 00:15:12,270 Sie tun etwas Sie nicht tun sollte. 327 00:15:12,270 --> 00:15:12,560 Ja. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Was ist der Unterschied zwischen einem Stack-Überlauf 329 00:15:13,910 --> 00:15:16,940 und einen Pufferüberlauf? 330 00:15:16,940 --> 00:15:19,420 >> JASON HIRSCHHORN: Pufferüberlauf ist eine generische Art von 331 00:15:19,420 --> 00:15:20,395 was ich gerade beschrieben habe. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: So ein Stapelüberlauf ist ein Beispiel für einen Pufferüberlauf. 333 00:15:22,610 --> 00:15:23,420 >> JASON HIRSCHHORN: Genau. 334 00:15:23,420 --> 00:15:28,700 Dies ist ein Array wir als denken können Puffer, ein Platz für die Dinge zu gehen in. 335 00:15:28,700 --> 00:15:30,600 Dies ist ein Pufferüberlauf. 336 00:15:30,600 --> 00:15:33,210 Wir hätten einen Pufferüberlauf. 337 00:15:33,210 --> 00:15:36,870 Wenn es einen Puffer gibt, die oft ist ein Array der Haufen, und wir 338 00:15:36,870 --> 00:15:40,600 überschrieb diese Grenzen, dann würden wir haben einen Pufferüberlauf. 339 00:15:40,600 --> 00:15:44,870 >> Und über den Rahmen dieses Kurses sie ein bisschen anders erfasst sind. 340 00:15:44,870 --> 00:15:48,040 Der Compiler hat eine besondere Möglichkeiten zur Erkennung jeder. 341 00:15:48,040 --> 00:15:50,660 Aber ein Pufferüberlauf ist eine generische Art von, was ich beschrieben, 342 00:15:50,660 --> 00:15:54,090 das war ein Pufferüberlauf. 343 00:15:54,090 --> 00:15:56,240 Hat das deine Frage beantworten? 344 00:15:56,240 --> 00:15:57,910 Süße. 345 00:15:57,910 --> 00:16:01,850 >> Gab es noch andere ähnliche Fragen auf dem Stack oder dem Heap? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Ja. 348 00:16:05,510 --> 00:16:08,220 >> Student: Ich weiß, Sie wollen kostenlos Saiten weil sie in dem Haufen sind 349 00:16:08,220 --> 00:16:09,305 und Sie nicht möchten, dass ein Speicherleck. 350 00:16:09,305 --> 00:16:12,240 Aber wissen Sie, um globale Variablen frei zu haben und solche Sachen? 351 00:16:12,240 --> 00:16:14,335 Oder sind sie automatisch freigegeben? 352 00:16:14,335 --> 00:16:15,700 >> JASON HIRSCHHORN: Gute Frage. 353 00:16:15,700 --> 00:16:22,340 So in CS50.H, dieses Ding schaffen wir für Sie einen String aufgerufen. 354 00:16:22,340 --> 00:16:23,800 Ein String ist wirklich was? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char Stern. 356 00:16:24,810 --> 00:16:29,180 >> JASON HIRSCHHORN: Ein char Stern, ein Zeiger auf ein Zeichen, ein Zeiger auf 357 00:16:29,180 --> 00:16:30,650 ein Array von Zeichen. 358 00:16:30,650 --> 00:16:32,210 Das ist, was der String. 359 00:16:32,210 --> 00:16:36,050 Also müssen wir sie befreien, weil getstring, denen wir viel benutzt - 360 00:16:36,050 --> 00:16:38,370 Name der Zeichenfolge entspricht getstring - 361 00:16:38,370 --> 00:16:43,560 mallocs, dass für uns eine Erinnerung an die häufen und dann gibt einen Zeiger auf die 362 00:16:43,560 --> 00:16:47,230 erste Zeichen, dass Schnur, ein char-Star. 363 00:16:47,230 --> 00:16:52,760 >> So vordergründig, wenn Sie nicht in der kostenlos schriftlich auf alle Ihre Saiten 364 00:16:52,760 --> 00:16:55,600 dass Sie bisher genannt haben, haben Sie wurde undicht etwas Speicher. 365 00:16:55,600 --> 00:16:57,430 Natürlich haben wir nicht gesprochen , also niemand in bekommen 366 00:16:57,430 --> 00:16:58,520 Mühe, es zu tun. 367 00:16:58,520 --> 00:16:59,980 Aber für die Zukunft, ja. 368 00:16:59,980 --> 00:17:03,990 Wenn Sie getstring nennen, sind Sie mallocing etwas Platz auf dem Heap. 369 00:17:03,990 --> 00:17:07,640 Und wenn Sie nicht frei, dass später aufrufen String, haben Sie ein Speicherleck. 370 00:17:07,640 --> 00:17:09,440 Dass Ihre Frage beantworten? 371 00:17:09,440 --> 00:17:10,606 >> Ja 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: So zu tun, verwenden wir freie Recht vor Rückkehr? 373 00:17:15,020 --> 00:17:18,510 Wie, im Rahmen der, denke ich, wenn wir sagen, wie, int main, innerhalb der 374 00:17:18,510 --> 00:17:24,410 Umfang des Codes, die innerhalb dieser ist geschweiften Klammern, direkt vor - 375 00:17:24,410 --> 00:17:26,140 Sie wissen, wo du würdest Regel setzen Rückkehr. 376 00:17:26,140 --> 00:17:27,950 Haben Sie vor, dass setzen kostenlos? 377 00:17:27,950 --> 00:17:31,000 >> JASON HIRSCHHORN: Also können Sie kostenlos gestellt wo immer Sie wollen frei zu setzen. 378 00:17:31,000 --> 00:17:33,810 Da diese dynamisch zugewiesenen Variablen, weil sie es können 379 00:17:33,810 --> 00:17:39,170 Leben über den Rahmen einer bestimmten Funktion, wenn Sie in ein malloc aufrufen 380 00:17:39,170 --> 00:17:44,140 separate Funktion, zum Beispiel, getstring, können Sie kostenlos in den Haupt anrufen. 381 00:17:44,140 --> 00:17:46,050 Sie brauchen nicht zu nennen in der spezifischen Funktion 382 00:17:46,050 --> 00:17:47,570 wobei malloc aufgerufen. 383 00:17:47,570 --> 00:17:50,340 Aber Sie müssen es nennen vor den Haupt Renditen. 384 00:17:50,340 --> 00:17:51,120 >> Und es hängt wirklich davon. 385 00:17:51,120 --> 00:17:54,960 Es hängt davon ab, warum Sie, dass malloced Raum, in den ersten Platz. 386 00:17:54,960 --> 00:17:57,320 Einige Leute nennen befreien ziemlich schnell. 387 00:17:57,320 --> 00:17:59,220 Einige Leute werden nicht frei nennen, bis das Ende des Programms. 388 00:17:59,220 --> 00:18:00,660 Und sie werden durch zu gehen und frei alles. 389 00:18:00,660 --> 00:18:03,597 Es hängt davon ab, warum Sie malloc aufgerufen. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: Und was würden Sie sagen, wenn Sie den Einsatz getstring genannt? 391 00:18:11,270 --> 00:18:13,320 Sie würde sagen, was frei? 392 00:18:13,320 --> 00:18:20,040 >> JASON HIRSCHHORN: Also die Syntax kostenlos ist einfach frei, offen paren, in der Nähe 393 00:18:20,040 --> 00:18:22,130 paren, und der Name des Zeigers. 394 00:18:22,130 --> 00:18:26,410 Also, wenn Sie String-Namen Gleichen schreiben getstring, setzen Sie den Namen hier. 395 00:18:26,410 --> 00:18:27,760 Das ist der Name des Zeigers. 396 00:18:27,760 --> 00:18:30,570 Und sie weiß, dass die Speicher frei. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Also, wenn es befreit, dass der Speicher, der Zeiger immer noch auf der Stelle 398 00:18:33,920 --> 00:18:34,970 in der Erinnerung? 399 00:18:34,970 --> 00:18:39,020 Oder ist der Zeiger auch geleert die Adresse, die er auf. 400 00:18:39,020 --> 00:18:40,290 >> JASON HIRSCHHORN: Wir sollten versuchen, die. 401 00:18:40,290 --> 00:18:41,430 Wir sollten zu codieren, dass. 402 00:18:41,430 --> 00:18:43,880 Lassen Sie uns zurückkommen, wenn wir bekommen Codierung, und lassen Sie uns zu codieren, dass. 403 00:18:43,880 --> 00:18:46,000 Und wenn Sie, um herauszufinden, die Antwort wollen auf, dass Sie auch Code kann, dass 404 00:18:46,000 --> 00:18:46,690 in der Zwischenzeit. 405 00:18:46,690 --> 00:18:49,100 Aber das ist eine große Frage. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Ist es möglich, frei etwas zu früh? 407 00:18:53,480 --> 00:18:58,530 So können Sie noch brauchen es für das Programm, und Sie diesen Speicherplatz frei? 408 00:18:58,530 --> 00:18:59,200 >> JASON HIRSCHHORN: Ja. 409 00:18:59,200 --> 00:19:03,020 Es ist möglich, wenn Sie freie etwas und dann kannst du es wieder verwenden, werden Sie 410 00:19:03,020 --> 00:19:06,890 laufen in einen Fehler. 411 00:19:06,890 --> 00:19:10,810 Aber das ist für dich, weil du befreit etwas, und dann heißt es später. 412 00:19:10,810 --> 00:19:13,940 Das war also Fehler eines Programmierers. 413 00:19:13,940 --> 00:19:14,780 Aber ja. 414 00:19:14,780 --> 00:19:17,760 Man könnte schreiben, dass. 415 00:19:17,760 --> 00:19:19,240 >> Noch weitere Fragen auf - 416 00:19:19,240 --> 00:19:19,760 Ja. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: Also, wenn Sie eigentlich gerade befreien sie in der Regel vor der 418 00:19:22,820 --> 00:19:25,490 Programm endet, ist, dass, wenn die mittlere Programm endet und Sie befreien es nicht, 419 00:19:25,490 --> 00:19:27,580 dass der Speicher immer noch zugewiesen? 420 00:19:27,580 --> 00:19:31,330 >> JASON HIRSCHHORN: Wenn Ihr Programm endet und Sie vergessen, etwas zu befreien, dann 421 00:19:31,330 --> 00:19:34,390 dass der Speicher wurde während zugeteilt die Lebensdauer Ihres Programms. 422 00:19:34,390 --> 00:19:37,670 Wenn Ihr Programm vollständig schließt, dass der Speicher nicht 423 00:19:37,670 --> 00:19:39,490 für immer dort zu bleiben. 424 00:19:39,490 --> 00:19:42,080 Der Computer ist klug genug zu wissen dass, wenn das Programm geschlossen wird, ist es 425 00:19:42,080 --> 00:19:46,440 sollte der gesamte Speicher loswerden, dass wurde mit dem Programm zugeordnet. 426 00:19:46,440 --> 00:19:51,240 >> Allerdings gibt es Tools, die Sie ausführen ein Programm zu erfassen, ob, wenn der 427 00:19:51,240 --> 00:19:54,720 Programm beendet, Sie vergessen , um Speicherplatz freizugeben. 428 00:19:54,720 --> 00:19:57,960 Und für Ihre nächste Problem gesetzt, wo Sie werden mit Hilfe und mit malloc 429 00:19:57,960 --> 00:20:02,610 Zeiger, werden Sie diese Lauf Programm auf dem Programm, um zu sehen, ob, 430 00:20:02,610 --> 00:20:06,530 wenn die Haupt zurück, musste man einige Dinge, die links unfreed wurden. 431 00:20:06,530 --> 00:20:09,130 >> Also sie gehen nicht malloced zu bleiben für immer in Ihrem Computer. 432 00:20:09,130 --> 00:20:11,720 Das wäre Verschwendung, denn sehr schnell, Computer 433 00:20:11,720 --> 00:20:12,960 würde der Speicher knapp. 434 00:20:12,960 --> 00:20:16,450 Aber wenn sie bis zum Ende Ihrer Lauf programmieren und sie sind nicht befreit und Ihr 435 00:20:16,450 --> 00:20:20,260 Programm beendet, das ist immer noch ein Problem dass dieses Tool wird Ihnen helfen, zu adressieren. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Ist das Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON HIRSCHHORN: Es ist Valgrind genannt. 438 00:20:22,910 --> 00:20:23,520 Und du wirst sein - 439 00:20:23,520 --> 00:20:25,780 >> Student: Aber wir haben nicht zu wissen, dass für das Quiz, wenn? 440 00:20:25,780 --> 00:20:27,600 Ich meine, es wurde darüber gesprochen ein wenig in der Vorlesung. 441 00:20:27,600 --> 00:20:33,600 >> JASON HIRSCHHORN: Also Valgrind ist der Name dieses Tool. 442 00:20:33,600 --> 00:20:37,180 Zu wissen, was sie tut, ist genug für das Quiz. 443 00:20:37,180 --> 00:20:40,200 Aber du hast es auf noch nicht genutzt haben Ihre Problem einstellen, weil wir hatten nicht ein 444 00:20:40,200 --> 00:20:43,520 Problem Satz, der ausdrücklich behandelt hat mit malloc oder Sie malloc. 445 00:20:43,520 --> 00:20:45,330 So können Sie nicht Valgrind verwendet noch. 446 00:20:45,330 --> 00:20:47,760 Aber Sie werden es früher verwenden als später. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Können Sie das wiederholen was ist Valgrind? 448 00:20:48,710 --> 00:20:49,190 >> JASON HIRSCHHORN: Es tut uns leid? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Können Sie was wiederholen der Zweck der Valgring ist? 450 00:20:51,240 --> 00:20:53,100 >> JASON HIRSCHHORN: Valgrind ist der Name - 451 00:20:53,100 --> 00:20:59,890 wie GDB hilft Ihnen, Ihr Programm zu debuggen, Valgrind hilft Ihnen herauszufinden, ob 452 00:20:59,890 --> 00:21:03,210 Dinge haben sich nicht befreit worden wenn das Programm geschlossen wird. 453 00:21:03,210 --> 00:21:05,110 So haben Sie es auf Ihrem Programm auszuführen. 454 00:21:05,110 --> 00:21:09,230 Und Ihr Programm beendet, und es wird sagen Ihr Programm namens malloc dieses viele 455 00:21:09,230 --> 00:21:13,670 mal für so viele Bytes, und Sie Free oft nur genannt. 456 00:21:13,670 --> 00:21:16,520 Und so viele Bytes Sie diese links ohne befreit. 457 00:21:16,520 --> 00:21:18,050 Oder es werde sagen Ihnen alles, was befreit haben. 458 00:21:18,050 --> 00:21:19,070 Gute Arbeit. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 Und es ist Valgring genannt? 461 00:21:21,060 --> 00:21:24,940 >> Jason Hirschhorn V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: Eine Frage, über Zeiger. 463 00:21:25,970 --> 00:21:30,080 So sagen Sie haben n Stern x gleich etwas. 464 00:21:30,080 --> 00:21:33,330 Das entspricht, was auch immer Sie setzen gibt, ist, dass, was gerade innen setzen 465 00:21:33,330 --> 00:21:36,120 welche x zeigt an, oder der Zeiger von x? 466 00:21:36,120 --> 00:21:37,690 >> JASON HIRSCHHORN: Können Sie die Frage wiederholen? 467 00:21:37,690 --> 00:21:39,340 Können wir ziehen es, während Sie es sagen? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: In dem Quiz, eigentlich die , die Sie uns geschickt, es war wie, char 469 00:21:42,710 --> 00:21:46,520 Sterne Wahrheit entspricht CS50 Felsen, oder? 470 00:21:46,520 --> 00:21:52,190 Also bedeutet das, dass dass CS50 Felsen ist das, was die Wahrheit ist auf den Hinweis? 471 00:21:52,190 --> 00:21:55,810 >> JASON HIRSCHHORN: Also Sie sprechen über eine char-Sterne in einer Reihe, wie 472 00:21:55,810 --> 00:21:56,460 das funktioniert? 473 00:21:56,460 --> 00:21:56,890 Ja. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Ziehen wir diese hier. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE GESPRÄCH] 477 00:22:07,100 --> 00:22:11,130 >> JASON HIRSCHHORN: Also diese Variable wird sich vom Typ char Stern. 478 00:22:11,130 --> 00:22:14,580 Wie groß ist eine Variable vom Typ char Stern? 479 00:22:14,580 --> 00:22:15,510 Wie viele Bytes? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTEN: Vier. 481 00:22:16,450 --> 00:22:18,210 >> JASON HIRSCHHORN: Es ist vier Bytes. 482 00:22:18,210 --> 00:22:21,420 Wie viele Rechte ist eine Variable vom Typ int Stern? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTEN: Vier. 484 00:22:22,210 --> 00:22:24,910 >> JASON HIRSCHHORN: Vier Bytes. 485 00:22:24,910 --> 00:22:28,280 Wenn es einen Zeiger, so ist es immer vier Bytes, weil Zeiger, ihre 486 00:22:28,280 --> 00:22:30,070 Wert eine Speicheradresse. 487 00:22:30,070 --> 00:22:35,160 Und Speicheradressen auf dem CS50 Gerät sind vier Byte lang. 488 00:22:35,160 --> 00:22:42,900 Also, wenn wir rufen getstring, oder wenn wir sagen wir, gleich string und dann in 489 00:22:42,900 --> 00:22:46,140 Anführungszeichen setzen einen String, wir setzen - 490 00:22:46,140 --> 00:22:46,920 gut, das ist ein wenig anders. 491 00:22:46,920 --> 00:22:48,630 Wir werden getstring Sie als Beispiel. 492 00:22:48,630 --> 00:22:52,150 Oder char Sterne etwas gleich der Zeichenfolge. 493 00:22:52,150 --> 00:22:54,360 Sorry, geben Sie mir das Beispiel dass Sie gelesen haben? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char Sterne Wahrheit entspricht "CS50 rocks" in Anführungszeichen. 495 00:22:57,590 --> 00:23:02,260 >> JASON HIRSCHHORN: Also dieser Stern, diese wir werden diese Variable x zu rufen Sie unsere 496 00:23:02,260 --> 00:23:04,060 generische Zwecke. 497 00:23:04,060 --> 00:23:05,970 Wir haben eine Variable namens x erstellt. 498 00:23:05,970 --> 00:23:07,610 Es ist vom Typ char Stern. 499 00:23:07,610 --> 00:23:10,950 Es ist ein Zeiger auf eine Serie von Zeichen. 500 00:23:10,950 --> 00:23:12,200 Also hier unten - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Das ist also, wie würde dies arbeiten im Speicher. 503 00:23:25,890 --> 00:23:27,410 Dies würde eine Speicheradresse zu speichern. 504 00:23:27,410 --> 00:23:31,770 Es würde die Speicheradresse speichern das erste Zeichen in der Anordnung. 505 00:23:31,770 --> 00:23:33,830 Und dann, wenn Sie folgen der Zeiger, würden Sie 506 00:23:33,830 --> 00:23:35,200 erhalten die ersten Zeichen. 507 00:23:35,200 --> 00:23:38,780 >> Und wenn Sie diese Sache gerade liest wie ein String ist, ist Ihr Computer intelligent 508 00:23:38,780 --> 00:23:42,930 genug, zu wissen, lesen Sie die ganze Sache bis es zu einer Gegenreaktion 0. 509 00:23:42,930 --> 00:23:45,530 Aber wenn sie es lesen ein Zeichen an eine Zeit, so dass Sie durch Iteration sind 510 00:23:45,530 --> 00:23:49,910 Diese Saite, dann werden Sie gerade lesen ein Zeichen in einer Zeit, bis Sie zu bekommen 511 00:23:49,910 --> 00:23:50,850 0 Backslash. 512 00:23:50,850 --> 00:23:52,335 Das nicht beantworten könnte Ihr Frage, wenn. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Ja, aber Sie haben malloced, dass der Raum 514 00:23:55,610 --> 00:23:58,400 noch für die Zeiger. 515 00:23:58,400 --> 00:24:02,510 >> JASON HIRSCHHORN: Also ich bin mir nicht ganz sicher, genau das, was Sie gerade sehen, 516 00:24:02,510 --> 00:24:03,640 weil ich nicht, dass die Quiz machen. 517 00:24:03,640 --> 00:24:06,370 Das sollte ein hilfreiches Ressourcen aus einem anderen TF. 518 00:24:06,370 --> 00:24:11,380 Wenn Sie erstellen einen String auf die stapeln oder als lokale Variable, wird es 519 00:24:11,380 --> 00:24:16,920 gerade Reihe von Gebühren, anstatt sein in der Regel ein Zeichen, die auf Sterne 520 00:24:16,920 --> 00:24:18,600 eine andere Zeichenfolge. 521 00:24:18,600 --> 00:24:20,550 Aber ich weiß es nicht. 522 00:24:20,550 --> 00:24:25,065 Das könnte ein Zeiger zu einem anderen String auf dem Stack als auch. 523 00:24:25,065 --> 00:24:27,240 Ja. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Ich weiß, dass es nötig ist Speicher zuweisen, wenn der Zeiger 525 00:24:31,116 --> 00:24:33,360 immer innerhalb erklärt einer anderen Funktion. 526 00:24:33,360 --> 00:24:36,740 Wissen Sie, das Gleiche zu tun, wenn es brauchen im Inneren des Haupt erklärt, 527 00:24:36,740 --> 00:24:39,570 Sie verwenden es in der Haupt? 528 00:24:39,570 --> 00:24:43,590 >> JASON HIRSCHHORN: Also ja. 529 00:24:43,590 --> 00:24:46,670 Sie können einen Zeiger zu einem erklären Speicheradresse im Speicher. 530 00:24:46,670 --> 00:24:51,440 Es kann die Speicheradresse eines lokal Variable, wenn auch oft, 531 00:24:51,440 --> 00:24:55,760 Menschen nicht erklären Speicheradressen auf lokale Variablen, weil sie gehen 532 00:24:55,760 --> 00:24:59,890 weg, sobald die Funktion gibt, die Deshalb haben wir in der Regel malloc Dinge. 533 00:24:59,890 --> 00:25:04,630 Aber ja, könnten Sie einen Zeiger deklarieren zu einem anderen lokalen Variablen. 534 00:25:04,630 --> 00:25:06,360 Es ist einfach in der Regel nicht getan. 535 00:25:06,360 --> 00:25:09,480 Aber ich kann einen Blick auf das zu nehmen bestimmte Sache nach dem Unterricht. 536 00:25:09,480 --> 00:25:10,650 Ja. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Ich denke, das ist eine Art von dem, was gefragt. 538 00:25:12,350 --> 00:25:16,930 Es scheint seltsam zu werden initialisiert ein Zeiger nicht als 539 00:25:16,930 --> 00:25:20,760 Adresse, sondern als das, was scheint wie ein Wert. 540 00:25:20,760 --> 00:25:25,970 Es scheint, wie der CS50 ist, was drin ist die Sache an und wies darauf 541 00:25:25,970 --> 00:25:28,820 nicht die tatsächliche Adresse, oder? 542 00:25:28,820 --> 00:25:30,520 >> JASON HIRSCHHORN: Also das ist nicht der Fall ist, wenn. 543 00:25:30,520 --> 00:25:32,470 Das ist nicht, was passiert. 544 00:25:32,470 --> 00:25:35,910 Wenn Sie eine char-Sterne erklären, es ist eine Speicheradresse. 545 00:25:35,910 --> 00:25:38,860 Alle Zeiger sind Speicheradressen auf etwas anderes. 546 00:25:38,860 --> 00:25:41,480 Das ist etwas anderes könnte auf die sein Stapel, aber fast immer ist auf die 547 00:25:41,480 --> 00:25:43,440 Haufen in der Art, wie wir sehen werden sie verwendet. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Aber string gleich doppelte Anführungszeichen "Getstring," können wir sehen, dass wir 550 00:25:53,500 --> 00:25:55,010 kann über das aussehen und Code,. 551 00:25:55,010 --> 00:26:01,190 getstring String wird nicht in gespeichert dass variable, oder was auch immer der String 552 00:26:01,190 --> 00:26:04,580 Name wird nicht gespeichert, dass Variable, denn das ist nicht, wie 553 00:26:04,580 --> 00:26:06,070 Hinweise zu arbeiten. 554 00:26:06,070 --> 00:26:06,770 Heißt das Sinn? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Ja. 556 00:26:07,170 --> 00:26:08,570 >> JASON HIRSCHHORN: OK. 557 00:26:08,570 --> 00:26:11,690 Hoffentlich war das nicht verwirrend für jeden. 558 00:26:11,690 --> 00:26:15,732 Aber wenn es war, können wir noch einmal anschauen ein bisschen, weil wir eigentlich los 559 00:26:15,732 --> 00:26:19,240 etwas, das hoffentlich codieren Arbeit mit Strings und Ihnen helfen, sich 560 00:26:19,240 --> 00:26:22,170 wohler mit ihnen. 561 00:26:22,170 --> 00:26:24,869 >> Alle anderen Fragen im Zusammenhang mit diesen Themen oder andere Themen, die 562 00:26:24,869 --> 00:26:26,119 Ich werde bis zurück zu setzen? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Und - 565 00:26:34,840 --> 00:26:36,310 jetzt. 566 00:26:36,310 --> 00:26:37,630 Ja, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Also das ist völlig unabhängig, aber wir können gehen Sie einfach über 568 00:26:39,860 --> 00:26:42,760 wirklich schnell, was wir wissen müssen um die Differenz zwischen einem 32 und 569 00:26:42,760 --> 00:26:46,345 64-Bit-Maschine? 570 00:26:46,345 --> 00:26:47,740 >> JASON HIRSCHHORN: Ja. 571 00:26:47,740 --> 00:26:52,111 Also 32 Bit ist, wie viele Bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Es ist vier Bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON HIRSCHHORN: Es ist vier Bytes. 574 00:26:54,360 --> 00:26:58,420 Und 64 Bit ist, wie viele Bytes? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Eight. 576 00:26:59,112 --> 00:27:00,610 >> JASON HIRSCHHORN: Acht Bytes. 577 00:27:00,610 --> 00:27:03,980 Also noch einmal, ist acht Bit ein Byte. 578 00:27:03,980 --> 00:27:08,340 Ihr Gerät ist CS50 ein 32-Bit-Rechner. 579 00:27:08,340 --> 00:27:13,650 So dass die Speicheradressen vier Bytes lang. 580 00:27:13,650 --> 00:27:17,460 Es gibt 2 bis 32 Speicheradressen. 581 00:27:17,460 --> 00:27:21,310 0 bis 2 um 32 minus 1 ist. 582 00:27:21,310 --> 00:27:27,630 Und ich bin nicht positiv, aber das ist wahrscheinlich der Umfang dessen, was Sie brauchen 583 00:27:27,630 --> 00:27:35,230 weiß, für eine 32-Bit-Computer, dass der Speicher Adressen sind wiederum vier Bytes lang, 584 00:27:35,230 --> 00:27:39,620 und das ist die maximale Menge von Speicheradressen. 585 00:27:39,620 --> 00:27:41,680 >> Auch Datentypen - 586 00:27:41,680 --> 00:27:45,020 Dies könnte etwas wie sein auch das ist bemerkenswert. 587 00:27:45,020 --> 00:27:49,610 Die Größe eines Datentyps hängt die Maschine mit dem Sie arbeiten. 588 00:27:49,610 --> 00:27:56,760 So ein Zeichen, ein einzelnes Zeichen, ist, wie viele Bytes auf unserer CS50 Gerät? 589 00:27:56,760 --> 00:27:57,980 Ein Byte. 590 00:27:57,980 --> 00:28:02,310 Und es ist tatsächlich ein Byte als auch auf einem 64-Bit-Rechner. 591 00:28:02,310 --> 00:28:05,920 >> Und die meisten Datentypen die gleiche Anzahl von Bytes auf beiden Maschinen. 592 00:28:05,920 --> 00:28:11,620 Aber einige Datentypen wird anders sein auf beiden Maschinen. 593 00:28:11,620 --> 00:28:14,590 Damit würde möglicherweise sein, die einzige, was Sie wissen müssen. 594 00:28:14,590 --> 00:28:16,710 >> Aber auch das, denke ich, jenseits der Grenzen - 595 00:28:16,710 --> 00:28:20,990 Ich bin mir fast sicher, wenn Sie zurückblicken am alten Quiz, sagt sie, übernehmen für 596 00:28:20,990 --> 00:28:24,090 Codierung Probleme, die Sie verwenden ein 32-Bit-Rechner. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Aber es gibt, zu gehen zusammen mit der in Falls Sie interessiert sind, gibt es 599 00:28:30,620 --> 00:28:35,920 Datentypen, die die gleichen sind Größe für alle Maschinen. 600 00:28:35,920 --> 00:28:42,670 >> Wenn Sie so etwas gesehen habe uint32_t, können Sie oder auch 601 00:28:42,670 --> 00:28:43,260 nicht gesehen haben, dass. 602 00:28:43,260 --> 00:28:44,290 Das ist ein Datentyp. 603 00:28:44,290 --> 00:28:47,570 Das ist zu sagen, sein 32 Bit egal was diese Maschine ist. 604 00:28:47,570 --> 00:28:50,350 Also, wenn die Leute schreiben, tragbare Code, sie wird wahrscheinlich nicht verwenden ints. 605 00:28:50,350 --> 00:28:53,260 Sie werden stattdessen diese Daten Typen, die sie wissen, werden die gleichen 606 00:28:53,260 --> 00:28:54,780 Größe auf jeder einzelnen Maschine. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Ich hatte eine Frage zu der Prozess Zusammenstellung. 610 00:29:00,150 --> 00:29:04,110 Also, wenn Sie ein Programm schreiben, nutzt du eine Bibliothek wie CS50 oder etwas 611 00:29:04,110 --> 00:29:06,840 so, ich weiß, dass diese Bibliothek zu einem bestimmten Zeitpunkt sein, 612 00:29:06,840 --> 00:29:08,590 kompiliert und gelinkt in. 613 00:29:08,590 --> 00:29:13,380 Doch wie viel passiert, dass während die Zusammenstellung des Programms? 614 00:29:13,380 --> 00:29:15,880 Welcher Teil dieser Bibliothek Prozess tritt auf, wenn Sie 615 00:29:15,880 --> 00:29:18,560 Erstellung eines eigenen Programms? 616 00:29:18,560 --> 00:29:24,020 >> JASON HIRSCHHORN: Also gehen wir über allgemein die Schritte dieses Verfahrens. 617 00:29:24,020 --> 00:29:26,280 Sie schreiben Ihre. C-Datei. 618 00:29:26,280 --> 00:29:33,530 In Ihrem. C-Datei können Sie Ihre # include Header-Bibliotheken, z. B. cs50.h. 619 00:29:33,530 --> 00:29:39,480 Was bedeutet, dass scharfe gehören Linie, um Ihr Programm zu tun? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Es fügt die Prototypen der die Funktionen aus dem Header 622 00:29:43,350 --> 00:29:45,120 Dateien, die in den Bibliotheken. 623 00:29:45,120 --> 00:29:45,600 >> JASON HIRSCHHORN: Genau. 624 00:29:45,600 --> 00:29:49,870 Sie fügt hinzu, diese Funktionsprototypen Ihren Code. 625 00:29:49,870 --> 00:29:55,230 Also, wenn Ihr Code wird in kompilierter die frühen Stadien, weiß der Compiler 626 00:29:55,230 --> 00:29:59,250 dass diese Funktionen wirklich existieren, und dass sie irgendwo definiert. 627 00:29:59,250 --> 00:30:02,460 Die. H-Dateien enthalten nicht die Definitionen für diese Funktionen, oder wie 628 00:30:02,460 --> 00:30:03,950 sie tatsächlich arbeiten. 629 00:30:03,950 --> 00:30:07,960 Cs50.h umfasst nur etwas, das sagt getstring ist eine echte Sache, dass 630 00:30:07,960 --> 00:30:09,270 kann passieren. 631 00:30:09,270 --> 00:30:14,240 Und standardio.h sagt printf ist eine echte, was passieren kann. 632 00:30:14,240 --> 00:30:23,190 >> Also Ihr C-Sprache mit diesem. Header Datei wird in einige einge 633 00:30:23,190 --> 00:30:27,750 maschinenlesbaren Code, schließlich die wird in binäre gedreht 634 00:30:27,750 --> 00:30:30,030 Code, 0 und 1 ist. 635 00:30:30,030 --> 00:30:33,590 Und das ist der Code, der letztlich wird ausgeführt. 636 00:30:33,590 --> 00:30:38,550 Das-l-CS50 Linie - zum Beispiel, wenn Sie schreiben Clang sind - 637 00:30:38,550 --> 00:30:41,830 und dann zählen CS50-l, Sie schreiben, dass in. 638 00:30:41,830 --> 00:30:42,180 Und Sie sehen, dass. 639 00:30:42,180 --> 00:30:43,890 Wenn Sie schreiben machen, werden Sie sehen, dass Line-Up hier. 640 00:30:43,890 --> 00:30:47,740 Und das werden wir in einem zweiten zu sehen, wenn wir codieren oder später, wenn wir Code. 641 00:30:47,740 --> 00:30:50,390 >> Aber das l-CS50 Linie etwas tut ein bisschen anders als 642 00:30:50,390 --> 00:30:52,440 die # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Was bedeutet, dass l-CS50 Linie tun? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Ich möchte sagen, dass es Links Die Bibliothek der Funktion 646 00:31:00,310 --> 00:31:02,710 rufen, wie die. o-Dateien. 647 00:31:02,710 --> 00:31:08,200 >> JASON HIRSCHHORN: Also sehr Nähe, wenn nicht Spot-on. 648 00:31:08,200 --> 00:31:16,220 Das-l-CS50 ist der binäre Datei und verschmilzt sie mit der Binärdatei. 649 00:31:16,220 --> 00:31:21,410 So cs50.h, es gibt keinen Punkt beim Drehen cs50.h von C-Sprache, jeden binär 650 00:31:21,410 --> 00:31:23,130 Mal es verwendet wird. 651 00:31:23,130 --> 00:31:26,650 Das wäre dumm, denn das würde eine Menge Zeit zu verschwenden. 652 00:31:26,650 --> 00:31:30,420 So wurde bereits kompiliert und in eine ausführbare gedreht. 653 00:31:30,420 --> 00:31:35,430 Und jetzt ist es werde zusammengeführt werden mit der Datei am Ende. 654 00:31:35,430 --> 00:31:38,370 Also diese 1 und 0 gehen um mit Ihren diejenigen zusammenführen 655 00:31:38,370 --> 00:31:39,150 und 0 am Ende. 656 00:31:39,150 --> 00:31:43,670 So, jetzt werden Sie tatsächlich haben die tatsächlichen 1 und 0, wie getstring zu definieren, 657 00:31:43,670 --> 00:31:47,890 arbeitet zum Beispiel, oder wie printf, beispielsweise funktioniert. 658 00:31:47,890 --> 00:31:52,750 >> Und für weitere Informationen, gibt es eine Kurz Compiler, die Nate gibt, dass 659 00:31:52,750 --> 00:31:55,410 Sie sollten überprüfen, das geht durch diese Schritte. 660 00:31:55,410 --> 00:31:56,050 Aber - 661 00:31:56,050 --> 00:31:56,560 Ja. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Sind sie immer in o-Dateien. wenn sie in der Bibliothek Form sind, 663 00:32:01,700 --> 00:32:06,764 bereit, zusammengeführt werden, verknüpft - wie sie in den binären Code sind? 664 00:32:06,764 --> 00:32:07,600 >> JASON HIRSCHHORN: OK. 665 00:32:07,600 --> 00:32:08,420 Was - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Ist das immer der Fall die Bibliotheken, wenn Sie sie verlinken? 667 00:32:11,780 --> 00:32:12,500 >> JASON HIRSCHHORN: Ja. 668 00:32:12,500 --> 00:32:17,300 Also gibt es. S-Dateien, die sein wird, Maschinencode, der auch sein wird 669 00:32:17,300 --> 00:32:17,975 kryptisch zu Ihnen. 670 00:32:17,975 --> 00:32:19,410 Sie müssen nicht über diejenigen zu kümmern. 671 00:32:19,410 --> 00:32:24,930 Aber im Allgemeinen, ja, sie werden sein. o Dateien bereit zu gehen. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Also, wenn Sie zu versenden eine Bibliothek, versenden Sie nur 673 00:32:27,170 --> 00:32:28,880 die. h und die. o? 674 00:32:28,880 --> 00:32:32,210 Sie liefern nicht die. C oder. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON HIRSCHHORN: So - 676 00:32:33,070 --> 00:32:36,260 und das ist in dieser kurzen als auch, wenn diese Information scheint zu sein, kommt eine 677 00:32:36,260 --> 00:32:36,700 wenig schnell. 678 00:32:36,700 --> 00:32:39,870 Aber die kurz auf Compiler Gespräche über dies auch. 679 00:32:39,870 --> 00:32:43,290 Wenn Sie eine Bibliothek Schiff, wenn Sie versenden die. h, die Header-Datei, die 680 00:32:43,290 --> 00:32:46,290 Funktionsprototypen und die 1 und 0 ist, das ist alles, was Sie brauchen. 681 00:32:46,290 --> 00:32:50,640 Sie brauchen nicht zu geben, wie die Funktion ist, die. c-Datei. 682 00:32:50,640 --> 00:32:56,360 Weil der Punkt der Abstraktion oder die Punkt APIs, der Punkt, an diesem SPL, 683 00:32:56,360 --> 00:32:59,650 die Stanford tragbare Bibliothek, ist es damit Sie sich keine Sorgen, wie neue 684 00:32:59,650 --> 00:33:04,220 GRect funktioniert, oder wie Arbeiten bewegen, oder wie Werke hinzufügen. 685 00:33:04,220 --> 00:33:06,520 Alles, was Sie wissen müssen, ist, dass Add ist eine Funktion, die Sie 686 00:33:06,520 --> 00:33:08,880 verwenden, und es tut dies. 687 00:33:08,880 --> 00:33:12,760 Damit Sie wirklich brauchen nicht zu wissen, wie es ist in C geschrieben, Sie brauchen nur zu 688 00:33:12,760 --> 00:33:15,460 kennen, hier sind die Funktionen, was sie zu tun, und hier sind die 1 und 0 689 00:33:15,460 --> 00:33:18,870 wenn Sie wirklich diese nutzen möchten. 690 00:33:18,870 --> 00:33:19,530 >> Kühl. 691 00:33:19,530 --> 00:33:26,980 Haben Sie weitere Fragen zu Compilern oder andere Themen auf dem Brett? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Ich habe eine Frage Umsetzung der rekursiven Funktionen. 693 00:33:30,300 --> 00:33:31,170 Eine Frage, über Rekursion. 694 00:33:31,170 --> 00:33:33,030 Ich hatte das Gefühl, die kommen würden. 695 00:33:33,030 --> 00:33:38,310 Lassen Sie uns also schnell durch gehen Rekursion mit einem bestimmten 696 00:33:38,310 --> 00:33:40,690 beispielsweise ein Fakultätsfunktion. 697 00:33:40,690 --> 00:33:44,920 Denn dies ist ein Beispiel, kommt oft nach oben oder verwendet 698 00:33:44,920 --> 00:33:46,170 Rekursion zu veranschaulichen. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> So "4!" als 4 faktorielle lesen. 701 00:33:56,410 --> 00:33:59,120 Und was bedeutet 4 faktorielle das? 702 00:33:59,120 --> 00:34:00,696 Was bedeutet das? 703 00:34:00,696 --> 00:34:02,235 Wie sehen Sie 4 Fakultät berechnen? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 mal 3 mal 2 mal 1. 706 00:34:07,960 --> 00:34:11,889 >> Also ein weiterer Weg, um 4 faktorielle schreiben ist, dies zu schreiben. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 mal 3 Fakultät. 709 00:34:19,022 --> 00:34:22,080 Da 3 Fakultät ist 3 mal 2 mal 1. 710 00:34:22,080 --> 00:34:27,580 Also 4 mal 3 Fakultät ist 4 mal 3 mal 2 mal 1. 711 00:34:27,580 --> 00:34:32,679 Deshalb Fakultät ist eine große Kandidat für Rekursion, denn es ist 712 00:34:32,679 --> 00:34:36,630 klar, dass es etwas gibt, passiert immer und immer und immer für ein 713 00:34:36,630 --> 00:34:39,820 kleineren Anzahl von Dinge, bis Sie das Ende erreichen. 714 00:34:39,820 --> 00:34:42,570 Wenn Sie 1 zu erreichen, 1 1 Fakultät ist. 715 00:34:42,570 --> 00:34:43,719 Man kann nicht viel weiter gehen. 716 00:34:43,719 --> 00:34:47,219 0 faktorielle wird auch als 1 definiert. 717 00:34:47,219 --> 00:34:50,679 Also, wenn Sie auf 1 oder 0 zu bekommen, sind Sie am Ende, und Sie können 718 00:34:50,679 --> 00:34:53,219 starten Sie gehen wieder nach oben. 719 00:34:53,219 --> 00:34:59,540 Wenn wir also eine rekursive schreiben wollte Funktion, um eine Fakultät zu berechnen, 720 00:34:59,540 --> 00:35:02,170 wir werden einige schreiben Pseudocode für diesen jetzt. 721 00:35:02,170 --> 00:35:03,300 Bevor wir schreiben, dass Pseudocode - 722 00:35:03,300 --> 00:35:05,660 Ich werde euch geben, ein paar Minuten um den Pseudo-Code zu schreiben oder einfach nur denken, 723 00:35:05,660 --> 00:35:09,600 darüber - es gibt zwei Dinge, die jeder rekursive Funktion braucht. 724 00:35:09,600 --> 00:35:12,530 Was sind diese beiden Dinge? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Es muss sich selbst aufrufen. 726 00:35:13,220 --> 00:35:13,680 >> JASON HIRSCHHORN: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Gehen Sie voran. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Es muss sich selbst aufrufen. 730 00:35:16,640 --> 00:35:19,220 >> JASON HIRSCHHORN: Also eine rekursive Funktion muss einen rekursiven Aufruf, ein 731 00:35:19,220 --> 00:35:20,220 anrufen, um sich. 732 00:35:20,220 --> 00:35:20,770 Das ist einer. 733 00:35:20,770 --> 00:35:21,510 Und was ist der andere? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Ein Basisfall. 735 00:35:22,250 --> 00:35:23,780 >> JASON HIRSCHHORN: Eine Basisfall. 736 00:35:23,780 --> 00:35:26,940 Eine Basis Fall ist, hier ist, wenn wir aufhören. 737 00:35:26,940 --> 00:35:29,510 Also Ihre Funktion aufgerufen wird. 738 00:35:29,510 --> 00:35:31,410 Der Basisfall kommt zuerst. 739 00:35:31,410 --> 00:35:33,710 Sie wollen wissen, ob Sie am Ende sind. 740 00:35:33,710 --> 00:35:37,110 Und wenn Sie nicht am Ende, Sie Ihre rekursiven Aufruf. 741 00:35:37,110 --> 00:35:39,880 Und Sie durch diese Funktion wieder zu gehen, überprüfen Sie nochmals Ihre Basisfall. 742 00:35:39,880 --> 00:35:42,575 Wenn Sie das Ende sind nicht, Sie machen ein weiterer rekursiven Aufruf, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Das ist, warum immer rekursive Funktionen brauchen diese Grundfälle und die 745 00:35:47,110 --> 00:35:48,210 rekursive Aufrufe. 746 00:35:48,210 --> 00:35:51,280 Wenn Sie nicht über einen rekursiven Aufruf haben, ist es würde eine rekursive Funktion nicht sein. 747 00:35:51,280 --> 00:35:53,210 Wenn Sie nicht über einen Basisfall, Sie für immer gehen würde und 748 00:35:53,210 --> 00:35:54,780 gäbe es kein Ende geben. 749 00:35:54,780 --> 00:35:57,870 Und die Basisfall kommt immer zuerst, weil Sie immer überprüfen wollen, 750 00:35:57,870 --> 00:36:00,420 wenn du am Ende bist zuerst. 751 00:36:00,420 --> 00:36:04,770 Also, bevor wir etwas Pseudocode, warum Sie nicht eine Minute, um zu denken 752 00:36:04,770 --> 00:36:09,360 wie eine rekursive Funktion Fakultät geschrieben würde? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Auch, wie viele, wie Sie tun, schriftlich Um sie auf einem Blatt Papier 755 00:36:26,010 --> 00:36:27,960 was du zu haben sind Aktivitäten an der Quiz morgen. 756 00:36:27,960 --> 00:36:32,160 Also wahrscheinlich gute Praxis zu machen sicher, dass der Code, den Sie gerade schreiben 757 00:36:32,160 --> 00:36:34,420 unten auf Blatt Papier - 758 00:36:34,420 --> 00:36:35,160 oder Sie können das tun. 759 00:36:35,160 --> 00:36:36,710 Sie wissen, wo die Semikolons sind. 760 00:36:36,710 --> 00:36:37,660 Sie erinnern sich an die Syntax. 761 00:36:37,660 --> 00:36:40,400 Weil du nicht in der Lage zu haben, ein Compiler sagen, einen Fehler gemacht. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Auch in diese Richtung, morgen, wenn Sie Codierung haben Probleme, wenn Sie 764 00:37:07,240 --> 00:37:11,490 für Zeit gehetzt, oder wenn Sie sehr , wie du zu verwechseln sollte 765 00:37:11,490 --> 00:37:16,030 schreiben die bestimmte Sache in C, es würden Sie gut beraten, zu pseudo-Code schreiben 766 00:37:16,030 --> 00:37:18,160 oder Kommentare zu schreiben, in als gut. 767 00:37:18,160 --> 00:37:21,940 Denn es gibt einen Teil des Kredits für ein Viele der Fragen, die auf der Quiz. 768 00:37:21,940 --> 00:37:24,840 So könnten Sie sich gehetzt werden, oder Sie könnte nur verwechselt werden. 769 00:37:24,840 --> 00:37:28,030 Schreiben in den Kommentaren oder Pseudo-Code sind oft Möglichkeiten, die Sie 770 00:37:28,030 --> 00:37:29,360 kann einen Teil des Kredits zu bekommen. 771 00:37:29,360 --> 00:37:31,440 >> So etwas nicht verlassen leer auf dem Quiz. 772 00:37:31,440 --> 00:37:33,490 Es gibt keine Strafen für die Dinge in. 773 00:37:33,490 --> 00:37:37,650 In der Tat, setzen in Pseudo-Code oder Kommentare wird den Klässler helfen 774 00:37:37,650 --> 00:37:40,410 herauszufinden, ob Sie wirklich wissen, was Sie reden, und vielleicht preis 775 00:37:40,410 --> 00:37:42,030 Sie einige teilweise Gutschrift dafür. 776 00:37:42,030 --> 00:37:44,510 >> Auch in diese Richtung, deutlich schreiben. 777 00:37:44,510 --> 00:37:47,650 Wenn wir nicht wirklich das, was du schreibst, wir werden nicht anruft 778 00:37:47,650 --> 00:37:49,900 um Mitternacht morgen Figur Sie heraus, was Sie geschrieben haben. 779 00:37:49,900 --> 00:37:51,520 Wir sind gerade dabei, off-Punkte zu nehmen. 780 00:37:51,520 --> 00:37:56,570 Schreiben Sie klar, damit wir hören, oder besser gesagt, wir können lesen, was Sie geschrieben haben. 781 00:37:56,570 --> 00:38:00,230 >> Und wenn er sagt, zwei Sätze, schreiben Sie nicht einen Absatz. 782 00:38:00,230 --> 00:38:02,280 Folgen Sie den Anweisungen. 783 00:38:02,280 --> 00:38:03,500 Schreiben Sie klar. 784 00:38:03,500 --> 00:38:07,720 Und in den Kommentaren schreiben oder Pseudocode für Fragen, die konnte 785 00:38:07,720 --> 00:38:10,270 Auszeichnung Teil Kredit. 786 00:38:10,270 --> 00:38:12,520 >> OK, lass uns gehen, um factorial. 787 00:38:12,520 --> 00:38:15,000 So haben wir eine Funktion Fakultät. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Wenn ich dies schreibe eigentlich in C, was muss ich vor den Namen setzen 790 00:38:21,550 --> 00:38:22,800 der Funktion? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Der Rückgabetyp, der in diesem Fall, werden wir es geben int. 793 00:38:30,060 --> 00:38:35,450 Und dann innerhalb der geschweiften Klammern ist was sich innerhalb der geschweiften Klammern für 794 00:38:35,450 --> 00:38:36,850 eine Funktion? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTEN: Argument-Typ. 796 00:38:37,950 --> 00:38:39,150 >> JASON HIRSCHHORN: Seine Argumente. 797 00:38:39,150 --> 00:38:42,680 So wird wohl Fakultät ein Argument. 798 00:38:42,680 --> 00:38:44,500 Es wird wahrscheinlich nur ein Argument. 799 00:38:44,500 --> 00:38:49,450 Und wir sagen, es nehme x eine ganze Zahl bezeichnet. 800 00:38:49,450 --> 00:38:52,770 Und wieder, beim Schreiben den Prototyp eine Funktion oder ein Schreiben der Funktion 801 00:38:52,770 --> 00:38:57,110 im Code, bevor es zu definieren, können Sie schreiben, den Datentyp und den Namen des 802 00:38:57,110 --> 00:39:01,370 diese Variable nur für diese Funktion. 803 00:39:01,370 --> 00:39:06,350 So können Sie eine bestimmte Anzahl in diesen Pass Funktion, wird es als x bezeichnet werden 804 00:39:06,350 --> 00:39:07,340 intern. 805 00:39:07,340 --> 00:39:08,755 >> Wir haben unsere Fakultätsfunktion. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Wir müssen zwei Dinge, einen Basisfall und einen rekursiven Aufruf. 808 00:39:15,850 --> 00:39:20,900 Was ist der Basisfall für die Fakultät? 809 00:39:20,900 --> 00:39:24,850 Jemand, der es schrieb, und wer nicht noch nicht gesprochen, was ist die Basis 810 00:39:24,850 --> 00:39:26,100 Fall für faktorielle? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Wenn n kleiner ist als 2, 1 zurückzukehren. 813 00:39:30,930 --> 00:39:33,520 >> JASON HIRSCHHORN: Wenn n weniger als 2, 1 zurückzukehren. 814 00:39:33,520 --> 00:39:37,216 Ich mag, dass, weil das nimmt 0 und 1 ist. 815 00:39:37,216 --> 00:39:45,290 Also werden wir x <2 tust, bringe ein. 816 00:39:45,290 --> 00:39:47,870 Wenn wir uns weitergegeben 0, wenn wir 1 bestanden, wird diese Funktion 817 00:39:47,870 --> 00:39:49,790 sofort wieder ein. 818 00:39:49,790 --> 00:39:54,020 Wenn wir uns etwas Zahl größer geben als oder gleich 2 ist, werden wir 819 00:39:54,020 --> 00:39:55,370 haben unsere rekursiven Aufruf. 820 00:39:55,370 --> 00:39:57,855 >> Und wie ist das so funktionieren? 821 00:39:57,855 --> 00:40:01,070 Kann jemand anderes, der daran gearbeitet , die noch nicht gesprochen mir die 822 00:40:01,070 --> 00:40:07,380 rekursiven Aufruf für diese Funktion in Pseudocode? 823 00:40:07,380 --> 00:40:10,770 Wenn wir uns in einer Zahl x geben und größer als 2 ist, was 824 00:40:10,770 --> 00:40:13,370 wollen wir tun? 825 00:40:13,370 --> 00:40:17,930 Wir haben auch ein Beispiel für die schriftliche Seite, die Ihnen einen Hinweis geben könnte. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Rufen Sie x-mal die Fakultät von x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON HIRSCHHORN: Genau richtig. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Wir werden x-mal zurück die Fakultät von x minus 1. 830 00:40:37,750 --> 00:40:41,810 Und dass, obwohl ich schrieb, im Grunde, was Sie in Englisch gesagt, 831 00:40:41,810 --> 00:40:44,580 Diese Funktion Fakultät wieder aufgerufen. 832 00:40:44,580 --> 00:40:46,320 Es wird auf minus 1 x auszuführen. 833 00:40:46,320 --> 00:40:49,320 Es wird mit einigen Ganzzahl zurück, und dann wird es diese beiden multiplizieren 834 00:40:49,320 --> 00:40:52,050 zusammen, und dieser Wert wird zurück, was auch immer diese genannt 835 00:40:52,050 --> 00:40:55,010 Fakultäts-Funktion, die Macht ist ein weiteres Beispiel für 836 00:40:55,010 --> 00:40:58,420 Diese Fakultätsfunktion. 837 00:40:58,420 --> 00:41:01,360 >> Damit ist ein Beispiel eines rekursiven Funktion, eine sehr 838 00:41:01,360 --> 00:41:02,530 einfache rekursive Funktion. 839 00:41:02,530 --> 00:41:04,530 Aber die meisten von ihnen werden so sein. 840 00:41:04,530 --> 00:41:11,170 Wenn Sie möchten, eine gute rekursive für das Quiz herausfordern, versuchen Codierung 841 00:41:11,170 --> 00:41:13,230 binäre Suche rekursiv. 842 00:41:13,230 --> 00:41:18,950 Denn wenn man binäre Suche für tat Problem drei gesetzt, werden Sie wahrscheinlich haben es 843 00:41:18,950 --> 00:41:21,730 iterativ in einer while-Schleife. 844 00:41:21,730 --> 00:41:23,700 >> Aber es kann auch geschrieben werden rekursiv. 845 00:41:23,700 --> 00:41:26,310 Sie gehen zu müssen, um ein eigenes zu schreiben separate Funktion, die einige nimmt 846 00:41:26,310 --> 00:41:29,020 verschiedenen Kommandozeilen-Argumente - oder nicht Befehlszeilenargumente, einige 847 00:41:29,020 --> 00:41:30,910 andere ganz normale Argumente. 848 00:41:30,910 --> 00:41:33,870 Aber man konnte binäre Such schreiben rekursiv auch. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: So haben Sie auch geschrieben haben könnte, anstelle von x minus 1, Sie 850 00:41:36,190 --> 00:41:39,502 könnte auch geschrieben haben x minus minus, oder Sie haben könnten 851 00:41:39,502 --> 00:41:40,830 geschrieben minus minus x. 852 00:41:40,830 --> 00:41:44,740 Können Sie sich wirklich schnell erklären, warum diese würden verschiedene Dinge sein, 853 00:41:44,740 --> 00:41:49,510 wie das, was der Unterschied ist zwischen x minus minus minus minus x und? 854 00:41:49,510 --> 00:41:51,320 >> JASON HIRSCHHORN: Nein, ich bin nicht werde darauf eingehen. 855 00:41:51,320 --> 00:41:55,500 Aber ich werde mit Ihnen darüber zu sprechen, nachdem Klasse. x minus minus minus minus x 856 00:41:55,500 --> 00:41:57,780 x um 1 verringern. 857 00:41:57,780 --> 00:41:59,090 Aber sie tun es ein bisschen anders. 858 00:41:59,090 --> 00:42:00,340 Aber ich möchte nicht darauf eingehen. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Andere Fragen zu Rekursion oder diese Funktion? 861 00:42:09,090 --> 00:42:10,140 Das ist nicht wirklich, auch Pseudocode. 862 00:42:10,140 --> 00:42:15,060 Das ist im Grunde der Code in C Sie dafür schreiben würde. 863 00:42:15,060 --> 00:42:19,393 >> OK, andere Fragen über Themen hier? 864 00:42:19,393 --> 00:42:19,864 Ja. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Ich habe einen schnellen Überblick über Floating-Point und Präzision. 866 00:42:23,130 --> 00:42:24,260 >> JASON HIRSCHHORN: Floating Punkt und Präzision. 867 00:42:24,260 --> 00:42:26,920 Kann jemand wirklich schnell geben Sie mir einen Überblick über 868 00:42:26,920 --> 00:42:28,210 Floating-Point und Präzision? 869 00:42:28,210 --> 00:42:30,420 Sie alle, dies für Ihre zu tun hatte Problem eingestellt, so dass Sie alle 870 00:42:30,420 --> 00:42:31,700 mit ihm vertraut. 871 00:42:31,700 --> 00:42:35,090 Oder vielleicht auch nicht alle. 872 00:42:35,090 --> 00:42:36,602 Anyone? 873 00:42:36,602 --> 00:42:39,530 Geben Sie mir eine Stelle begonnen. 874 00:42:39,530 --> 00:42:40,750 Floating Point und Präzision. 875 00:42:40,750 --> 00:42:42,380 Was ist das Problem? 876 00:42:42,380 --> 00:42:42,960 Ja. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON HIRSCHHORN: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Entschuldigung. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Es gibt nur eine endliche Anzahl von Zahlen, die dargestellt werden können, 882 00:42:51,550 --> 00:42:57,930 weil Sie auf einem, bist unser Fall eine 32-Bit-System. 883 00:42:57,930 --> 00:43:03,080 So können Sie Art müssen machen einige Zahlen. 884 00:43:03,080 --> 00:43:03,910 >> JASON HIRSCHHORN: Also das ist genau richtig. 885 00:43:03,910 --> 00:43:08,110 Es gibt nur eine bestimmte Menge von Zahlen, die dargestellt werden können. 886 00:43:08,110 --> 00:43:11,770 Wenn Sie vermehren sich zwei sehr große Zahlen, es könnte die Menge OVER 887 00:43:11,770 --> 00:43:13,950 der Leerzeichen zu vertreten haben eine ganze Zahl ist. 888 00:43:13,950 --> 00:43:17,930 Das ist, warum manchmal verwenden wir ein lange lange anstelle eines int. 889 00:43:17,930 --> 00:43:19,210 Das hat mehr Räume. 890 00:43:19,210 --> 00:43:21,210 Das kann eine größere Anzahl zu halten. 891 00:43:21,210 --> 00:43:24,310 >> Fließkomma Präzision hat damit zu tun, das, sondern hat auch mit der zu tun 892 00:43:24,310 --> 00:43:29,300 Tatsache, dass Dezimalzahlen sind nicht immer vertreten. 893 00:43:29,300 --> 00:43:29,540 Entschuldigung. 894 00:43:29,540 --> 00:43:31,280 Lassen Sie mich diese wieder auf. 895 00:43:31,280 --> 00:43:36,610 Die Dezimalzahl 1.0 ist nicht immer wie Sie vertreten würde erwarten, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Es wird manchmal als dargestellt 1,000000001 oder 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Es könnte sogar 89 geworfen werden dort irgendwo. 899 00:43:52,780 --> 00:43:56,560 Also diese Dezimalzahlen nicht genau wie Sie es dargestellt 900 00:43:56,560 --> 00:43:58,430 erwarten, dass sie dargestellt werden. 901 00:43:58,430 --> 00:44:00,010 >> So in Problem-Set - 902 00:44:00,010 --> 00:44:00,860 waren es zwei? - 903 00:44:00,860 --> 00:44:05,290 Problem zwei gesetzt, in dem wir zu tun Fließkommazahlen, wenn wir wollten, 904 00:44:05,290 --> 00:44:08,690 sie repräsentieren genau das, was wir wollten, sie repräsentieren die Anzahl 905 00:44:08,690 --> 00:44:12,860 Pfennige, oder die Anzahl der Cent, wir sie mit 100 multiplizieren. 906 00:44:12,860 --> 00:44:14,750 Wir rundeten sie. 907 00:44:14,750 --> 00:44:18,660 Und dann schneiden wir alles hinter dem Komma. 908 00:44:18,660 --> 00:44:22,020 Das war, um sicherzustellen, dass sie es tatsächlich gleich genau, was wir wollten 909 00:44:22,020 --> 00:44:22,410 sie entsprechen. 910 00:44:22,410 --> 00:44:26,870 >> Weil, wenn Sie etwas zu nehmen, das ist Ein Schwimmer und es in einen int, Sie 911 00:44:26,870 --> 00:44:29,860 schneiden Sie alles rechts dem Komma. 912 00:44:29,860 --> 00:44:33,900 Denn es gibt einige Gleitkomma Ungenauigkeit, 100.000 sein könnte 913 00:44:33,900 --> 00:44:37,440 als 99,999999999 vertreten. 914 00:44:37,440 --> 00:44:40,350 Und wenn Sie gerade auf alles zu schneiden das Recht sofort, du gehst zu 915 00:44:40,350 --> 00:44:41,600 die falsche Nummer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Ja. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Ich hatte eine Frage über Gießen. 919 00:44:45,290 --> 00:44:47,500 Was bedeutet es in Ordnung kommen? 920 00:44:47,500 --> 00:44:54,480 Wenn Sie möchten Schwimmer tun, Konsolen, 1 geteilt 10, ist es nicht ein, geteilt durch 10, 921 00:44:54,480 --> 00:44:58,910 erhalten dann 0,1, dann drehen es in ein Schwimmer? 922 00:44:58,910 --> 00:45:01,470 >> JASON HIRSCHHORN: Wenn Sie das tun Schwimmer 1 geteilt durch 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Ja, und dann gleich - 924 00:45:02,550 --> 00:45:04,240 Nun, normalerweise wäre es haben es in gleich - 925 00:45:04,240 --> 00:45:04,690 Ja. 926 00:45:04,690 --> 00:45:06,760 Sie wollen es ein Schwimmer zu machen, oder? 927 00:45:06,760 --> 00:45:12,790 >> JASON HIRSCHHORN: OK, so dass wir zu gehen verwenden, um herauszufinden, in segue 928 00:45:12,790 --> 00:45:15,390 die Antworten auf diese Fragen durch Codierung. 929 00:45:15,390 --> 00:45:18,180 Da Sie wahrscheinlich eine Menge von diese kleinen Fragen, und ein guter Weg, 930 00:45:18,180 --> 00:45:19,100 um sie zu lösen, ist durch Codierung. 931 00:45:19,100 --> 00:45:21,320 So werden wir dieses Recht jetzt codieren, und dann werden wir zurückgehen und 932 00:45:21,320 --> 00:45:24,020 codieren die Frage, die Sie hatten. 933 00:45:24,020 --> 00:45:24,950 >> Also die erste Zeile - 934 00:45:24,950 --> 00:45:29,390 Ich hätte es nicht geschrieben haben - was ist das erste, was wir tun wollen, wenn wir 935 00:45:29,390 --> 00:45:32,250 öffnen, eine neue Datei in gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Fügen. 937 00:45:34,190 --> 00:45:35,920 >> JASON HIRSCHHORN: Fügen Sie was? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50-Bibliothek. 939 00:45:37,952 --> 00:45:39,920 >> JASON HIRSCHHORN: OK. 940 00:45:39,920 --> 00:45:42,590 Was sollten wir sonst gehören? 941 00:45:42,590 --> 00:45:46,820 Wir sind gerade dabei, zu überprüfen, was passiert, wenn Sie etwas gegossen, um einen Schwimmer. 942 00:45:46,820 --> 00:45:48,605 Aber was müssen wir schließen, wenn wir gehen, um ein C-Programm schreiben? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standard-I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON HIRSCHHORN: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Wir haben eigentlich nicht brauchen, denn diese Programm, cs50.h, auch wenn es 946 00:45:54,880 --> 00:45:55,920 immer hilfreich, um es aufzunehmen. 947 00:45:55,920 --> 00:45:58,260 Aber wir müssen immer stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Bei der Codierung in C? 949 00:45:59,660 --> 00:46:15,770 >> JASON HIRSCHHORN: Bei der Codierung in C 950 00:46:15,770 --> 00:46:17,090 >> Also ich speichern Sie es als dieses. C-Datei. 951 00:46:17,090 --> 00:46:18,590 Ich bekomme ein paar nette Syntax-Highlighting. 952 00:46:18,590 --> 00:46:22,890 Ich schrieb Leere in main. 953 00:46:22,890 --> 00:46:24,792 Was ist nichtig das? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: nimmt keine Befehlszeilenargumente. 955 00:46:26,740 --> 00:46:28,900 >> JASON HIRSCHHORN: entfällt bedeutet in diesem Fall Hauptübernimmt keinerlei 956 00:46:28,900 --> 00:46:29,700 Befehlszeilenargumente. 957 00:46:29,700 --> 00:46:32,720 In anderen Fällen ist die Funktion nicht stattBefehlsZeilenArgumente. 958 00:46:32,720 --> 00:46:36,560 Oder die Funktion, wenn ich die Leere schreiben main (void), wäre das Haupt sagen 959 00:46:36,560 --> 00:46:38,460 nichts zurück. 960 00:46:38,460 --> 00:46:39,960 So nichtig bedeutet nur nichts. 961 00:46:39,960 --> 00:46:42,510 Was würde ich schreiben, wenn ich nehmen Kommandozeilen-Argumente? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int Bogen c-Schnur Bogen v. 964 00:46:47,150 --> 00:46:49,055 >> JASON HIRSCHHORN: int argc argv String. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Ist das richtig? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Es ist char argv Sterne Klammern. 968 00:46:58,720 --> 00:47:01,730 >> JASON HIRSCHHORN: Also könnten Sie schreiben String argv Klammern oder char argv Sterne 969 00:47:01,730 --> 00:47:03,710 Klammern, aber Sie müssen die Klammern. 970 00:47:03,710 --> 00:47:06,290 Da argv ist ein Array von Strings, erinnern. 971 00:47:06,290 --> 00:47:07,360 Es ist nicht nur ein String. 972 00:47:07,360 --> 00:47:10,350 So String argv ist, hier ist ein String argv genannt. 973 00:47:10,350 --> 00:47:13,630 String argv Klammern, hier ist ein Array von Strings. 974 00:47:13,630 --> 00:47:17,865 So int argc String argv Klammern wäre etwas, das ich 975 00:47:17,865 --> 00:47:18,810 würde wahrscheinlich schreiben. 976 00:47:18,810 --> 00:47:23,050 >> Also wollten Sie in einem Integer zu retten? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Ja, integer. 978 00:47:24,285 --> 00:47:25,840 Oder in einem Schwimmer. 979 00:47:25,840 --> 00:47:26,710 >> JASON HIRSCHHORN: In einem Schwimmer? 980 00:47:26,710 --> 00:47:30,790 Wie, float x gleich 1 geteilt durch 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON HIRSCHHORN: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Wie drucke ich einen Schwimmer in printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Was? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON HIRSCHHORN:% f. 988 00:47:48,300 --> 00:47:50,810 Was ist eine ganze Zahl? 989 00:47:50,810 --> 00:47:52,110 d oder i. 990 00:47:52,110 --> 00:47:53,000 Was ist ein String? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON HIRSCHHORN: s. 993 00:47:56,140 --> 00:47:57,550 Wie bekomme ich eine neue Linie? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON HIRSCHHORN: Was muss ich zurück wenn der Hauptläufe korrekt? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Muss ich diese Zeile schreibe, obwohl? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nein. 1000 00:48:10,170 --> 00:48:11,513 OK, werden wir nicht schreiben, dann. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Kann jeder das gelesen? 1003 00:48:17,190 --> 00:48:18,485 Es sieht ein bisschen klein. 1004 00:48:18,485 --> 00:48:20,160 Kann jeder sehen, oder sollte Ich mache es größer? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Ich denke, für die Kamera, wir machen es ist ein bisschen größer, aber. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON HIRSCHHORN: Wenn ich will, kann das deaktiviert . C in eine ausführbare Datei, was 1009 00:48:38,410 --> 00:48:39,260 schreibe ich? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Make-Test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON HIRSCHHORN: Es tut uns leid? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Make-Test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON HIRSCHHORN: Make-Test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Wir redeten diese Linie früher. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 Was ist Klang? 1018 00:48:51,270 --> 00:48:52,200 Der Name des Compilers. 1019 00:48:52,200 --> 00:48:53,920 Was ist diese Linie? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Stellt es für die Verwendung von GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON HIRSCHHORN: Sets es für die Verwendung von GDB. 1022 00:48:59,230 --> 00:49:02,338 Diese Linie, was ist das? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Source Code. 1024 00:49:03,290 --> 00:49:06,010 >> JASON HIRSCHHORN: Das ist die Quelldatei, die. c-Datei. 1025 00:49:06,010 --> 00:49:08,150 Was haben diese beiden Linien zu tun? 1026 00:49:08,150 --> 00:49:10,245 Oder diese beiden Linien nicht. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: Sie nennt es testen. 1028 00:49:12,300 --> 00:49:15,410 >> JASON HIRSCHHORN: Also der Strich o sagt, nennen Sie es etwas anders. 1029 00:49:15,410 --> 00:49:16,790 Und hier nennen es Test. 1030 00:49:16,790 --> 00:49:18,900 Wenn ich es nicht haben, dass, was würden Sie nennen das? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: A.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON HIRSCHHORN: A.out. 1033 00:49:22,340 --> 00:49:25,366 Was hat das zu tun? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Verknüpft die Mathematik-Bibliothek. 1035 00:49:27,670 --> 00:49:29,550 >> JASON HIRSCHHORN: Es verbindet in der Mathematik-Bibliothek. 1036 00:49:29,550 --> 00:49:32,880 Wir haben nicht die Mathematik-Bibliothek, aber denn das ist so üblich, haben sie 1037 00:49:32,880 --> 00:49:35,780 geschrieben machen, um immer auch die Mathematik-Bibliothek. 1038 00:49:35,780 --> 00:49:39,050 Und ebenfalls zählt der CS50-Bibliothek. 1039 00:49:39,050 --> 00:49:43,010 >> OK, also, wenn wir verzeichnen, haben wir jetzt eine ausführbare Datei namens Test. 1040 00:49:43,010 --> 00:49:45,150 Um es auszuführen, schreibe ich Test. 1041 00:49:45,150 --> 00:49:48,330 Ich sehe, dass meine Gleitkomma wie erwartet, gleich 0 ist. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Ist das - 1044 00:49:51,590 --> 00:49:52,060 so - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Dann wenn du jetzt schweben, wie Sie es gegossen wie float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON HIRSCHHORN: Guss die ein mit einem Schwimmer? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nein, warf die volle Sache - 1048 00:49:59,180 --> 00:49:59,500 ja. 1049 00:49:59,500 --> 00:50:02,460 Wenn Sie nur das täte, würde dass es 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON HIRSCHHORN: OK, so wirklich schnell, 1 geteilt durch 10, das sind 1051 00:50:07,170 --> 00:50:08,690 Zahlen geteilt. 1052 00:50:08,690 --> 00:50:13,580 Also, wenn Sie ganze Zahlen teilen, sind sie 0, und du bist Einsparung, die 0 in eine 1053 00:50:13,580 --> 00:50:17,170 schwimmen, weil der Schrägstrich ist nur Integer-Division. 1054 00:50:17,170 --> 00:50:19,180 So, jetzt sind wir etwas drehen in einen Schwimmer. 1055 00:50:19,180 --> 00:50:21,650 >> Mal sehen, was passiert. 1056 00:50:21,650 --> 00:50:22,900 Wir werden ausgefüllt. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 So, jetzt sehen wir, dass die Schrägstrich nicht Integer-Division, es schwebte 1059 00:50:31,090 --> 00:50:32,640 Punkt Division. 1060 00:50:32,640 --> 00:50:35,700 Weil eines ihrer Argumente hatte mit einem Schwimmer gegossen. 1061 00:50:35,700 --> 00:50:38,380 So, jetzt wurde es zu sagen, behandeln diese Aufteilung, wie wir es zu tun haben 1062 00:50:38,380 --> 00:50:40,140 schwimmende Punkte, nicht mit Zahlen. 1063 00:50:40,140 --> 00:50:42,760 Und so erhalten wir die Antwort, die wir erwarten. 1064 00:50:42,760 --> 00:50:44,620 >> Mal sehen, was passiert - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Wenn ich mehr Dezimalstellen drucken wollte Flecken, wie könnte ich das tun? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Punkt Punkt f, oder so viele Dezimalstellen wie Sie wollen. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON HIRSCHHORN: Also ich drucken 10 Dezimal-Stellen. 1070 00:51:04,440 --> 00:51:06,610 Und wir sehen jetzt bekommen wir einige seltsame Sachen. 1071 00:51:06,610 --> 00:51:09,650 Und das geht zurück zu Ihrer Frage über Gleitkomma-Ungenauigkeit. 1072 00:51:09,650 --> 00:51:10,950 Es gibt seltsame Dinge hier gespeichert. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, ist, dass Ihre Frage beantworten? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Was haben Sie sonst noch wollen schnell zu kodieren? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Ich wollte nur sehen, ob nicht, wenn Sie sich einige Zeiger befreit, 1078 00:51:25,470 --> 00:51:30,410 ob der Zeiger noch immer gespeichert es die Adresse, was es war 1079 00:51:30,410 --> 00:51:32,170 , die auf zuvor. 1080 00:51:32,170 --> 00:51:34,100 >> JASON HIRSCHHORN: OK, also lasst uns das tun. 1081 00:51:34,100 --> 00:51:38,030 Char Sterne ptr, schafft dies eine Variable ptr vom Typ char Sterne bezeichnet. 1082 00:51:38,030 --> 00:51:39,280 Wie schreibe ich malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Nur malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Aber dann muss es Größe sein und in diesem Fall, ich denke, du würdest 1087 00:51:51,040 --> 00:51:52,465 werden, die auf char. 1088 00:51:52,465 --> 00:51:54,450 Also, es wäre char sein. 1089 00:51:54,450 --> 00:51:57,520 >> JASON HIRSCHHORN: OK, so dass mehr generisch, Inside - 1090 00:51:57,520 --> 00:51:58,770 wir bearbeiten. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Innerhalb malloc, die Zahl wollen Sie von Bytes auf dem Heap. 1093 00:52:09,260 --> 00:52:12,320 Generell was wir gesehen haben, dass wir tun, ist, wir werden malloc 1094 00:52:12,320 --> 00:52:14,940 Zeichenfolgen, zum Beispiel, oder Arrays von ganzen Zahlen. 1095 00:52:14,940 --> 00:52:21,600 Also, wenn wir wollen, 10 Ganzzahlen oder 10 Zeichen, 10 wird uns 10. 1096 00:52:21,600 --> 00:52:24,370 Und dann Größe der Zeichen geben würde, uns, dass die Größe der Zeichen, die in 1097 00:52:24,370 --> 00:52:25,120 In diesem Fall ist 1 Byte. 1098 00:52:25,120 --> 00:52:26,250 Wir bekommen 10 Byte. 1099 00:52:26,250 --> 00:52:28,540 Wenn wir die Größe von int zu schreiben, , dass würde uns 40 Byte. 1100 00:52:28,540 --> 00:52:31,520 >> Also mehr generisch, innerhalb von malloc ist die Anzahl von Bytes, die Sie wollen. 1101 00:52:31,520 --> 00:52:34,620 In diesem Fall bekommen wir 1 Byte. 1102 00:52:34,620 --> 00:52:36,900 Welche scheint wie eine seltsame Verwendung von malloc, aber für unsere 1103 00:52:36,900 --> 00:52:38,470 Zwecke sinnvoll ist. 1104 00:52:38,470 --> 00:52:40,420 Es gibt also, dass. 1105 00:52:40,420 --> 00:52:43,420 >> Wir werden frei nennen. 1106 00:52:43,420 --> 00:52:47,040 Wir bekommen es los und wir wieder verwenden ptr. 1107 00:52:47,040 --> 00:52:48,750 Und was haben Sie prüfen wollen? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Ich wollte nur zu prüfen, ob oder nicht, war alles andere 1109 00:52:50,550 --> 00:52:51,900 darin. 1110 00:52:51,900 --> 00:52:53,050 >> JASON HIRSCHHORN: Also, ob darauf hingewiesen, alles zu? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Ja, genau, ob es hatte noch eine Speicheradresse. 1112 00:52:57,740 --> 00:53:02,220 >> JASON HIRSCHHORN: Sie wollen also um den Wert von ptr überprüfen? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Ja, genau. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON HIRSCHHORN: Was ich hier schreibe, wenn ich den Wert der zu überprüfen 1116 00:53:10,160 --> 00:53:11,880 Punkt - was ist, Jordanien sagte, der Wert? 1117 00:53:11,880 --> 00:53:13,720 Oder, was im Inneren des ptr gespeichert? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: Eine Speicheradresse. 1119 00:53:14,620 --> 00:53:16,330 >> JASON HIRSCHHORN: Eine Speicheradresse. 1120 00:53:16,330 --> 00:53:20,520 Also, wenn ich schreibe nur das, es werde gib mir den Wert von ptr. 1121 00:53:20,520 --> 00:53:22,800 Und wie kann ich ausdrucken eine Speicheradresse? 1122 00:53:22,800 --> 00:53:26,470 Was ist der Format-String für eine Speicheradresse? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON HIRSCHHORN:% p. 1125 00:53:28,050 --> 00:53:29,500 % S ist ein String. 1126 00:53:29,500 --> 00:53:30,750 % P für Zeiger. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Ist das richtig? 1129 00:53:43,540 --> 00:53:44,790 Das ist richtig. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 So ptr gleich - 1132 00:53:51,040 --> 00:53:53,350 es hat immer noch etwas in ihm. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Dies ist wahrscheinlich ein interessante Frage. 1135 00:53:57,645 --> 00:53:59,198 Was macht diese Linie zu tun? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: Seg Fehler. 1137 00:54:00,830 --> 00:54:01,310 >> JASON HIRSCHHORN: Was? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Ich denke, es seg Fehler. 1139 00:54:02,678 --> 00:54:03,574 >> JASON HIRSCHHORN: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> Student: Ich denke, es wird Fehler Seg. 1141 00:54:04,920 --> 00:54:08,265 >> JASON HIRSCHHORN: Also diese Linie Code Sterne ptr, was 1142 00:54:08,265 --> 00:54:10,152 hat der Stern das? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Inhalt. 1144 00:54:11,240 --> 00:54:11,560 >> JASON HIRSCHHORN: Ja. 1145 00:54:11,560 --> 00:54:13,910 Gehen Sie auf den Inhalt zu bekommen. 1146 00:54:13,910 --> 00:54:16,830 Also, das wird auf den Speicher gehen Adresse dort und mir geben, dass. 1147 00:54:16,830 --> 00:54:21,030 Ich habe% c hier, weil es Zeichen werden dort gespeichert. 1148 00:54:21,030 --> 00:54:23,390 So werden wir an diese Adresse gehen wir gerade gesehen haben - oder es wird wahrscheinlich ein 1149 00:54:23,390 --> 00:54:25,190 bisschen anders diese Zeit, die wir das Programm ausführen. 1150 00:54:25,190 --> 00:54:28,010 Aber wir werden an diese Adresse gehen was wir wissen, noch existiert 1151 00:54:28,010 --> 00:54:29,260 und sehen, was da ist. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> So dauerte es nicht seg Schuld. 1154 00:54:37,110 --> 00:54:38,970 Es ist einfach nicht geben uns nichts. 1155 00:54:38,970 --> 00:54:43,350 Es könnte uns tatsächlich gegeben haben etwas, wir können es nicht sehen. 1156 00:54:43,350 --> 00:54:45,110 Und das geht auf diese Idee - 1157 00:54:45,110 --> 00:54:47,270 und wir werden nicht zu viel in zu erhalten dies, weil das ist, über die 1158 00:54:47,270 --> 00:54:48,460 Rahmen dieses Kurses. 1159 00:54:48,460 --> 00:54:51,260 Aber wir sprachen hier, wenn wir ging über die Grenzen des Arrays durch 1160 00:54:51,260 --> 00:54:54,890 1, können wir nicht in Schwierigkeiten bringen könnten. 1161 00:54:54,890 --> 00:54:58,550 >> Manchmal, wenn Sie gerade gehen durch 1, Sie etwas falsch zu machen, und Sie 1162 00:54:58,550 --> 00:54:59,220 könnte in Schwierigkeiten geraten. 1163 00:54:59,220 --> 00:55:00,820 Aber Sie müssen nicht immer in Schwierigkeiten zu bringen. 1164 00:55:00,820 --> 00:55:05,170 Es hängt davon ab, wie viel von einer schlechten Sache, die Sie Sie, Sie gehen, um in Schwierigkeiten zu bringen. 1165 00:55:05,170 --> 00:55:07,790 Was nicht heißt, sein schlampig mit Ihrem Code. 1166 00:55:07,790 --> 00:55:12,080 Aber es ist zu sagen, wird das Programm nicht immer zu beenden, auch wenn Sie irgendwo hingehen 1167 00:55:12,080 --> 00:55:14,130 Sie sollen nicht zu gehen. 1168 00:55:14,130 --> 00:55:18,170 >> Ein gutes Beispiel dafür ist, eine Menge von Menschen in ihren Problem-Set 3, die 1169 00:55:18,170 --> 00:55:22,350 15 wurde, nicht überprüfen Grenzen des Vorstandes. 1170 00:55:22,350 --> 00:55:25,860 So können Sie schaute nach links, schaute auf die rechts, schaute nach oben, sah 1171 00:55:25,860 --> 00:55:27,000 nach unten. 1172 00:55:27,000 --> 00:55:31,540 Aber du hast nicht überprüfen, ob die oben war eigentlich los, um auf dem Board sein. 1173 00:55:31,540 --> 00:55:35,220 Und eine Menge Leute, die das getan hat und gestellt, dass in, arbeitete ihr Programm 1174 00:55:35,220 --> 00:55:38,960 perfekt, da, wo das Bord war gespeichert, wenn Sie einen ging 1175 00:55:38,960 --> 00:55:42,300 darüber oder überprüft, dass der Speicher Adresse, es war nicht alles 1176 00:55:42,300 --> 00:55:44,870 besonders schrecklich darüber, so dass Ihr Programm nicht 1177 00:55:44,870 --> 00:55:45,970 werde dich schreien. 1178 00:55:45,970 --> 00:55:48,870 >> Aber wir haben noch Entnahmestellen würde, wenn Sie nicht überprüfen, dass, weil Sie 1179 00:55:48,870 --> 00:55:50,850 wurden etwas, was Sie nicht tun, waren tun soll, und Sie haben könnten 1180 00:55:50,850 --> 00:55:51,860 in Schwierigkeiten gebracht. 1181 00:55:51,860 --> 00:55:54,040 Quoten sind, obwohl Sie wahrscheinlich nicht. 1182 00:55:54,040 --> 00:55:57,790 Das ist also zu zeigen, dass, ja, wir können immer noch zu ihm zu gehen. 1183 00:55:57,790 --> 00:55:59,010 Und wir sind nicht immer in Probleme in diesem Fall. 1184 00:55:59,010 --> 00:56:04,000 Wenn wir versucht zu tun, lesen Sie die nächsten 100 Zeichen, würden wir 1185 00:56:04,000 --> 00:56:06,000 vermutlich in Schwierigkeiten geraten. 1186 00:56:06,000 --> 00:56:09,400 Und Sie können Code-Lese die nächsten 100 Zeichen, wenn Sie, indem Sie einige wollen 1187 00:56:09,400 --> 00:56:10,110 Art for-Schleife. 1188 00:56:10,110 --> 00:56:10,850 Ja. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Da wir zugewiesen wurden, dass Raum ein Ist-Wert, würden wir nicht 1190 00:56:16,250 --> 00:56:17,050 tatsächlich in der Lage, etwas zu sehen sein. 1191 00:56:17,050 --> 00:56:21,740 Sollten wir versuchen es mit der Einstellung, dass gleich c oder so etwas? 1192 00:56:21,740 --> 00:56:22,640 >> JASON HIRSCHHORN: Gute Frage. 1193 00:56:22,640 --> 00:56:25,340 Wie kann ich diesen Wert - 1194 00:56:25,340 --> 00:56:28,980 welcher Codezeile schreibe ich auf der Leitung sieben zu tun, was Sie gesagt haben? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Star ptr gleich Einzel Zitat C Ende Apostroph. 1196 00:56:34,040 --> 00:56:36,970 >> JASON HIRSCHHORN: Also, setzen ein Zeichen, c, an dieser Stelle, 1197 00:56:36,970 --> 00:56:40,200 weil wieder, dass Sterne bedeutet gehen, um dort. 1198 00:56:40,200 --> 00:56:43,320 Und wenn auf der linken Seite verwendet ein Zuweisungsoperator, das entspricht 1199 00:56:43,320 --> 00:56:47,270 unterzeichnen, werden wir nicht zu bekommen, dass Wert, so viel wie Sie diesen Wert gesetzt. 1200 00:56:47,270 --> 00:56:48,520 Nun wollen wir sehen, was passiert. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Wir haben dort etwas und es war da. 1203 00:56:56,770 --> 00:56:58,000 Wir nannten kostenlos. 1204 00:56:58,000 --> 00:57:00,100 Einige Sachen wahrscheinlich passiert auf dem Heap. 1205 00:57:00,100 --> 00:57:01,890 So ist es nicht mehr da. 1206 00:57:01,890 --> 00:57:07,440 Aber noch einmal, wir sind nicht immer Ärger dorthin zu gehen. 1207 00:57:07,440 --> 00:57:10,260 >> Ich tue dies in Code, um zu veranschaulichen dass eine Menge von diesen 1208 00:57:10,260 --> 00:57:12,410 Fragen, die Sie haben, sind sie wirklich interessant 1209 00:57:12,410 --> 00:57:13,650 beantwortet eine Menge Zeit. 1210 00:57:13,650 --> 00:57:15,260 Und sie sind wirklich gute Fragen. 1211 00:57:15,260 --> 00:57:19,010 Und man sie herausfinden können, auf Ihre eigenen, wenn, zum Beispiel, 1212 00:57:19,010 --> 00:57:19,990 wir sind nicht im Schnitt. 1213 00:57:19,990 --> 00:57:20,940 Ja. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Weil Sie nicht das Senden sind die Zeiger überall, wollen Sie brauchen 1215 00:57:24,430 --> 00:57:26,530 malloc verwenden? 1216 00:57:26,530 --> 00:57:28,400 >> JASON HIRSCHHORN: Also das geht zurück zu Ihrer ersten Frage. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Ist es nur eine lokale Variable? 1219 00:57:29,980 --> 00:57:32,280 Malloc hier ist nicht so überzeugend. 1220 00:57:32,280 --> 00:57:35,260 Die Verwendung von malloc hier nicht dass überzeugende, weil es 1221 00:57:35,260 --> 00:57:36,500 nur eine lokale Variable. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: So könnte man tun, char Sterne ptr gleich hallo? 1223 00:57:40,970 --> 00:57:41,400 >> JASON HIRSCHHORN: Oh. 1224 00:57:41,400 --> 00:57:43,300 Also werden wir jetzt wieder zu Ihrer ersten Frage. 1225 00:57:43,300 --> 00:57:46,885 Ich denke, dass Sie nicht zufrieden waren mit meiner Antwort. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Wie das? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Ja. 1229 00:57:49,682 --> 00:57:50,932 Warten. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON HIRSCHHORN: Und wo Sie ausdrucken möchten? 1232 00:57:57,850 --> 00:58:00,026 Also werden wir einen String so ausdrucken? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Interessant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON HIRSCHHORN: Also sagt das diese Argument des Typs eines Zeichen. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 So sollte dies ein Zeichen sein. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: nimmt einfach die erste. 1241 00:58:26,280 --> 00:58:28,610 >> JASON HIRSCHHORN: Also das ist das, was ich schon sagte. 1242 00:58:28,610 --> 00:58:34,240 Wie ich schon sagte, es ist nicht die Speicherung Zeichenfolge innerhalb Variablenzeiger. 1243 00:58:34,240 --> 00:58:35,120 Es ist die Speicherung - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: Der erste Wert der Zeichenfolge. 1245 00:58:36,350 --> 00:58:40,810 >> JASON HIRSCHHORN: Die Adresse der erste Wert des Strings. 1246 00:58:40,810 --> 00:58:46,940 Wenn wir drucken diese waren, sind wir immer den Wert innerhalb Zeiger. 1247 00:58:46,940 --> 00:58:51,005 Und wir werden sehen, es ist in der Tat eine Speicheradresse. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Heißt das Sinn? 1250 00:58:56,440 --> 00:58:56,940 Entschuldigung. 1251 00:58:56,940 --> 00:58:58,996 Bitte warten, heißt das beantworten Ihre Frage, wenn? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Ja. 1253 00:58:59,790 --> 00:59:05,830 >> JASON HIRSCHHORN: Diese Codezeile ist Schaffung eines String und dann ein anderes 1254 00:59:05,830 --> 00:59:09,115 Variable Zeiger, ist zeigen zu dieser Schnur, dass Array. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Ja. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: Also, wenn wir gingen eine Speicher Adresse weiter, würden wir die h zu bekommen? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Hat sie als Zeichenfolge gespeichert worden? 1260 00:59:23,150 --> 00:59:24,400 >> JASON HIRSCHHORN: Wie, wir haben - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 so ist dies wertvolles zu tun. 1263 00:59:30,790 --> 00:59:33,780 Dies ist Arithmetik, welche euch zuvor gesehen haben und sollten 1264 00:59:33,780 --> 00:59:35,550 relativ bequem mit. 1265 00:59:35,550 --> 00:59:36,905 Dies ist vergleichbar mit dem Schreiben - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 wenn wir diese Codezeile zu schreiben, wir haben die Array-Schreibweise gesehen. 1268 00:59:46,350 --> 00:59:55,900 Das sollte uns die zweite geben Wert in diesem Array, h. 1269 00:59:55,900 --> 01:00:05,010 >> Wenn wir dies taten, sollte diese auch geben uns der zweite Wert in diesem Array. 1270 01:00:05,010 --> 01:00:08,320 Denn es wird nicht auf die Speicher Adresse des ersten Sache, aber die 1271 01:00:08,320 --> 01:00:10,530 Speicheradresse der Sache ein Ende. 1272 01:00:10,530 --> 01:00:14,360 Und dann die Sternoperator Dereferenzierungen dass Zeiger. 1273 01:00:14,360 --> 01:00:16,940 Und wieder, mal sehen. 1274 01:00:16,940 --> 01:00:18,664 Wir bekommen h wieder ein. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Was genau macht dereference das? 1276 01:00:20,980 --> 01:00:23,650 >> JASON HIRSCHHORN: Dereference ist ein schickes Wort für Sie auf. 1277 01:00:23,650 --> 01:00:26,390 Gehen Sie auf, dass und erhalten, was da ist ist zu dereferenzieren einen Zeiger. 1278 01:00:26,390 --> 01:00:28,240 Es ist einfach ein fantastisches Wort dafür. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Wenn wir wollten Druck die ganze Reihe, konnten wir 1280 01:00:29,986 --> 01:00:31,930 Et-Zeichen-Zeiger zu tun? 1281 01:00:31,930 --> 01:00:33,490 >> JASON HIRSCHHORN: OK, wir sind dabei, hier anzuhalten. 1282 01:00:33,490 --> 01:00:35,480 Wir werden zu Ende. 1283 01:00:35,480 --> 01:00:41,760 Ampersand gibt Ihnen die Adresse eines Lage, so, wenn Sie von Et-Zeichen zu tun 1284 01:00:41,760 --> 01:00:44,080 eine Variable, es gibt Ihnen die Adresse wobei diese Variable gespeichert. 1285 01:00:44,080 --> 01:00:48,580 Ampersand Zeiger gern die Adresse ptr ptr ist, wo im Speicher. 1286 01:00:48,580 --> 01:00:50,140 >> Wir gehen nicht weiter zu gehen bei diesem Beispiel. 1287 01:00:50,140 --> 01:00:52,640 Sie können herausfinden, diese Dinge auf eigene Faust. 1288 01:00:52,640 --> 01:00:55,740 Aber noch einmal, dies könnte sogar ein grenzender Bit hinaus, was Sie wissen müssen, um für 1289 01:00:55,740 --> 01:00:58,000 der Umfang dieser Halbzeit - 1290 01:00:58,000 --> 01:00:59,070 oder dieses Quiz statt. 1291 01:00:59,070 --> 01:01:00,270 Entschuldigung. 1292 01:01:00,270 --> 01:01:03,770 >> Wir werden weitermachen, denn ich würde Lust auf Codierung Problem zu tun 1293 01:01:03,770 --> 01:01:05,100 , bevor die Zeit um ist. 1294 01:01:05,100 --> 01:01:09,340 Und wir werden um Code, was ich denke ist die überzeugendste von diesen 1295 01:01:09,340 --> 01:01:11,020 Beispiele atoi. 1296 01:01:11,020 --> 01:01:14,520 Das war also eine Frage nach ein Quiz vor zwei Jahren. 1297 01:01:14,520 --> 01:01:17,810 Und ich habe es auf das Board hier. 1298 01:01:17,810 --> 01:01:20,680 >> Die Menschen waren auf dem Quiz gefragt - 1299 01:01:20,680 --> 01:01:23,640 sie ein wenig mehr in tesxt gegeben wurden, die Frage, aber ich eliminiert die 1300 01:01:23,640 --> 01:01:26,640 Text, weil es unnötig war jetzt für unsere Zwecke. 1301 01:01:26,640 --> 01:01:29,180 Es war nur einige Hintergrund auf welche atoi taten. 1302 01:01:29,180 --> 01:01:31,425 Aber Sie alle wissen und sind sehr vertraut mit atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Ich schlage vor, Sie kodieren diese auf einem Blatt Papier. 1304 01:01:35,620 --> 01:01:39,310 Ich schlage vor, Sie auch die Strategie nutzen dass wir übergelaufen 1305 01:01:39,310 --> 01:01:41,040 viele in unserer Sektion. 1306 01:01:41,040 --> 01:01:44,130 Stellen Sie zunächst sicher, dass Sie verstehen, was atoi Werk. 1307 01:01:44,130 --> 01:01:47,580 Zeichne ein Bild oder kommen mit einigen geistiges Bild von ihm im Kopf. 1308 01:01:47,580 --> 01:01:51,120 Weiter, schreiben Sie Pseudocode für diese. 1309 01:01:51,120 --> 01:01:53,120 Auf dem Quiz, wenn alles, was Sie bekommen, ist Pseudocode, zumindest 1310 01:01:53,120 --> 01:01:54,550 legte etwas nach unten. 1311 01:01:54,550 --> 01:02:00,070 Und dann, dass die Karte auf Pseudocode C. Wenn Sie in einen Check Ihrer 1312 01:02:00,070 --> 01:02:03,760 Pseudocode, wie überprüfen, ob etwas 1 ist, dass die Karten auf eine, wenn 1313 01:02:03,760 --> 01:02:05,750 Zustand und so weiter. 1314 01:02:05,750 --> 01:02:07,850 Und schließlich, Code des Programms in C 1315 01:02:07,850 --> 01:02:15,000 >> So gehen Sie zurück zu atoi und fünf Minuten dauern Um dies auf ein Blatt zu codieren 1316 01:02:15,000 --> 01:02:19,480 Papier, das wahrscheinlich über die ist Höhe der Zeit wäre für ein nehmen 1317 01:02:19,480 --> 01:02:21,260 Quiz Code atoi. 1318 01:02:21,260 --> 01:02:27,060 Fünf bis 15 Minuten, fünf bis 12, fünf bis 10 Minuten wird über die Anzahl an 1319 01:02:27,060 --> 01:02:30,150 Zeit, die Sie dafür aufwenden würde Frage im Quiz. 1320 01:02:30,150 --> 01:02:31,670 Also fünf Minuten dauern jetzt, bitte. 1321 01:02:31,670 --> 01:02:35,957 Und wenn Sie Fragen haben, heben Ihre Hand, und ich werde kommen um. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE GESPRÄCHE] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON HIRSCHHORN: OK, so das war fünf Minuten. 1326 01:08:37,580 --> 01:08:39,880 Das war wahrscheinlich über die Höhe der Zeit, die Sie auf, dass verbringen möchten auf ein Quiz, 1327 01:08:39,880 --> 01:08:42,120 vielleicht das untere Ende dieser Zeit. 1328 01:08:42,120 --> 01:08:44,010 Wir werden in ein wenig rekapitulieren. 1329 01:08:44,010 --> 01:08:45,740 Lassen Sie uns diese Codierung. 1330 01:08:45,740 --> 01:08:49,479 Und wenn wir nicht den ganzen Weg durch, die Antworten auf diese und diese 1331 01:08:49,479 --> 01:08:54,189 Quizfrage zur Verfügung stehen, wieder, Herbst 2011 ist, wenn diese Frage 1332 01:08:54,189 --> 01:08:54,913 erschien auf dem Quiz. 1333 01:08:54,913 --> 01:08:57,830 >> Und es hat sich gelohnt acht Punkte auf das Quiz dann. 1334 01:08:57,830 --> 01:09:01,140 Acht Punkte auf dem oberen Ende der Menge der Punkte etwas wert ist. 1335 01:09:01,140 --> 01:09:04,790 Die meisten Fragen sind im Bereich von ein bis sechs Punkten. 1336 01:09:04,790 --> 01:09:08,500 Das ist also ein anspruchsvoller Frage, das ist sicher. 1337 01:09:08,500 --> 01:09:09,750 Kann jemand mir bekommen angefangen? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Generell was werden wir damit zu tun haben zu wollen, 1340 01:09:15,380 --> 01:09:17,550 atoi funktionieren, logisch? 1341 01:09:17,550 --> 01:09:19,569 Was wollen wir tun? 1342 01:09:19,569 --> 01:09:22,279 So werden wir zu schreiben einige Pseudocode. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Konvertieren Zeichen in ganze Zahlen. 1344 01:09:24,090 --> 01:09:26,700 >> JASON HIRSCHHORN: Konvertieren Zeichen in ganze Zahlen. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 So, wie viele Zeichen sind wir gehen zu müssen, um durch zu gehen? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Alle von ihnen. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Alle Charaktere in der Zeichenkette. 1349 01:09:34,100 --> 01:09:35,540 >> JASON HIRSCHHORN: Alle von der Zeichen in der Zeichenfolge. 1350 01:09:35,540 --> 01:09:42,180 Also, wenn wir wollten, um durch alle gehen Zeichen in einem String, was ist eine Sache, 1351 01:09:42,180 --> 01:09:44,560 C in die wir gesehen haben, die es ermöglicht hat uns, durch jeden gehen 1352 01:09:44,560 --> 01:09:45,939 Zeichen in einem String? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTEN: Eine for-Schleife. 1354 01:09:46,819 --> 01:09:48,069 >> JASON HIRSCHHORN: Eine for-Schleife. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 So werden wir in einer Schleife durchlaufen jedes Zeichen in s. 1357 01:09:55,330 --> 01:10:00,940 >> Und was werden wir tun wollen wenn wir einen besonderen Charakter bekommen? 1358 01:10:00,940 --> 01:10:02,480 Sagen wir, wir sind immer vergangen 90. 1359 01:10:02,480 --> 01:10:03,460 Wir bekommen die 9. 1360 01:10:03,460 --> 01:10:04,240 Es ist ein Charakter. 1361 01:10:04,240 --> 01:10:07,440 Was haben wir damit zu tun, wollen dass der Charakter 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Subtrahieren Sie es von Zeichen 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: 0 hinzufügen? 1364 01:10:11,860 --> 01:10:13,350 >> JASON HIRSCHHORN: Subtrahieren es von Zeichen 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Ja. 1366 01:10:13,800 --> 01:10:15,573 >> JASON HIRSCHHORN: Warum Sie wollen das tun? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [unverständlich] 1368 01:10:16,560 --> 01:10:17,010 Wert. 1369 01:10:17,010 --> 01:10:18,380 Die int-Wert. 1370 01:10:18,380 --> 01:10:21,580 >> JASON HIRSCHHORN: OK, so nehmen wir die Charakter 9, subtrahieren sie von 1371 01:10:21,580 --> 01:10:25,820 Zeichen 0 ein um eine tatsächlichen integer 9. 1372 01:10:25,820 --> 01:10:27,070 Süße. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Und wie Sie wissen, diesen Charakter 9 minus null Charakter ist 9? 1375 01:10:37,000 --> 01:10:39,222 Welche Grafik hat man sich aus? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Es gibt logischer neun Plätze zwischen 9 und 0 ist. 1377 01:10:43,130 --> 01:10:44,620 Oder Sie könnten in der ASCII-Tabelle. 1378 01:10:44,620 --> 01:10:45,120 >> JASON HIRSCHHORN: ASCII-Tabelle. 1379 01:10:45,120 --> 01:10:46,490 Aber ja, richtig sind Sie auch. 1380 01:10:46,490 --> 01:10:47,780 So subtrahieren wir null. 1381 01:10:47,780 --> 01:10:49,010 So, jetzt haben wir die ganze Zahl neun. 1382 01:10:49,010 --> 01:10:49,970 Und was wollen wir damit zu tun? 1383 01:10:49,970 --> 01:10:54,970 Wenn wir 90, es ist die erste Ganzzahl haben wir, was wir tun wollen? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Ich würde in einem temporären ganze Zahl setzen Array, dann tun Sie es Mathematik 1385 01:10:58,180 --> 01:11:02,088 später, um es in einem Ende zu machen. 1386 01:11:02,088 --> 01:11:03,020 >> JASON HIRSCHHORN: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Sie können am Ende der Start die Reihe und dann nach vorne zu bewegen, so 1388 01:11:06,990 --> 01:11:10,350 dass jedes Mal, wenn Sie vorwärts zu bewegen, Sie wird mit 10 multipliziert. 1389 01:11:10,350 --> 01:11:10,830 >> JASON HIRSCHHORN: OK. 1390 01:11:10,830 --> 01:11:12,250 Das klingt wie eine ziemlich überzeugende Idee. 1391 01:11:12,250 --> 01:11:16,040 Wir können am Ende unser Angebot zu starten, und wir können strleng verwenden. 1392 01:11:16,040 --> 01:11:17,030 Wir können hier in strleng verwenden. 1393 01:11:17,030 --> 01:11:18,870 Wir werden die Länge unserer String zu erhalten. 1394 01:11:18,870 --> 01:11:20,100 Wir beginnen am Ende. 1395 01:11:20,100 --> 01:11:29,170 Und + die erste, nehmen wir eben, dass ganze Zahl ist, und vielleicht schaffen wir wie ein 1396 01:11:29,170 --> 01:11:32,270 neuen Integer-Variable bis oben, wo wir speichern alles. 1397 01:11:32,270 --> 01:11:37,340 Also haben wir eine Schleife durch alle Zeichen in s ab hinten nach vorne, subtrahieren wir 0 und 1398 01:11:37,340 --> 01:11:42,790 dann nehmen wir es, und je nach wo sie ist, multiplizieren wir 1399 01:11:42,790 --> 01:11:45,860 mit einer Leistung von 10. 1400 01:11:45,860 --> 01:11:50,644 Da das erste, was wir tun multiplizieren Sie die Zeichen ganz rechts durch? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 an die 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON HIRSCHHORN: 10 an die 0. 1403 01:11:53,170 --> 01:11:56,010 Was machen wir multiplizieren die zweite Zeichen ganz rechts durch? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [unverständlich]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON HIRSCHHORN: Was? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 auf die 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON HIRSCHHORN: 10 auf die 1. 1408 01:12:00,420 --> 01:12:03,754 Die dritte Zeichen ganz rechts? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 auf die 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON HIRSCHHORN: 10 bis 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Sorry, ich verstehe nicht, was wir hier tun. 1412 01:12:07,200 --> 01:12:08,640 >> JASON HIRSCHHORN: OK, gehen wir zurück, dann. 1413 01:12:08,640 --> 01:12:12,500 Wir werden also zu bekommen in einem String übergeben. 1414 01:12:12,500 --> 01:12:14,470 Denn wir schreiben atoi. 1415 01:12:14,470 --> 01:12:15,260 So bekommen wir in einem String übergeben. 1416 01:12:15,260 --> 01:12:17,640 Sagen wir, wir sind immer bestanden in der Zeichenfolge 90. 1417 01:12:17,640 --> 01:12:19,930 >> Das erste, was wir tun werden eingestellt eine neue Integer-Variable, die wir sind 1418 01:12:19,930 --> 01:12:22,150 gerade dabei zu erstellen als unseren neuen Ganzzahl. 1419 01:12:22,150 --> 01:12:24,630 Das ist, was wir am Ende zurück. 1420 01:12:24,630 --> 01:12:30,110 Wir müssen über jedes Zeichen in gehen der String, weil wir festgestellt haben, 1421 01:12:30,110 --> 01:12:34,430 dass wir jeden berühren und dann zu unserem neuen Ganzzahl hinzufügen. 1422 01:12:34,430 --> 01:12:36,330 >> Aber wir können es nicht nur als eine Zahl hinzuzufügen. 1423 01:12:36,330 --> 01:12:38,270 Wir können nicht nur nehmen und 9 9 hinzufügen, um unsere ganze Zahl ist. 1424 01:12:38,270 --> 01:12:40,560 Es hängt davon ab, welchen Platz es ist in der Zeichenkette. 1425 01:12:40,560 --> 01:12:42,960 Wir gehen zu müssen, sich zu vermehren es eine Leistung von 10. 1426 01:12:42,960 --> 01:12:45,580 Denn das ist, wie Basis 10 Werke. 1427 01:12:45,580 --> 01:12:49,050 >> So werden wir die aktuelle zu bekommen Charakter, oder der tatsächliche integer 1428 01:12:49,050 --> 01:12:53,860 Nummer, durch Subtraktion Zeichen 0 9 von Charakter, wie wir mit haben 1429 01:12:53,860 --> 01:12:57,560 Subtrahieren Charakter Kapital A von Charakter, was auch immer wir in einem der hatte 1430 01:12:57,560 --> 01:12:58,120 Diese Probleme. 1431 01:12:58,120 --> 01:13:04,190 Also werden wir tatsächlich eine Zahl von 0 bis 9 gespeichert als reelle Zahl, und wir werden 1432 01:13:04,190 --> 01:13:07,590 multipliziert es mit einer Leistung von je 10 auf, wo wir in der Zeichenfolge sind. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Und dann werden wir es wieder hinzuzufügen in unser neues Integer-Variable. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Also, was wäre, würde aussehen werden - wir werden hier zu ziehen. 1437 01:13:37,890 --> 01:13:40,086 Wenn wir uns in der Zeichenfolge 90 bestanden - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [unverständlich]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON HIRSCHHORN: Aber atoi nimmt einen String. 1441 01:13:45,540 --> 01:13:46,350 So werden wir zu durchlaufen die Halte. 1442 01:13:46,350 --> 01:13:49,900 Wir werden in 90 übergeben bekommen. 1443 01:13:49,900 --> 01:13:51,540 Wir gehen von hinten nach vorne. 1444 01:13:51,540 --> 01:13:53,920 Wir nehmen die 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Es tut mir leid. 1446 01:13:55,080 --> 01:13:55,880 Vielleicht ist das dumm. 1447 01:13:55,880 --> 01:13:59,440 Wenn wir Sie in einem String übergeben, warum ist 90, was wir sind 1448 01:13:59,440 --> 01:14:00,260 Anfang in geben? 1449 01:14:00,260 --> 01:14:03,160 Da 90 eine ganze Zahl ist. 1450 01:14:03,160 --> 01:14:06,820 >> JASON HIRSCHHORN: Da findet ein atoi String und wandelt es in der Integer 1451 01:14:06,820 --> 01:14:08,320 Darstellung dieser Zeichenfolge. 1452 01:14:08,320 --> 01:14:13,650 Aber die Saite 90 nicht die ganze Zahl 90 oder die Zahl 90. 1453 01:14:13,650 --> 01:14:17,920 Die Saite 90 ist eine Anordnung von zwei oder drei Zeichen vielmehr die 9 1454 01:14:17,920 --> 01:14:22,740 Charakter, der 0-Charakter, und der Backslash 0 Charakter. 1455 01:14:22,740 --> 01:14:26,260 >> Und wir schreiben atoi, weil für Wenn Sie beispielsweise den Befehl nehmen 1456 01:14:26,260 --> 01:14:30,230 Zeilenargument, und es ist in gespeichert argv, ist es als String gespeichert. 1457 01:14:30,230 --> 01:14:32,940 Aber wenn Sie ihn als Zahl behandelt werden sollen, Sie es ein konvertieren 1458 01:14:32,940 --> 01:14:34,700 Ist Ganzzahl. 1459 01:14:34,700 --> 01:14:37,210 Was wir haben ein Problem unserer Sets. 1460 01:14:37,210 --> 01:14:38,800 Was wir in einer Reihe haben unseres Problems Sets. 1461 01:14:38,800 --> 01:14:41,690 Jeder, der eine ganze Zahl nahm als Befehlszeilenargument. 1462 01:14:41,690 --> 01:14:46,490 Also das ist, warum unsere Funktion atoi nimmt einen String. 1463 01:14:46,490 --> 01:14:51,910 >> Also noch einmal, in unserem Beispiel hier, wir sind gehen, um die letzte zu nehmen. 1464 01:14:51,910 --> 01:14:55,050 Wir werden den Charakter subtrahieren 0 von ihm, denn die Zeichen 0 1465 01:14:55,050 --> 01:14:58,810 durch das Zeichen 0 subtrahiert, gibt Ihnen die tatsächliche Zahl 0, nach 1466 01:14:58,810 --> 01:15:00,950 der ASCII-Mathematik, die wir tun. 1467 01:15:00,950 --> 01:15:04,870 >> Da Zeichen als dargestellt anders als ihre eigentliche - der 1468 01:15:04,870 --> 01:15:08,830 Zeichen einer beispiels, Kleinbuchstaben a 97. 1469 01:15:08,830 --> 01:15:10,260 Es ist nicht - oops! 1470 01:15:10,260 --> 01:15:13,290 Es ist nicht, was man erwarten würde es ist, 0, zum Beispiel. 1471 01:15:13,290 --> 01:15:16,200 So zu subtrahieren, müssen Sie die Zeichen a auf 0 zu bekommen. 1472 01:15:16,200 --> 01:15:18,950 >> So werden wir das hier tun um die tatsächliche Anzahl zu erhalten. 1473 01:15:18,950 --> 01:15:22,560 Und dann werden wir es multiplizieren eine Leistung von 10, je nachdem, wo es 1474 01:15:22,560 --> 01:15:27,030 ist in der Zeichenfolge, und dann nehmen, dass und es um unsere Platzhalter hinzufügen 1475 01:15:27,030 --> 01:15:32,520 variabel, so dass wir mit oben kommen unsere letzte neue Ganzzahl. 1476 01:15:32,520 --> 01:15:35,080 Heißt das, macht es Sinn, alle? 1477 01:15:35,080 --> 01:15:37,730 >> So werden wir nicht gehen, um diesen Code gerade jetzt, weil wir 1478 01:15:37,730 --> 01:15:38,830 immer wenig Zeit. 1479 01:15:38,830 --> 01:15:40,860 Ich entschuldige mich für den Zeitpunkt dafür. 1480 01:15:40,860 --> 01:15:44,620 Aber das ist, was hoffentlich würden Sie der Lage, auf das Quiz zu tun - bei der 1481 01:15:44,620 --> 01:15:47,710 dest, bekommen diese Pseudo ausgeschrieben. 1482 01:15:47,710 --> 01:15:50,840 >> Und dann, wenn wir schreiben, die Pseudocode, eigentlich könnten wir dies tun 1483 01:15:50,840 --> 01:15:51,490 ziemlich schnell. 1484 01:15:51,490 --> 01:15:55,230 Jede Zeile der Kommentare, die wir schrieben wir hier übersetzt in etwa 1485 01:15:55,230 --> 01:15:56,970 eine Linie von C-Code. 1486 01:15:56,970 --> 01:16:01,780 Deklarieren Sie eine neue Variable, Schreiben eine Schleife, einige Subtraktion, einige 1487 01:16:01,780 --> 01:16:07,070 Multiplikation und einige Vergabe. 1488 01:16:07,070 --> 01:16:09,020 Wir würden wahrscheinlich auch zu wollen, einen Rücklauf. 1489 01:16:09,020 --> 01:16:12,040 Wir möchten vielleicht auch zu setzen einige Prüfungen hier. 1490 01:16:12,040 --> 01:16:12,655 Ja. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: So können wir behandeln s als der eigentliche String? 1492 01:16:15,720 --> 01:16:18,730 Weil ich weiß, es ist nur eine Adresse. 1493 01:16:18,730 --> 01:16:22,090 Wie, wie würden Sie die Länge der zu der String durchlaufen wird? 1494 01:16:22,090 --> 01:16:25,310 >> JASON HIRSCHHORN: Also wie hat die Länge eines Strings? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENT: strlen, ja. 1497 01:16:26,660 --> 01:16:30,550 Aber können Sie setzen, wie die s Argument für das? 1498 01:16:30,550 --> 01:16:34,620 >> JASON HIRSCHHORN: Also strlen nimmt ein char Stern. 1499 01:16:34,620 --> 01:16:38,090 Und es folgt, dass char Stern, und es Zählen hält, bis es zu einem 1500 01:16:38,090 --> 01:16:41,865 0 Backslash. strlen war eigentlich eines der anderen Programme, die wir 1501 01:16:41,865 --> 01:16:42,850 wurden, um Code geht. 1502 01:16:42,850 --> 01:16:44,560 Das ist ein weiterer guter Code. 1503 01:16:44,560 --> 01:16:47,270 Das hier ist ein bisschen einfacher, denn wenn Sie gehen an das denken sind 1504 01:16:47,270 --> 01:16:47,830 konzeptionell - 1505 01:16:47,830 --> 01:16:51,620 Ich sagte, es ist nur laut - strlen folgt ein Zeiger und läuft weiter und 1506 01:16:51,620 --> 01:16:54,210 Zählen und die Verfolgung bis Sie einen Backslash 0 zu erreichen. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, es bekam. 1508 01:16:56,530 --> 01:17:00,200 >> JASON HIRSCHHORN: Also am besten von Glück auf 0 Quiz morgen. 1509 01:17:00,200 --> 01:17:03,170 Wenn Sie Fragen haben, werde ich draußen sein nach diesem. 1510 01:17:03,170 --> 01:17:05,610 Fühlen Sie sich frei, mich zu mailen. 1511 01:17:05,610 --> 01:17:08,480 Erreichen Sie Ihre eigenen TF, wenn Sie nicht in meinem Bereich oder meine 1512 01:17:08,480 --> 01:17:10,005 E-Mail, wenn Sie es wollen. 1513 01:17:10,005 --> 01:17:13,140 >> Wenn Sie ausflippen wollen, und schicken Sie mir eine E-Mail, eine E-Mail freakout, werde ich 1514 01:17:13,140 --> 01:17:16,710 senden Sie zurück, wie, ein Smiley-Gesicht, oder, wie, ein Witz oder so etwas. 1515 01:17:16,710 --> 01:17:18,190 So fühlen sich frei, um das auch zu tun. 1516 01:17:18,190 --> 01:17:20,750 Viel Glück wieder, und ich werde sehen Sie alle nächste Woche. 1517 01:17:20,750 --> 01:17:23,435