1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID MALAN: Hallo, und Willkommen zurück auf CS50. 3 00:00:13,260 --> 00:00:14,860 Das ist also das Ende der vierten Woche. 4 00:00:14,860 --> 00:00:16,680 Nur eine Ankündigung zuerst. 5 00:00:16,680 --> 00:00:19,600 Also die sogenannte fünfte Montag kommen bis kommenden Montag. 6 00:00:19,600 --> 00:00:22,800 Dies ist die Gelegenheit, um aus ändern SAT / UNSAT auf einen Brief grade, oder von 7 00:00:22,800 --> 00:00:24,130 Brief Grade SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Dummerweise funktioniert das Verfahren erfordern eine Unterschrift, weil Sie zu füllen 9 00:00:27,130 --> 00:00:28,770 aus einer jener rosa Add / Drop-Formen. 10 00:00:28,770 --> 00:00:31,680 >> Denn technisch gesehen, die SAT / UNSAT Version und der Brief Grade-Version 11 00:00:31,680 --> 00:00:33,320 haben unterschiedliche Katalognummern. 12 00:00:33,320 --> 00:00:34,240 Aber keine große Sache. 13 00:00:34,240 --> 00:00:36,620 Kommen Sie einfach zu mir oder zu berauben oder Lauren an einer beliebigen Stelle. 14 00:00:36,620 --> 00:00:39,550 Oder mailen Sie uns, wenn Sie nicht über die Art Papierkram Sie heute benötigen, und wir 15 00:00:39,550 --> 00:00:43,410 wird sicher sein, damit Sie die kümmern, dass vor Montag. 16 00:00:43,410 --> 00:00:45,780 >> Alles klar, also heute - 17 00:00:45,780 --> 00:00:47,630 Eigentlich gibt es so etwas wie ein Echo. 18 00:00:47,630 --> 00:00:51,070 Können wir Ton mich ein wenig nach unten? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Also heute, führen wir ein Thema bekannt als Zeiger. 21 00:00:54,850 --> 00:00:57,770 Und ich gebe zu, dass dies eine der ist komplexere Themen, die wir dazu neigen, 22 00:00:57,770 --> 00:01:00,960 decken in dieser Klasse, oder wirklich jede Einführungskurs die C verwendet 23 00:01:00,960 --> 00:01:05,510 >> Aber nehmen Sie mein Wort für sie, vor allem wenn dein Geist fühlt sich ein bisschen mehr gebogen 24 00:01:05,510 --> 00:01:07,100 heute und in den kommenden Wochen. 25 00:01:07,100 --> 00:01:10,340 Es ist nicht repräsentativ für Sie immer noch schlimmer an dieser es bedeutet nur, dass 26 00:01:10,340 --> 00:01:13,360 es ist eine besonders anspruchsvolle Thema Ich verspreche, dass, ein paar Wochen 27 00:01:13,360 --> 00:01:17,610 Daher wird allzu auffallend scheinen einfach im Nachhinein. 28 00:01:17,610 --> 00:01:18,720 >> Ich habe noch bis zum heutigen Tag erinnern. 29 00:01:18,720 --> 00:01:22,190 Ich war in Elliott Dining Hall sitzt, sitzt neben meiner TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 wer war ein Bewohner von Elliott Haus. 31 00:01:24,070 --> 00:01:26,340 Und aus irgendeinem Grund, diese Thema gerade klickt. 32 00:01:26,340 --> 00:01:29,430 Welches ist zu sagen, dass ich zu kämpfen mit ihm für eine gewisse Zeit, aber ich 33 00:01:29,430 --> 00:01:33,610 werde mein Bestes tun, um zu vermeiden, eine solche Kampf mit einem Thema, das letztlich 34 00:01:33,610 --> 00:01:34,580 ist sehr mächtig. 35 00:01:34,580 --> 00:01:37,350 >> In der Tat, eines der Themen, die wir besprechen in den kommenden Wochen ist, dass 36 00:01:37,350 --> 00:01:41,130 der Sicherheit, und wie Sie tatsächlich nutzen Maschinen in einer Weise 37 00:01:41,130 --> 00:01:42,320 Das waren nicht vorgesehen. 38 00:01:42,320 --> 00:01:45,850 Und diese sind in der Regel exploitations das Ergebnis der Fehler, Fehler, die wir 39 00:01:45,850 --> 00:01:49,740 Menschen machen, indem nicht das Verständnis einiger der zugrunde liegende Implementierung 40 00:01:49,740 --> 00:01:52,250 Details über die Programme gemacht werden. 41 00:01:52,250 --> 00:01:55,410 >> Nun, dies zu machen scheinen umso Benutzer freundlich, ich dachte, ich würde eine 10 spielen 42 00:01:55,410 --> 00:01:59,680 zweite Vorschau auf ein wenig claymation Figur namens Binky, die gebracht wurde 43 00:01:59,680 --> 00:02:03,020 Leben von einem Freund von uns in Stanford, Professor Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 So erlauben Sie mir, Ihnen diese Teaser Binky hier. 45 00:02:06,753 --> 00:02:09,520 >> [VIDEO PLAYBACK] 46 00:02:09,520 --> 00:02:10,380 >> -Hey, Binky. 47 00:02:10,380 --> 00:02:11,050 Aufwachen. 48 00:02:11,050 --> 00:02:13,610 Es ist Zeit für Zeiger Spaß. 49 00:02:13,610 --> 00:02:14,741 >> -Was ist das? 50 00:02:14,741 --> 00:02:16,440 Erfahren Sie mehr über Zeiger? 51 00:02:16,440 --> 00:02:17,928 Oh, Goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END VIDEO PLAYBACK] 53 00:02:18,920 --> 00:02:20,670 >> DAVID MALAN: Das Stanford ist Informatik. 54 00:02:20,670 --> 00:02:23,194 Also mehr dazu kommen. 55 00:02:23,194 --> 00:02:24,930 >> [Applaus] 56 00:02:24,930 --> 00:02:26,660 >> DAVID MALAN: Sorry, Nick. 57 00:02:26,660 --> 00:02:30,680 >> So erinnern daran, dass wir das letzte Mal am Ende das wirklich spannende Cliffhanger 58 00:02:30,680 --> 00:02:32,960 wobei diese Funktion einfach nicht funktioniert. 59 00:02:32,960 --> 00:02:34,960 Mindestens intuitiv, es fühlte sich wie sollte es funktionieren. 60 00:02:34,960 --> 00:02:37,600 Einfach das Vertauschen der Werte von zwei ganzen Zahlen. 61 00:02:37,600 --> 00:02:40,915 Aber daran erinnern, dass, wenn wir die ausgedruckt ursprünglichen Werte in Haupt-, Ein-und 62 00:02:40,915 --> 00:02:44,210 zwei, waren sie noch ein und zwei und zwei und eins. 63 00:02:44,210 --> 00:02:46,070 >> Lassen Sie mich also tatsächlich wechseln über dem Gerät. 64 00:02:46,070 --> 00:02:50,180 Und ich schrieb ein bisschen von Skelett-Code in voranzubringen hier, wo ich behaupten, dass x 65 00:02:50,180 --> 00:02:52,500 1 sein, wird y 2 sein. 66 00:02:52,500 --> 00:02:54,810 Ich habe dann ausdrucken beide ihre Werte mit Druck f. 67 00:02:54,810 --> 00:02:57,540 >> Ich dann behaupten, dass hier unten wir werden, um sie auszutauschen. 68 00:02:57,540 --> 00:03:00,800 Ich habe eine leere Stelle hier für uns füllen heute in nur einem Augenblick. 69 00:03:00,800 --> 00:03:03,380 Dann werde ich zu behaupten, dass die zwei Variablen wurden getauscht. 70 00:03:03,380 --> 00:03:04,770 Dann werde ich zum Drucken sie wieder heraus. 71 00:03:04,770 --> 00:03:07,090 Und so hoffentlich, muss ich sehen 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Das ist das super einfach Ziel zeigen. 74 00:03:09,830 --> 00:03:12,430 >> Wie können wir also über Swapping gehen zwei Variablen? 75 00:03:12,430 --> 00:03:17,220 Nun, wenn ich hier vorschlagen, dass diese Becher könnte Speicher in einem Computer darstellen. 76 00:03:17,220 --> 00:03:19,070 Dies ist ein paar Bissen, diese ist noch ein paar Bissen. 77 00:03:19,070 --> 00:03:23,260 Könnten wir ein Freiwilliger auf und sind gekommen, mischen uns ein paar Drinks, wenn das bekannt vor? 78 00:03:23,260 --> 00:03:23,920 Komm up. 79 00:03:23,920 --> 00:03:24,815 Wie ist dein Name? 80 00:03:24,815 --> 00:03:25,260 >> Jess: Jess. 81 00:03:25,260 --> 00:03:25,690 >> DAVID MALAN: Jess? 82 00:03:25,690 --> 00:03:26,540 Komm up, Jess. 83 00:03:26,540 --> 00:03:29,180 Wenn Sie nichts dagegen haben, müssen wir die Put- Google Glass auf Sie so können wir 84 00:03:29,180 --> 00:03:30,430 verewigen diese. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, Glas. 87 00:03:34,670 --> 00:03:37,250 Aufnehmen eines Videos. 88 00:03:37,250 --> 00:03:43,103 Und OK, wir sind gut zu gehen mit Jess hier. 89 00:03:43,103 --> 00:03:43,810 In Ordnung. 90 00:03:43,810 --> 00:03:45,120 Schön, Sie kennen zu lernen. 91 00:03:45,120 --> 00:03:47,720 >> Also, was ich möchte, dass du hier tun - wenn du könntest, recht schnell - 92 00:03:47,720 --> 00:03:51,040 nur gießt uns ein halbes Glas Orangensaft Saft und ein halbes Glas Milch, 93 00:03:51,040 --> 00:03:55,710 repräsentiert effektiv die Zahlen 1 in eine Tasse und 2 in der anderen Schale. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Das wird gut sein Filmmaterial. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> Jess: Es tut uns leid. 98 00:04:05,860 --> 00:04:06,330 >> DAVID MALAN: Nein, nein. 99 00:04:06,330 --> 00:04:08,703 Es ist OK. 100 00:04:08,703 --> 00:04:10,120 Nizza. 101 00:04:10,120 --> 00:04:12,950 Alles klar, also haben wir vier Bytes Wert von Orangensaft. 102 00:04:12,950 --> 00:04:14,460 Wir nannten es den Wert 1. 103 00:04:14,460 --> 00:04:16,579 Jetzt noch vier Bytes im Wert von Milch. 104 00:04:16,579 --> 00:04:18,519 Wird es nennen Wert 2 hat. 105 00:04:18,519 --> 00:04:20,440 So x und y. 106 00:04:20,440 --> 00:04:23,450 >> Alles klar, also jetzt, wenn die Aufgabe zur Hand - für Sie, Jess, vor allen 107 00:04:23,450 --> 00:04:24,270 Ihre Klassenkameraden - 108 00:04:24,270 --> 00:04:28,510 ist, um die Werte von x und y so tauschen dass wir wollen, dass die Orangensaft in die 109 00:04:28,510 --> 00:04:32,070 andere Tasse und die Milch in dieser Schale, wie könnten Sie - bevor Sie tatsächlich tun 110 00:04:32,070 --> 00:04:34,020 es - über das tun dies gehen? 111 00:04:34,020 --> 00:04:35,220 >> OK, weise Entscheidung. 112 00:04:35,220 --> 00:04:36,340 Sie müssen also ein bisschen mehr Speicher. 113 00:04:36,340 --> 00:04:38,190 Also lasst uns zuteilen eine temporäre Tasse, wenn man so will. 114 00:04:38,190 --> 00:04:40,540 Und jetzt gehen Sie nach x und y vertauschen. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Excellent. 117 00:04:53,530 --> 00:04:54,420 Also sehr gut gemacht. 118 00:04:54,420 --> 00:04:55,670 Vielen Dank, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Hier, bitte. 121 00:05:00,020 --> 00:05:01,950 Ein kleines Souvenir. 122 00:05:01,950 --> 00:05:04,350 >> OK, so offensichtlich, super einfache Idee. 123 00:05:04,350 --> 00:05:07,500 Ganz intuitiv, dass wir ein bisschen brauchen mehr Stauraum - in dieser Form 124 00:05:07,500 --> 00:05:09,750 a cup - wenn wir wirklich wollen, tauschen diese beiden Variablen. 125 00:05:09,750 --> 00:05:11,110 Also lasst uns genau das tun. 126 00:05:11,110 --> 00:05:14,330 Hier oben in zwischen, wo ich behaupte ich bin tun werden einige Swapping, werde ich 127 00:05:14,330 --> 00:05:15,720 gehen Sie vor und erklären Temp. 128 00:05:15,720 --> 00:05:17,980 Und ich werde es gleich gesetzt, sagen wir, x. 129 00:05:17,980 --> 00:05:21,110 >> Dann werde ich den Wert ändern x wie Jess hat hier mit dem 130 00:05:21,110 --> 00:05:23,200 Milch und Orangensaft um gleich y. 131 00:05:23,200 --> 00:05:27,460 Und ich werde y ändern, um gleich nicht x, weil wir jetzt wäre 132 00:05:27,460 --> 00:05:29,530 stecken in einem Kreis, sondern Temperaturber. 133 00:05:29,530 --> 00:05:33,170 Wo kann ich vorübergehend - oder wo Jess zeitweise gab Orangensaft 134 00:05:33,170 --> 00:05:35,460 vor clobbering dass Tasse mit der Milch. 135 00:05:35,460 --> 00:05:37,250 >> Also lass mich gehen jetzt und machen Sie diese. 136 00:05:37,250 --> 00:05:39,210 Es heißt noswap.c. 137 00:05:39,210 --> 00:05:41,190 Und jetzt lassen Sie mich laufen keine Swap. 138 00:05:41,190 --> 00:05:43,910 Und in der Tat sehe ich, wenn ich das erweitern Fenster ein wenig, dass 139 00:05:43,910 --> 00:05:45,160 x 1 ist, y 2. 140 00:05:45,160 --> 00:05:47,230 Und dann ist x 2 ist, y 1. 141 00:05:47,230 --> 00:05:51,910 >> Aber daran erinnern, dass wir am Montag, Dinge tat ein wenig anders, wobei ich 142 00:05:51,910 --> 00:05:56,760 Statt implementiert eine Hilfsfunktion, wenn man so will, das war eigentlich nichtig. 143 00:05:56,760 --> 00:05:58,010 Ich nannte es tauschen. 144 00:05:58,010 --> 00:06:01,600 Ich gab es zwei Parameter, und ich rief sie ein und ich nannte sie b. 145 00:06:01,600 --> 00:06:04,380 >> Ehrlich gesagt, könnte ich nenne sie x und y. 146 00:06:04,380 --> 00:06:06,040 Es gibt nichts zu stoppen mich zu tun. 147 00:06:06,040 --> 00:06:08,140 Aber ich würde behaupten, es ist dann ein wenig zweideutig. 148 00:06:08,140 --> 00:06:11,910 Weil Rückrufaktion für Montag, dass wir behauptet, dass diese Parameter waren 149 00:06:11,910 --> 00:06:13,650 Kopien der übergebenen Werte in. 150 00:06:13,650 --> 00:06:15,640 So ist es nur verwirrt mit Ihrem Geist, denke ich, wenn Sie 151 00:06:15,640 --> 00:06:17,370 genau die gleichen Variablen. 152 00:06:17,370 --> 00:06:20,150 >> Also werde ich stattdessen nennen sie ein und b, nur für Klarheit. 153 00:06:20,150 --> 00:06:21,840 Aber wir könnten sie am meisten alles, was wir wollen. 154 00:06:21,840 --> 00:06:26,280 Und ich werde das Kopieren und Einfügen effektiv dieser Code von dort oben 155 00:06:26,280 --> 00:06:27,170 hinunter in hier. 156 00:06:27,170 --> 00:06:29,110 Weil ich gerade gesehen, dass es funktioniert. 157 00:06:29,110 --> 00:06:30,790 Also das ist ziemlich gut in Form. 158 00:06:30,790 --> 00:06:37,390 Und ich werde mein x auf eine, mein x ändern ein, mein y b und mein y zu b. 159 00:06:37,390 --> 00:06:39,130 >> Mit anderen Worten, genau die gleiche Logik. 160 00:06:39,130 --> 00:06:40,850 Die exakt gleiche Sache, dass Jess tat. 161 00:06:40,850 --> 00:06:44,350 Und dann das einzige, was ich tun muss, bis hier, natürlich, wird nun diese aufrufen 162 00:06:44,350 --> 00:06:45,990 Funktion oder rufen Sie diese Funktion. 163 00:06:45,990 --> 00:06:50,430 Also werde ich diese Funktion mit zwei nennen Eingänge, x und y, und drücken Sie auf Speichern. 164 00:06:50,430 --> 00:06:52,300 >> Alles klar, also grundlegend dasselbe. 165 00:06:52,300 --> 00:06:55,570 In der Tat habe ich wahrscheinlich das Programm gemacht unnötig kompliziert durch 166 00:06:55,570 --> 00:07:00,820 Schreiben Sie eine Funktion, die gerade dabei ist etwa sechs Codezeilen während ich 167 00:07:00,820 --> 00:07:02,970 zuvor umgesetzt dies in nur drei. 168 00:07:02,970 --> 00:07:06,230 >> Also lassen Sie mich jetzt gehen Sie vor und Remake dies, machen keinen Swap. 169 00:07:06,230 --> 00:07:07,920 Alles klar, schraubte ich hier oben. 170 00:07:07,920 --> 00:07:11,290 Dies sollte ein Fehler sein, dass Sie vielleicht sehen zunehmend häufig als 171 00:07:11,290 --> 00:07:12,380 Programme werden immer komplexer. 172 00:07:12,380 --> 00:07:13,470 Aber es gibt eine einfache Lösung. 173 00:07:13,470 --> 00:07:15,650 Lassen Sie mich zurück blättern hier. 174 00:07:15,650 --> 00:07:18,190 >> Und was ist der erste Fehler, den ich sehe? 175 00:07:18,190 --> 00:07:19,520 Implizite Deklaration. 176 00:07:19,520 --> 00:07:21,466 Was bedeutet das in der Regel an? 177 00:07:21,466 --> 00:07:22,830 Oh, ich vergaß, den Prototyp. 178 00:07:22,830 --> 00:07:26,900 Ich habe vergessen, den Compiler zu lehren, dass Swap wird zu existieren, obwohl er 179 00:07:26,900 --> 00:07:28,920 nicht am Anfang vorhanden des Programms. 180 00:07:28,920 --> 00:07:35,780 Also ich bin gerade dabei, Leere, Swap sagen, int, int a b, Semikolon. 181 00:07:35,780 --> 00:07:37,280 >> Also ich bin nicht dabei, es neu zu implementieren. 182 00:07:37,280 --> 00:07:39,140 Aber jetzt passt es, was hier unten. 183 00:07:39,140 --> 00:07:42,530 Und beachten Sie, das Fehlen von einem Semikolon hier ist das nicht notwendig, wenn 184 00:07:42,530 --> 00:07:43,200 Umsetzung. 185 00:07:43,200 --> 00:07:46,010 >> Also lassen Sie mich dieses Remake, keinen Swap. 186 00:07:46,010 --> 00:07:46,910 Viel besser in Form. 187 00:07:46,910 --> 00:07:48,130 Führen Sie keine Swap. 188 00:07:48,130 --> 00:07:48,740 Und verdammt noch mal. 189 00:07:48,740 --> 00:07:51,650 Jetzt sind wir wieder da, wo wir am Montag waren, wo das Ding nicht tauschen. 190 00:07:51,650 --> 00:07:55,410 >> Und was ist der intuitive Erklärung dafür, warum dies der Fall ist? 191 00:07:55,410 --> 00:07:56,380 Ja? 192 00:07:56,380 --> 00:07:57,630 >> STUDENT: [unverständlich]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID MALAN: Genau. 195 00:08:05,230 --> 00:08:07,330 So a und b sind Kopien von x und y. 196 00:08:07,330 --> 00:08:10,680 Und in der Tat, jedes Mal, du warst Aufruf einer Funktion so weit, dass 197 00:08:10,680 --> 00:08:12,540 übergibt Variablen wie ints - 198 00:08:12,540 --> 00:08:14,470 nur als Swap wird hier erwartet - 199 00:08:14,470 --> 00:08:16,270 Sie Jungs haben in Exemplaren vorbei. 200 00:08:16,270 --> 00:08:19,150 >> Nun, das bedeutet, es dauert ein wenig Zeit, den Bruchteil einer Sekunde, für die 201 00:08:19,150 --> 00:08:23,270 Computer, um die Bits von einem kopieren Variable in den Bits des anderen. 202 00:08:23,270 --> 00:08:24,610 Aber das ist nicht so eine große Sache. 203 00:08:24,610 --> 00:08:25,920 Aber sie sind dennoch eine Kopie. 204 00:08:25,920 --> 00:08:30,020 >> Und nun, im Rahmen der Swap- Ich bin in der Tat erfolgreich 205 00:08:30,020 --> 00:08:31,180 Ändern eines und b. 206 00:08:31,180 --> 00:08:33,000 In der Tat, wir tun, eine schnelle Plausibilitätsprüfung. 207 00:08:33,000 --> 00:08:36,830 Print f a ist% i, neue Zeile. 208 00:08:36,830 --> 00:08:38,770 Und lassen Sie den Stecker in eine. 209 00:08:38,770 --> 00:08:41,830 Jetzt machen wir dasselbe mit b. 210 00:08:41,830 --> 00:08:43,640 Und lassen Sie uns das gleiche tun hier. 211 00:08:43,640 --> 00:08:47,260 >> Und jetzt lassen Sie mich kopieren die gleichen Linien wieder an der Unterseite der Funktion 212 00:08:47,260 --> 00:08:51,250 nachdem meine drei Zeilen interessant konnte nicht ausgeführt haben und 213 00:08:51,250 --> 00:08:53,270 ausdrucken a und b noch einmal. 214 00:08:53,270 --> 00:08:56,030 So, jetzt lasst uns diese zu machen, machen Sie keinen Swap. 215 00:08:56,030 --> 00:08:58,430 Lassen Sie mich das Terminal-Fenster ein etwas größer, so dass wir sehen können 216 00:08:58,430 --> 00:08:59,520 mehr davon auf einmal. 217 00:08:59,520 --> 00:09:00,860 >> Und laufen keine Swap. 218 00:09:00,860 --> 00:09:04,000 x 1 ist, y 2. a 1 ist, b 2. 219 00:09:04,000 --> 00:09:06,070 Und dann, a 2 ist, b 1. 220 00:09:06,070 --> 00:09:09,390 Also es funktioniert, so wie Jess hat hier innerhalb von Swap. 221 00:09:09,390 --> 00:09:13,090 Aber natürlich ist es keine Wirkung auf die Variablen in main. 222 00:09:13,090 --> 00:09:15,360 >> So sahen wir einen Trick, wobei wir könnte dies zu beheben, nicht wahr? 223 00:09:15,360 --> 00:09:19,560 Wenn Sie mit dieser Scoping konfrontiert Problem, Sie könnten nur Kahn und machen x 224 00:09:19,560 --> 00:09:22,400 und y, welche Art von Variablen statt? 225 00:09:22,400 --> 00:09:23,390 >> Sie könnten sie global. 226 00:09:23,390 --> 00:09:27,560 Setzen Sie sie ganz am Anfang der Datei wie wir, auch im Spiel von 15 Jahren. 227 00:09:27,560 --> 00:09:28,890 Wir verwenden eine globale Variable. 228 00:09:28,890 --> 00:09:32,420 Aber im Zusammenhang mit dem Spiel eine 15, Es ist sinnvoll, einen globalen haben 229 00:09:32,420 --> 00:09:37,170 Variable, die den Vorstand, weil die Gesamtheit der 15.c ist alles 230 00:09:37,170 --> 00:09:38,650 über die Implementierung dieses Spiel. 231 00:09:38,650 --> 00:09:41,470 Das ist, was die Datei zu tun gibt. 232 00:09:41,470 --> 00:09:44,170 >> Aber in diesem Fall hier, ich bin Aufruf einer Funktion Swap. 233 00:09:44,170 --> 00:09:45,380 Ich möchte zwei Variablen vertauschen. 234 00:09:45,380 --> 00:09:48,950 Und es sollte beginnen zu fühlen, nur schlampig wenn die Lösung für alle unsere 235 00:09:48,950 --> 00:09:51,300 Probleme, wenn wir in den Bereich laufen Fragen ist es global. 236 00:09:51,300 --> 00:09:54,730 Da sehr schnell unser Programm gehen, um eine ziemliche Sauerei werden. 237 00:09:54,730 --> 00:09:57,760 Und wir haben das sehr sparsam als Ergebnis in 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Aber es stellt sich heraus, es gibt eine besser ganz. 239 00:10:00,470 --> 00:10:05,600 Lassen Sie mich tatsächlich zurück und löschen Sie die drucken f die, nur um diesen Code zu vereinfachen. 240 00:10:05,600 --> 00:10:09,160 Und lassen Sie mich vor, dies ist in der Tat schlecht. 241 00:10:09,160 --> 00:10:15,990 Aber wenn ich stattdessen in einigen Sternchen hinzufügen und Sterne, kann ich stattdessen machen diese 242 00:10:15,990 --> 00:10:18,670 Funktion in eine, die ist tatsächlich in Betrieb. 243 00:10:18,670 --> 00:10:25,020 >> Also lass mich gehen zurück und sagen zugeben Sternchen ist immer schwierig, 244 00:10:25,020 --> 00:10:26,170 so werde ich sagen Sterne. 245 00:10:26,170 --> 00:10:27,660 Ich werde einfach erzähl ihm, dass man. 246 00:10:27,660 --> 00:10:28,190 In Ordnung. 247 00:10:28,190 --> 00:10:30,190 Und nun, was soll ich stattdessen tun? 248 00:10:30,190 --> 00:10:34,130 >> Also zunächst einmal, ich werde angeben dass anstelle der Übergabe eines int in 249 00:10:34,130 --> 00:10:37,980 die Swap-Funktion, bin ich stattdessen zu gehen, int Sterne sagen. 250 00:10:37,980 --> 00:10:39,170 Nun, was die Sterne angeben? 251 00:10:39,170 --> 00:10:41,970 Dies ist die Vorstellung von einem Zeiger, Binky, die claymation Charakter, war 252 00:10:41,970 --> 00:10:43,465 Bezugnahme auf einen Moment vor. 253 00:10:43,465 --> 00:10:47,610 >> Also, wenn wir sagen, int Sterne, die Bedeutung von Das ist nun, dass eine ist nicht zu sein 254 00:10:47,610 --> 00:10:49,110 bestanden in durch seinen Wert. 255 00:10:49,110 --> 00:10:50,350 Es wird nicht in. kopiert werden 256 00:10:50,350 --> 00:10:54,700 Vielmehr ist die Adresse eines werde in. weitergegeben werden 257 00:10:54,700 --> 00:10:57,840 >> So erinnern daran, dass im Inneren des Computers ist eine ganze Reihe von Speicher, sonst 258 00:10:57,840 --> 00:10:58,760 bekannt als RAM. 259 00:10:58,760 --> 00:11:00,520 Und das ist nur ein RAM ganze Reihe von Bytes. 260 00:11:00,520 --> 00:11:03,320 Also, wenn Ihr Mac oder PC hat zwei Gigabyte, haben Sie 2 261 00:11:03,320 --> 00:11:05,760 Milliarden Byte Speicherplatz. 262 00:11:05,760 --> 00:11:08,440 >> Jetzt lasst uns einfach annehmen, dass nur die Dinge schön und ordentlich, wir 263 00:11:08,440 --> 00:11:09,450 eine Adresse zuweisen - 264 00:11:09,450 --> 00:11:10,170 eine Zahl - 265 00:11:10,170 --> 00:11:12,270 zu jedem Byte des RAM in Ihrem Computer. 266 00:11:12,270 --> 00:11:15,410 Die erste Byte von denen 2 Milliarden von Zahl Null. 267 00:11:15,410 --> 00:11:18,572 Der nächste ist Byte-Nummer eins, Nummer zwei, den ganzen Weg bis auf, dot dot 268 00:11:18,572 --> 00:11:20,530 punkt, um rund 2 Milliarden Euro. 269 00:11:20,530 --> 00:11:23,640 >> So können Sie Anzahl der Bytes Arbeitsspeicher in Ihrem Computer. 270 00:11:23,640 --> 00:11:26,460 Nehmen wir also an, dass das ist, was wir unter einer Adresse. 271 00:11:26,460 --> 00:11:31,360 Also, wenn ich sehe, int Sterne ein, was los ist in Swap bestanden jetzt ist die 272 00:11:31,360 --> 00:11:32,830 Adresse ein. 273 00:11:32,830 --> 00:11:37,150 Nicht der Wert, sondern unabhängig von ihrer Post Adresse ist, so zu sprechen - 274 00:11:37,150 --> 00:11:38,810 seine Lage im RAM. 275 00:11:38,810 --> 00:11:41,250 >> Und in ähnlicher Weise für b, ich werde um die gleiche Sache zu sagen. 276 00:11:41,250 --> 00:11:42,720 Int, star, b. 277 00:11:42,720 --> 00:11:46,350 Nebenbei, technisch den Stern könnte auch in anderen Orten zu gehen. 278 00:11:46,350 --> 00:11:50,140 Aber wir werden auf den Stern, wobei standardisieren direkt neben dem Datentyp. 279 00:11:50,140 --> 00:11:54,080 >> So tauschen Unterschrift bedeutet jetzt, gib mir die Adresse einer int, und rufen 280 00:11:54,080 --> 00:11:55,400 Diese Adresse ein. 281 00:11:55,400 --> 00:11:58,690 Und gib mir noch eine Adresse ein int und rufen Sie diese Adresse b. 282 00:11:58,690 --> 00:12:01,120 >> Aber jetzt mein Code hier muss sich ändern. 283 00:12:01,120 --> 00:12:03,470 Denn wenn ich erklären int Temp - 284 00:12:03,470 --> 00:12:05,580 Das ist immer noch der Typ int - 285 00:12:05,580 --> 00:12:08,700 aber ich speichern in es ein, welche Art von Wert? 286 00:12:08,700 --> 00:12:12,870 Um klar zu sein, setze ich ein a mit der Code geschrieben gerade jetzt? 287 00:12:12,870 --> 00:12:14,360 >> Ich stelle den Standort in ein. 288 00:12:14,360 --> 00:12:16,500 Aber ich weiß nicht über die Pflege Lage jetzt, nicht wahr? 289 00:12:16,500 --> 00:12:21,940 Temp existiert nur Jess 'dritte Tasse existierte, zu welchem ​​Zweck? 290 00:12:21,940 --> 00:12:23,090 Um einen Wert zu speichern. 291 00:12:23,090 --> 00:12:24,830 Milch oder Orangensaft. 292 00:12:24,830 --> 00:12:28,520 Nicht um tatsächlich speichern Sie die Adresse des entweder von diesen Dingen, fühlt sich das ein 293 00:12:28,520 --> 00:12:31,200 wenig unsinnig in dieser realen Welt Kontext sowieso. 294 00:12:31,200 --> 00:12:34,990 >> Also wirklich, was ich will, um in Temp setzen ist nicht die Adresse von A, aber der 295 00:12:34,990 --> 00:12:36,180 Inhalt einer. 296 00:12:36,180 --> 00:12:41,930 Also, wenn a eine Zahl wie 123, ist das 123. Byte Speicher, dass ein gerechter 297 00:12:41,930 --> 00:12:45,090 passiert zu sein Besatzungsmacht, dass der Wert in ein zufällig Besatzungsmacht. 298 00:12:45,090 --> 00:12:49,040 >> Wenn ich will, um an diese Adresse gehen, Ich muss sagen, ein Stern. 299 00:12:49,040 --> 00:12:52,610 Ebenso wenn ich zu ändern, was unter der Adresse ein, ändere ich 300 00:12:52,610 --> 00:12:53,570 diese zu starten ein. 301 00:12:53,570 --> 00:12:58,185 Wenn ich will, was ist im Laden Lage ein mit dem, was an der Stelle 302 00:12:58,185 --> 00:13:02,180 bei b, b-Sterne-Sterne-Hotel. 303 00:13:02,180 --> 00:13:05,340 >> Also kurz gesagt, auch wenn dies nicht ganz Einsinken noch - und ich würde nicht erwarten, 304 00:13:05,340 --> 00:13:06,560 dass es würde so schnell - 305 00:13:06,560 --> 00:13:11,100 erkennen, dass alles, was ich mache, ist das Präfix diese Sterne zu meinem Variablen 306 00:13:11,100 --> 00:13:13,350 Sprichwort greifen Sie nicht die Werte. 307 00:13:13,350 --> 00:13:14,520 Ändern Sie nicht die Werte. 308 00:13:14,520 --> 00:13:17,600 Sondern an diese Adressen gehen und erhalten Sie den Wert. 309 00:13:17,600 --> 00:13:21,430 Gehe zu dieser Adresse und Wandel der Wert gibt. 310 00:13:21,430 --> 00:13:25,500 >> So, jetzt lassen Sie mich zurück blättern bis an die Spitze, nur um diese Linie hier zu fixieren, um 311 00:13:25,500 --> 00:13:27,690 ändern Sie den Prototyp übereinstimmen. 312 00:13:27,690 --> 00:13:30,280 Aber ich muss nun eine andere Sache zu tun. 313 00:13:30,280 --> 00:13:35,500 Intuitiv, wenn ich die Typen geändert der Argumente, die Swap erwartet, 314 00:13:35,500 --> 00:13:37,245 Was brauche ich, um ändern in meinem Code? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Wenn ich Swap nennen. 317 00:13:40,840 --> 00:13:43,340 Denn gerade jetzt, was ich Ich Weitergabe noch tauschen? 318 00:13:43,340 --> 00:13:47,450 Der Wert x und der y-Wert, oder die Milch und der Orangensaft. 319 00:13:47,450 --> 00:13:48,510 Aber ich will nicht zu tun. 320 00:13:48,510 --> 00:13:51,060 Ich möchte stattdessen in dem, was passieren? 321 00:13:51,060 --> 00:13:53,050 Die Lage von x und die Position von Y. 322 00:13:53,050 --> 00:13:55,300 Was sind ihre Kontaktdaten wie Postanschriften, sozusagen. 323 00:13:55,300 --> 00:13:57,600 >> So zu tun, gibt es ein kaufmännisches. 324 00:13:57,600 --> 00:13:59,260 Ampersand Art klingt Adresse. 325 00:13:59,260 --> 00:14:03,240 so n, kaufmännisches, die Adresse von x und die Adresse y. 326 00:14:03,240 --> 00:14:06,790 So ist es, dass wir bewusst nutzen kaufmännische beim Aufruf der Funktion, 327 00:14:06,790 --> 00:14:10,230 und die Sterne bei der Deklaration und wenn Umsetzung der Funktion. 328 00:14:10,230 --> 00:14:14,220 >> Und gerade von kaufmännisches denken, wie die Anschrift des Betreibers, und Stern als die 329 00:14:14,220 --> 00:14:15,490 dorthin Betreiber - 330 00:14:15,490 --> 00:14:18,640 oder besser, die Dereferenzierungsoperator. 331 00:14:18,640 --> 00:14:23,480 Also das ist eine ganze Menge von Wörtern, nur um sagen, dass jetzt, hoffentlich, swap wird 332 00:14:23,480 --> 00:14:24,440 richtig zu sein. 333 00:14:24,440 --> 00:14:26,550 >> Lassen Sie mich voran gehen und - 334 00:14:26,550 --> 00:14:30,940 wir tatsächlich die Datei umbenennen, damit dieses Programm noch nicht genannt Swap werden. 335 00:14:30,940 --> 00:14:33,240 Ich behaupte, dass wir nennen es jetzt swap.c. 336 00:14:33,240 --> 00:14:35,670 So machen, tauschen. 337 00:14:35,670 --> 00:14:37,520 Dot, Slash, tauschen. 338 00:14:37,520 --> 00:14:40,210 >> Und jetzt ja x 1 ist, y 2. 339 00:14:40,210 --> 00:14:44,040 Und dann, x 2 ist, y ein. 340 00:14:44,040 --> 00:14:46,500 Nun lassen Sie uns sehen, ob wir nicht tun können, dieses eine wenig anders, was ist 341 00:14:46,500 --> 00:14:47,180 hier los ist. 342 00:14:47,180 --> 00:14:51,250 Lassen Sie mich zunächst vergrößern auf unserer Zeichnung Bildschirm hier. 343 00:14:51,250 --> 00:14:54,160 Und lassen Sie mich für einen Moment schlagen - und wenn ich hier ziehen wird gespiegelt werden 344 00:14:54,160 --> 00:14:58,660 jetzt da oben - lassen Sie mich schlagen vor, dass hier ist eine ganze Reihe von Speicher oder 345 00:14:58,660 --> 00:15:00,540 RAM, innerhalb meines Computers. 346 00:15:00,540 --> 00:15:04,140 >> Und dies wird Biss Zahl sein, sagen wir, 1. 347 00:15:04,140 --> 00:15:05,720 Dies wird bytes Nummer 2 sein. 348 00:15:05,720 --> 00:15:08,220 Und ich werde eine ganze Reihe mehr zu tun, und dann eine Reihe von Punkten zu dot dot 349 00:15:08,220 --> 00:15:10,880 zeigen, dass es 2 Mrd. von diesen Dingen. 350 00:15:10,880 --> 00:15:13,520 4, 5, und so weiter. 351 00:15:13,520 --> 00:15:17,055 >> So gibt es die ersten fünf Bytes meiner Arbeitsspeicher des Computers. 352 00:15:17,055 --> 00:15:17,560 Alles klar? 353 00:15:17,560 --> 00:15:19,060 Sehr wenige von insgesamt 2 Milliarden Euro. 354 00:15:19,060 --> 00:15:21,120 Aber jetzt werde ich vorschlagen der folgende. 355 00:15:21,120 --> 00:15:27,490 Ich werde vorschlagen, dass x zu gehen speichern die Zahl 1, und y wird 356 00:15:27,490 --> 00:15:29,690 um die Nummer 2 zu speichern. 357 00:15:29,690 --> 00:15:35,000 Und lassen Sie mich jetzt gehen und stellt diese Werte wie folgt. 358 00:15:35,000 --> 00:15:41,510 >> Wir tun dies wie folgt. 359 00:15:41,510 --> 00:15:42,870 Gib mir nur eine Sekunde. 360 00:15:42,870 --> 00:15:44,150 Eine Sekunde. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Ich möchte diese ein wenig zu machen - 363 00:15:47,560 --> 00:15:50,440 lasst uns wieder tun. 364 00:15:50,440 --> 00:15:53,250 Ansonsten bin ich zu gehen und mit Hilfe der gleichen Zahlen, unabsichtlich, 365 00:15:53,250 --> 00:15:54,230 mehrfach. 366 00:15:54,230 --> 00:15:57,320 >> Also nur so haben wir verschiedene Zahlen darüber zu sprechen, nennen wir dieses Byte 367 00:15:57,320 --> 00:16:03,391 Nummer 123, 124, 125, 126, und dot dot dot. 368 00:16:03,391 --> 00:16:08,400 Und lassen Sie mich jetzt behaupten, dass ich zu gehen setzen den Wert 1 hier, und den Wert 2 369 00:16:08,400 --> 00:16:11,990 hier auch als x und y bezeichnet. 370 00:16:11,990 --> 00:16:15,300 So ist es einfach so passiert, dass dies ist x, y ist. 371 00:16:15,300 --> 00:16:18,180 >> Und nur durch einige zufällige Chance, die Computer, das Betriebssystem, 372 00:16:18,180 --> 00:16:21,890 passiert an der Stelle x setzen Nummer 123. 373 00:16:21,890 --> 00:16:25,590 Und y endete an der Stelle 124 - 374 00:16:25,590 --> 00:16:26,330 verdammt. 375 00:16:26,330 --> 00:16:28,700 Ich sollte dieses Problem behoben haben. 376 00:16:28,700 --> 00:16:34,040 Oh Mann, ich wirklich wollen, dies zu tun? 377 00:16:34,040 --> 00:16:37,340 Ja, ich möchte dies und beheben b ordnungsgemäße heute darüber. 378 00:16:37,340 --> 00:16:39,950 Sorry, neu in diesem. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, und ich wollte nicht das sein komplex, aber warum habe ich das ändern 380 00:16:45,020 --> 00:16:46,340 Zahlen gibt es? 381 00:16:46,340 --> 00:16:48,360 Weil ich möchte, dass die ints zu tatsächlich vier Bytes. 382 00:16:48,360 --> 00:16:49,810 Lassen Sie uns also über diese Super anal sein. 383 00:16:49,810 --> 00:16:53,800 So dass, wenn 1 geschieht behandelt werden 123, wird die 2 in Zukunft an-Adresse sein 384 00:16:53,800 --> 00:16:55,730 127, weil es nur 4 byes entfernt. 385 00:16:55,730 --> 00:16:56,210 Das ist alles. 386 00:16:56,210 --> 00:16:58,640 Und wir werden über all das vergessen andere Adressen in der Welt. 387 00:16:58,640 --> 00:17:03,320 >> So ist an der Stelle x 123, y ist an der Stelle 127. 388 00:17:03,320 --> 00:17:05,770 Und nun, was mache ich eigentlich wollen Sie tun? 389 00:17:05,770 --> 00:17:10,099 Wenn ich Swap rufen jetzt an, was eigentlich los? 390 00:17:10,099 --> 00:17:14,920 Nun, als ich Swap nennen, ich bin im Vorbeigehen die Adresse x und die Adresse y. 391 00:17:14,920 --> 00:17:18,540 So zum Beispiel, wenn diese beiden Teile Papier stellen nun die beiden 392 00:17:18,540 --> 00:17:23,510 Argumente a und b zu tauschen, was bin ich gehen auf die erste von ihnen zu schreiben, 393 00:17:23,510 --> 00:17:27,720 was ich werde rufen beziehen, wie ein? 394 00:17:27,720 --> 00:17:30,610 >> Genau, 123. 395 00:17:30,610 --> 00:17:31,905 Also das ist ein Ich behaupte. 396 00:17:31,905 --> 00:17:32,955 Dies ist der Parameter ein. 397 00:17:32,955 --> 00:17:35,856 Ich setze die Adresse x drin. 398 00:17:35,856 --> 00:17:38,152 >> Was ist das? 399 00:17:38,152 --> 00:17:40,890 >> Was ist das? 400 00:17:40,890 --> 00:17:41,190 >> Nein, nein. 401 00:17:41,190 --> 00:17:41,720 Das ist OK. 402 00:17:41,720 --> 00:17:42,570 Immer noch gut, immer noch gut. 403 00:17:42,570 --> 00:17:43,530 Das ist also ein. 404 00:17:43,530 --> 00:17:46,240 Und jetzt auf dem zweiten Blatt Papier, das wird b, und was bin ich 405 00:17:46,240 --> 00:17:49,010 gehen auf sein Schreiben dieses Stück Papier? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Also das einzige, was sich geändert hat seit unsere bisherigen Erzählen dieser Geschichte ist, 408 00:17:53,720 --> 00:17:58,590 anstatt buchstäblich 1 und 2, ich bin gehen, um in 123 und 127 passieren. 409 00:17:58,590 --> 00:18:02,130 Und ich gehe jetzt, um diese nach innen setzen von dieser Box, alles in Ordnung? 410 00:18:02,130 --> 00:18:04,640 So, dass Black Box stellt nun die Swap-Funktion. 411 00:18:04,640 --> 00:18:07,230 >> Inzwischen haben wir uns jetzt jemand Umsetzung der Swap-Funktion. 412 00:18:07,230 --> 00:18:09,090 Wäre jemand hier oben gerne freiwillig? 413 00:18:09,090 --> 00:18:09,560 Komm up. 414 00:18:09,560 --> 00:18:11,080 Wie ist dein Name? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Alles klar, Charlie. 417 00:18:12,080 --> 00:18:14,810 Komm up. 418 00:18:14,810 --> 00:18:17,310 >> So Charlie spielen wird die Rolle der Black Box. 419 00:18:17,310 --> 00:18:21,460 Und Charlie, was ich möchte, dass Sie tun Jetzt ist Swap so umsetzen 420 00:18:21,460 --> 00:18:25,320 dass angesichts dieser beiden Adressen Sie wurden eigentlich los 421 00:18:25,320 --> 00:18:26,330 , um die Werte zu ändern. 422 00:18:26,330 --> 00:18:28,290 Und ich werde in dein Ohr flüstern wie die TV hier laufen. 423 00:18:28,290 --> 00:18:29,930 >> Also los, und du bist der Blackbox. 424 00:18:29,930 --> 00:18:30,920 Reichweite drin. 425 00:18:30,920 --> 00:18:34,054 Welche Werte haben Sie für ein zu sehen, und welche Werte Sie für b sehen? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: a 123 und b 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID MALAN: OK, genau. 428 00:18:37,530 --> 00:18:38,940 Jetzt gibt es eine Pause für einen Moment. 429 00:18:38,940 --> 00:18:41,680 Das erste, was Sie jetzt tun wollen, entsprechend dem Code - die 430 00:18:41,680 --> 00:18:43,220 Ich werde jetzt nach oben ziehen auf dem Bildschirm - 431 00:18:43,220 --> 00:18:46,750 sein wird, um ein wenig verteilen wenig Speicher namens Temp. 432 00:18:46,750 --> 00:18:48,850 Also werde ich weitermachen und Ihnen, dass der Speicher. 433 00:18:48,850 --> 00:18:52,210 >> Also das wird eine dritte Variable Sie haben Zugang zu 434 00:18:52,210 --> 00:18:54,080 Sie rief Temp. 435 00:18:54,080 --> 00:18:57,120 Und was willst du schreiben auf dem Temp Stück Papier? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Zeiger, nicht wahr? 438 00:19:03,470 --> 00:19:04,790 >> DAVID MALAN: OK, gut nicht unbedingt Zeigern. 439 00:19:04,790 --> 00:19:07,230 Also die Codezeile, dass ich hervorgehoben auf der rechten Seite, 440 00:19:07,230 --> 00:19:07,900 Beginnen wir dort. 441 00:19:07,900 --> 00:19:08,890 Er sagt, ein Stern. 442 00:19:08,890 --> 00:19:11,670 So ist derzeit eine Speicherung die Zahl 123. 443 00:19:11,670 --> 00:19:16,660 Und gerade intuitiv, was hat 123 Sterne bedeuten? 444 00:19:16,660 --> 00:19:21,630 >> Aber speziell, wenn a 123, bedeutet Stern was? 445 00:19:21,630 --> 00:19:22,560 Der Wert von a. 446 00:19:22,560 --> 00:19:24,580 Oder eher beiläufig, dorthin zu gehen. 447 00:19:24,580 --> 00:19:28,620 Also lassen Sie mich schlagen, dass ein Halten der in Ihre Hand, gehen Sie vor und behandeln, dass 448 00:19:28,620 --> 00:19:29,430 als ob es eine Karte. 449 00:19:29,430 --> 00:19:32,940 Und gehen Sie über den Computer Speicher und finden uns, was 450 00:19:32,940 --> 00:19:36,520 an Position 123. 451 00:19:36,520 --> 00:19:37,720 Genau. 452 00:19:37,720 --> 00:19:41,100 >> Also haben wir an der Stelle 123 zu sehen ist das, was offensichtlich? 453 00:19:41,100 --> 00:19:44,240 OK, also was Wert jetzt bist du werde in Temp setzen? 454 00:19:44,240 --> 00:19:44,750 Genau. 455 00:19:44,750 --> 00:19:45,600 So gehen Sie vor und tun. 456 00:19:45,600 --> 00:19:51,280 Und schreiben Sie die Nummer 1 auf dem Stück Papier, das derzeit Temp ist betitelt. 457 00:19:51,280 --> 00:19:53,540 >> Und nun der nächste Schritt, dass du gehst zu implementieren 458 00:19:53,540 --> 00:19:54,310 wird, was sein. 459 00:19:54,310 --> 00:19:57,820 Nun, auf der rechten Seite des nächste Codezeile ist star b. b, der 460 00:19:57,820 --> 00:19:59,260 Natürlich speichert eine Adresse. 461 00:19:59,260 --> 00:20:02,270 Das 127 Adressen. 462 00:20:02,270 --> 00:20:06,620 Stern b bedeutet, was, salopp gesagt? 463 00:20:06,620 --> 00:20:08,700 >> Gehen Sie zu dieser Stelle. 464 00:20:08,700 --> 00:20:14,988 So gehen Sie vor und finden uns, was an Position 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Natürlich an der Stelle 127, noch den Wert 2. 467 00:20:19,170 --> 00:20:24,060 Also, was willst du jetzt lagern bei was auch immer ist an der Stelle in ein? 468 00:20:24,060 --> 00:20:26,860 So star ein Mittel, um den Standort einer gehen. 469 00:20:26,860 --> 00:20:29,770 Was ist die Lage ein? 470 00:20:29,770 --> 00:20:30,430 >> Genau. 471 00:20:30,430 --> 00:20:34,190 So jetzt, wenn Sie ändern möchten, Was ist an dieser Stelle - 472 00:20:34,190 --> 00:20:36,470 Ich werde weitermachen und laufen der Radiergummi sind hier. 473 00:20:36,470 --> 00:20:37,760 Und nun legte sie zurück auf die Bürste. 474 00:20:37,760 --> 00:20:42,190 Welche Zahl wollen Sie schreiben in diesem leeren Kasten jetzt? 475 00:20:42,190 --> 00:20:42,850 >> Genau. 476 00:20:42,850 --> 00:20:46,470 Also diese Codezeile, klar zu sein - lassen mich anhalten, was Charlie tun und 477 00:20:46,470 --> 00:20:51,730 hier darauf hinweisen, was er gerade getan ist schreiben in diesem Feld an Position 123 478 00:20:51,730 --> 00:20:55,150 der Wert, der zuvor bei b war. 479 00:20:55,150 --> 00:20:59,140 Und so haben wir jetzt umgesetzt Tat Diese zweite Code. 480 00:20:59,140 --> 00:21:01,920 >> Nun leider ist noch eine Zeile übrig. 481 00:21:01,920 --> 00:21:04,900 Nun, was ist in temp, wörtlich? 482 00:21:04,900 --> 00:21:06,200 Es ist natürlich die Nummer eins. 483 00:21:06,200 --> 00:21:07,020 Das ist nicht eine Adresse. 484 00:21:07,020 --> 00:21:09,380 Es ist nur eine Zahl, Art eine Variable von einer Woche. 485 00:21:09,380 --> 00:21:13,520 >> Und jetzt, wenn Sie sagen star b, das bedeutet, rufen Sie die Adresse b, ist die von 486 00:21:13,520 --> 00:21:15,090 Kurs hier. 487 00:21:15,090 --> 00:21:16,020 Also, wenn Sie dort ankommen - 488 00:21:16,020 --> 00:21:18,320 Ich werde weitermachen und löschen, was ist eigentlich gibt - und was sind Sie 489 00:21:18,320 --> 00:21:20,820 denn jetzt schreiben an der Stelle 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, die man ist. 491 00:21:22,010 --> 00:21:23,430 >> DAVID MALAN: Temp, die man ist. 492 00:21:23,430 --> 00:21:25,670 Und was passiert mit Temp am Ende? 493 00:21:25,670 --> 00:21:26,600 Nun, wissen wir nicht wirklich wissen. 494 00:21:26,600 --> 00:21:27,420 Wir wissen nicht wirklich kümmern. 495 00:21:27,420 --> 00:21:31,090 Jedes Mal, wenn wir eine Funktion implementiert haben so weit, alle lokalen Variablen, die Sie haben 496 00:21:31,090 --> 00:21:31,890 sind in der Tat lokalen. 497 00:21:31,890 --> 00:21:33,060 Und sie einfach verschwinden. 498 00:21:33,060 --> 00:21:35,040 Sie sind durch das Betriebssystem freigegeben System schließlich. 499 00:21:35,040 --> 00:21:39,800 >> Also die Tatsache, dass die Temperatur noch Wert 1 ist eine Art grundlegend 500 00:21:39,800 --> 00:21:41,150 uninteressant für uns. 501 00:21:41,150 --> 00:21:43,100 Alles klar, so ein Applaus wenn wir es könnten für Charlie. 502 00:21:43,100 --> 00:21:46,400 Sehr gut gemacht. 503 00:21:46,400 --> 00:21:51,520 >> Alles klar, so was tut mehr dies bedeuten, was wir tun können? 504 00:21:51,520 --> 00:21:54,400 So stellt sich heraus, dass wir waren erzählt ein paar weiße Lügen 505 00:21:54,400 --> 00:21:55,540 seit geraumer Zeit. 506 00:21:55,540 --> 00:21:59,990 Tatsächlich stellt sich heraus, dass eine Zeichenfolge, all dieser Zeit ist nicht wirklich ein 507 00:21:59,990 --> 00:22:02,190 Folge von Zeichen per se. 508 00:22:02,190 --> 00:22:03,980 Es Art ist, dass intuitiv. 509 00:22:03,980 --> 00:22:08,270 >> Aber technisch gesehen ist ein String Datentyp, dass wir innerhalb der angegebenen 510 00:22:08,270 --> 00:22:12,170 der CS50-Bibliothek, um die Welt zu vereinfachen für die ersten paar Wochen der Klasse. 511 00:22:12,170 --> 00:22:20,130 Was ist wirklich ein String ist die Adresse eines Zeichens irgendwo in RAM. 512 00:22:20,130 --> 00:22:25,530 Ein String ist wirklich eine Nummer, wie 123 oder 127, die Abgrenzung geschieht 513 00:22:25,530 --> 00:22:28,420 wo ein String beginnt Arbeitsspeicher Ihres Computers. 514 00:22:28,420 --> 00:22:31,870 >> Aber es gibt nicht die String, per se, sich. 515 00:22:31,870 --> 00:22:33,460 Und wir können sehen, wie folgt. 516 00:22:33,460 --> 00:22:35,980 Lassen Sie mich gehen Sie vor und eröffnen einige Code, der unter ist 517 00:22:35,980 --> 00:22:38,340 heutigen Quellcode-Beispiele. 518 00:22:38,340 --> 00:22:42,225 Und ich werde weitermachen und öffnen bis, sagen wir, zu vergleichen-0.C. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Dies ist ein Programm, das Buggy wird wie folgt implementiert werden. 521 00:22:48,790 --> 00:22:49,040 >> Erste. 522 00:22:49,040 --> 00:22:50,420 Ich werde etwas sagen. 523 00:22:50,420 --> 00:22:52,660 Dann werde ich weitermachen und bekommen einen String vom Benutzer 524 00:22:52,660 --> 00:22:53,750 in diesem nächsten Zeile. 525 00:22:53,750 --> 00:22:55,370 Dann werde ich es wieder sagen. 526 00:22:55,370 --> 00:22:57,540 Dann werde ich zum anderen zu gelangen String von dem Benutzer. 527 00:22:57,540 --> 00:23:00,390 >> Und beachten Sie, zeige ich einer der Zeichenfolgen in einer Variablen namens s, und 528 00:23:00,390 --> 00:23:03,040 andere dieser Strings in einer Variablen namens t. 529 00:23:03,040 --> 00:23:07,480 Und jetzt werde ich Anspruch, sehr angemessen, dass, wenn s gleich gleich t, 530 00:23:07,480 --> 00:23:08,940 die Saiten sind die gleichen. 531 00:23:08,940 --> 00:23:09,970 Sie geben die gleiche Sache. 532 00:23:09,970 --> 00:23:11,830 Else, sind die Saiten nicht dasselbe. 533 00:23:11,830 --> 00:23:15,440 >> Nach allem, wenn wir zwei ints Eingang, zwei Zeichen, zwei Schwimmer, zwei Doppelzimmer, einem der 534 00:23:15,440 --> 00:23:18,400 die Datentypen über die wir gesprochen haben bisher um diese zu vergleichen - 535 00:23:18,400 --> 00:23:22,070 erinnern wir uns sehr klar vor einer Weile dass Sie dies nicht tun, weil eine 536 00:23:22,070 --> 00:23:25,840 einfache Gleichheitszeichen ist natürlich der Zuweisungsoperator. 537 00:23:25,840 --> 00:23:26,820 Also das wäre ein Fehler zu sein. 538 00:23:26,820 --> 00:23:29,260 >> Wir verwenden die equal sign, die in der Tat vergleicht 539 00:23:29,260 --> 00:23:31,050 Dinge für wahre Gleichberechtigung. 540 00:23:31,050 --> 00:23:32,275 Aber ich behaupte, das ist buggy. 541 00:23:32,275 --> 00:23:37,400 Wenn ich voran gehen und vergleichen Null, und dann haben dot Schrägstrich vergleichen Null. 542 00:23:37,400 --> 00:23:39,700 Und ich schreibe in, sagen wir mal, hallo. 543 00:23:39,700 --> 00:23:41,590 Und dann lassen Sie uns sagen, hallo wieder. 544 00:23:41,590 --> 00:23:46,040 Buchstäblich die gleiche Sache, der Computer Ansprüche ich verschiedene Dinge getippt. 545 00:23:46,040 --> 00:23:47,640 >> Jetzt vielleicht habe ich nur etwas vertippt. 546 00:23:47,640 --> 00:23:49,910 Ich werde meinen Namen geben diese Zeit. 547 00:23:49,910 --> 00:23:52,580 Ich meine, hallo. 548 00:23:52,580 --> 00:23:54,770 Hallo. 549 00:23:54,770 --> 00:23:57,360 Es ist anders, jede einzelne Zeit. 550 00:23:57,360 --> 00:23:58,430 >> Nun, warum ist das so? 551 00:23:58,430 --> 00:24:00,140 Was ist wirklich los unter der Haube? 552 00:24:00,140 --> 00:24:03,270 Nun, was wirklich vor sich geht unter die Haube ist der String dann 553 00:24:03,270 --> 00:24:07,410 Ich in dieser ersten Zeit zum Beispiel eingegeben ist das Wort hallo, natürlich. 554 00:24:07,410 --> 00:24:11,660 Aber wenn wir stellen diese unter die Haube, daran erinnern, dass ein 555 00:24:11,660 --> 00:24:13,470 String in einem Array. 556 00:24:13,470 --> 00:24:15,040 Und wir haben so viel in der Vergangenheit gesagt. 557 00:24:15,040 --> 00:24:20,200 >> Also, wenn ich das Array wie folgt zu ziehen, ich bin gehen, um etwas ganz repräsentieren 558 00:24:20,200 --> 00:24:23,030 ähnlich dem, was wir haben vor einem Augenblick. 559 00:24:23,030 --> 00:24:25,390 Und es ist tatsächlich etwas, besondere auch hier. 560 00:24:25,390 --> 00:24:28,090 Was haben wir bestimmen, wurde bei das Ende jedes Strings? 561 00:24:28,090 --> 00:24:30,760 Ja, diese Backslash Null, was ist nur die Art der Darstellung, 562 00:24:30,760 --> 00:24:33,610 wörtlich: 00000000. 563 00:24:33,610 --> 00:24:35,680 Acht Bits 0 in einer Reihe. 564 00:24:35,680 --> 00:24:37,610 >> Ich weiß es nicht, ehrlich gesagt, was ist danach. 565 00:24:37,610 --> 00:24:40,090 Das ist nur ein Haufen mehr RAM Innere meines Computers. 566 00:24:40,090 --> 00:24:40,970 Aber dies ist ein Array. 567 00:24:40,970 --> 00:24:42,260 Wir sprachen über Arrays vor. 568 00:24:42,260 --> 00:24:45,010 Und wir in der Regel über Arrays reden als Standort Null, 569 00:24:45,010 --> 00:24:46,580 dann eine, dann zwei. 570 00:24:46,580 --> 00:24:47,950 Aber das ist nur für die Bequemlichkeit. 571 00:24:47,950 --> 00:24:49,380 Und das ist ganz relativ. 572 00:24:49,380 --> 00:24:53,010 >> Wenn Sie eigentlich immer Speicher aus der Computer, es ist natürlich jedem 573 00:24:53,010 --> 00:24:55,450 2 Mrd. einige merkwürdige bytes, möglicherweise. 574 00:24:55,450 --> 00:24:59,100 Also wirklich unter der Haube, all dieser Zeit, ja. 575 00:24:59,100 --> 00:25:01,670 Dies könnte sehr gut Klammer Null sein. 576 00:25:01,670 --> 00:25:04,780 Aber wenn man noch tiefer graben unter die Haube, das ist wirklich 577 00:25:04,780 --> 00:25:07,000 Adresse Nummer 123. 578 00:25:07,000 --> 00:25:09,150 Dies ist die Adresse 124. 579 00:25:09,150 --> 00:25:11,040 Dies ist die Adresse 125. 580 00:25:11,040 --> 00:25:12,540 >> Und ich habe nicht vermasseln diese Zeit. 581 00:25:12,540 --> 00:25:15,840 Diese sind jetzt ein Byte abgesehen aus welchem ​​Grund? 582 00:25:15,840 --> 00:25:17,930 Wie groß ist ein char? 583 00:25:17,930 --> 00:25:19,170 Ein char ist nur ein Byte. 584 00:25:19,170 --> 00:25:20,570 Ein int ist in der Regel vier Bytes. 585 00:25:20,570 --> 00:25:24,850 Also das ist, warum ich es 123 gemacht, 127, 131 und so weiter. 586 00:25:24,850 --> 00:25:27,560 Jetzt kann ich halten die Mathematik einfacher und genau das zu tun plus 1. 587 00:25:27,560 --> 00:25:30,510 Und das ist jetzt, was wirklich vor sich geht auf unterhalb der Haube. 588 00:25:30,510 --> 00:25:37,760 >> Also, wenn Sie erklären, so etwas wie dieses, string s, das ist eigentlich - 589 00:25:37,760 --> 00:25:39,170 es stellt sich heraus - 590 00:25:39,170 --> 00:25:41,190 char Stern. 591 00:25:41,190 --> 00:25:44,640 Star, bedeutet natürlich, Adresse, aka Zeiger. 592 00:25:44,640 --> 00:25:46,200 So ist es die Adresse von etwas. 593 00:25:46,200 --> 00:25:47,510 Was ist die Adresse? 594 00:25:47,510 --> 00:25:47,760 >> Well - 595 00:25:47,760 --> 00:25:51,680 Ich bin der einzige, der die sehr sehen können wichtiger Punkt, den ich mache, oder denken 596 00:25:51,680 --> 00:25:52,560 Ich mache. 597 00:25:52,560 --> 00:25:55,270 So string - 598 00:25:55,270 --> 00:25:57,180 Das Traurige daran ist, ich habe einen Monitor genau dort, wo ich 599 00:25:57,180 --> 00:25:58,100 konnte sehen, dass haben. 600 00:25:58,100 --> 00:26:00,990 >> Alles klar, also string s ist, was Ich erklärte zuvor. 601 00:26:00,990 --> 00:26:04,600 Aber es stellt sich heraus, dank eines kleinen Magie in der CS50-Bibliothek, alle diese 602 00:26:04,600 --> 00:26:08,780 Zeit-String hat buchstäblich gewesen char Stern. 603 00:26:08,780 --> 00:26:11,310 Der Stern bedeutet wiederum, Zeiger oder Adresse. 604 00:26:11,310 --> 00:26:14,180 Die Tatsache, dass es die flankierenden Wort char bedeutet, dass es die 605 00:26:14,180 --> 00:26:15,970 Adresse eines Zeichens. 606 00:26:15,970 --> 00:26:23,100 >> Also, wenn Sie Zeichenfolge aufgerufen wird, und ich geben in H-E-L-L-O, jetzt schlagen, was zu bekommen 607 00:26:23,100 --> 00:26:27,330 String buchstäblich wieder alle dieses Mal, obwohl wir eher 608 00:26:27,330 --> 00:26:29,980 vereinfacht die Welt? 609 00:26:29,980 --> 00:26:33,310 Was macht String tatsächlich bekommen Rückkehr als Rückgabewert? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 in diesem Fall, zum Beispiel. 612 00:26:38,720 --> 00:26:42,630 Wir haben vorher gesagt, dass den String gibt einfach ein String, eine Folge von 613 00:26:42,630 --> 00:26:43,300 Zeichen. 614 00:26:43,300 --> 00:26:44,790 Aber das ist ein bisschen wie ein Notlüge. 615 00:26:44,790 --> 00:26:48,010 Die Art und Weise bekommen String wirklich funktioniert unter der Haube ist wird es ein 616 00:26:48,010 --> 00:26:48,930 String von dem Benutzer. 617 00:26:48,930 --> 00:26:51,530 Es plumpst die Zeichen, die er oder sie die im Speicher. 618 00:26:51,530 --> 00:26:54,680 Es setzt einen Backslash Null am Ende jener Folge von Zeichen. 619 00:26:54,680 --> 00:26:57,310 >> Aber was macht den String buchstäblich zurückkehren? 620 00:26:57,310 --> 00:27:02,710 Es gibt buchstäblich die Adresse des ersten Bytes im RAM, dass 621 00:27:02,710 --> 00:27:04,130 es verwendet dieser Stärke. 622 00:27:04,130 --> 00:27:07,500 Und es stellt sich heraus, dass nur durch Rücksendung eine einzelne Adresse des 623 00:27:07,500 --> 00:27:12,120 erste Zeichen in der Zeichenfolge, das ist ausreichend für die Suche nach der Gesamtheit 624 00:27:12,120 --> 00:27:12,630 die Zeichenkette. 625 00:27:12,630 --> 00:27:16,930 >> In anderen Worten, den String nicht bis 123 und 124 und 125 zurück. 626 00:27:16,930 --> 00:27:19,950 Es muss nicht, um mir eine lange Liste aller Bytes, 627 00:27:19,950 --> 00:27:20,740 meinen String verwendet. 628 00:27:20,740 --> 00:27:22,670 Weil man, sie sind alle Rücken an Rücken. 629 00:27:22,670 --> 00:27:28,160 Und zwei, an der ersten Adresse, wobei I herausfinden können, wo der String endet. 630 00:27:28,160 --> 00:27:29,910 Wie? 631 00:27:29,910 --> 00:27:33,490 >> Die spezielle Null-Zeichen, die Backslash Null am Ende. 632 00:27:33,490 --> 00:27:35,430 Mit anderen Worten, wenn Sie umfahren - 633 00:27:35,430 --> 00:27:36,530 innerhalb von Variablen - 634 00:27:36,530 --> 00:27:41,300 die Adresse eines char, und Sie davon ausgehen, dass am Ende einer Zeichenfolge, einem 635 00:27:41,300 --> 00:27:45,040 Folge von Zeichen, wie wir Menschen denken von Strings, wenn Sie davon ausgehen, dass 636 00:27:45,040 --> 00:27:48,600 am Ende einer solchen Zeichenkette es ein Backslash Null, du bist golden. 637 00:27:48,600 --> 00:27:52,430 Da finden Sie immer das Ende einer Zeichenkette. 638 00:27:52,430 --> 00:27:54,870 >> Nun, was ist dann wirklich gehen auf in diesem Programm? 639 00:27:54,870 --> 00:27:59,990 Warum ist das Programm, vergleichen-0.C, Buggy? 640 00:27:59,990 --> 00:28:01,690 Was ist eigentlich verglichen? 641 00:28:01,690 --> 00:28:02,420 Ja? 642 00:28:02,420 --> 00:28:05,000 >> STUDENT: [unverständlich]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID MALAN: Genau. 644 00:28:05,730 --> 00:28:08,350 Es Vergleich der Standorte der Saiten. 645 00:28:08,350 --> 00:28:12,420 Also, wenn der Benutzer eingetippt hallo einmal, wie ich, vielleicht Speicher landen 646 00:28:12,420 --> 00:28:13,430 wie folgt aussehen. 647 00:28:13,430 --> 00:28:18,210 Wenn der Benutzer dann in Arten Hallo nochmal, aber durch den Aufruf den String wieder, ist c 648 00:28:18,210 --> 00:28:21,800 nicht besonders klug, wenn Sie lehren es, schlau zu sein, indem das Schreiben von Code. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 und Computer im Allgemeinen - 651 00:28:23,860 --> 00:28:27,370 wenn man in dem Wort hallo wieder geben, Sie wissen, was Sie bekommen werden. 652 00:28:27,370 --> 00:28:31,480 Sie sind gerade dabei, eine zweite Anordnung erhalten des Speichers, der, ja, passiert sein 653 00:28:31,480 --> 00:28:35,510 Speichern von H-E-L-L-O und so weiter. 654 00:28:35,510 --> 00:28:38,240 >> Es geht um das gleiche zu sehen uns Menschen, aber diese Adresse 655 00:28:38,240 --> 00:28:39,460 vielleicht nicht 123 sein. 656 00:28:39,460 --> 00:28:42,470 Es könnte nur so geschehen, dass die Betriebssystem verfügt über einige 657 00:28:42,470 --> 00:28:45,430 Raum zum Beispiel an der Stelle - 658 00:28:45,430 --> 00:28:49,820 sagen wir mal, etwas willkürlich, so ist die Lage 200. 659 00:28:49,820 --> 00:28:51,620 Und dies ist die Lage 201. 660 00:28:51,620 --> 00:28:53,060 Und dies ist die Lage 202. 661 00:28:53,060 --> 00:28:55,730 Wir haben keine Ahnung, wo das ist gehen, um in Erinnerung sein. 662 00:28:55,730 --> 00:28:59,110 >> Aber was das bedeutet, ist, dass das, was gehen, um letztlich in s gespeichert werden? 663 00:28:59,110 --> 00:29:00,750 Die Zahl 123. 664 00:29:00,750 --> 00:29:04,860 Was ist los in t gespeichert werden, in diesem Beispiel willkürlich? 665 00:29:04,860 --> 00:29:06,300 Die Zahl 200. 666 00:29:06,300 --> 00:29:11,410 Und das bedeutet dann ist offensichtlich, 123 nicht gleich 200 ist. 667 00:29:11,410 --> 00:29:14,940 Und so ist dies, wenn die Bedingung nie wahr ausgewertet. 668 00:29:14,940 --> 00:29:18,430 Weil get String wird mit verschiedenen Brocken von Speicher jeder Zeit. 669 00:29:18,430 --> 00:29:20,360 >> Jetzt können wir sehen, diese wieder in einem anderen Beispiel. 670 00:29:20,360 --> 00:29:23,764 Lassen Sie mich gehen Sie vor und eröffnen copy-0.C. 671 00:29:23,764 --> 00:29:28,770 Ich behaupte, dass dieses Beispiel zu gehen versuchen - aber nicht - zu zwei Strings kopieren 672 00:29:28,770 --> 00:29:29,910 wie folgt. 673 00:29:29,910 --> 00:29:31,730 >> Ich werde etwas sagen an den Benutzer. 674 00:29:31,730 --> 00:29:34,490 Ich bin dann werde eine bekommen Zeichenfolge und nennen es s. 675 00:29:34,490 --> 00:29:36,400 Und jetzt, ich mache dieses Kontrollkästchen hier. 676 00:29:36,400 --> 00:29:37,990 Wir erwähnten dies eine Weile zurück. 677 00:29:37,990 --> 00:29:42,490 Aber wenn vielleicht bekommen String return null, ein anderes Sonderzeichen oder spezielle 678 00:29:42,490 --> 00:29:45,050 Symbol sagen wir. 679 00:29:45,050 --> 00:29:45,900 Wenn es aus der Erinnerung. 680 00:29:45,900 --> 00:29:48,970 >> Zum Beispiel, wenn der Benutzer wirklich als schwierig und Typen ein grauenhaft 681 00:29:48,970 --> 00:29:51,220 Anzahl der Zeichen in der Tastatur und trifft die Eingabetaste. 682 00:29:51,220 --> 00:29:54,580 Wenn die Anzahl der Zeichen kann einfach nicht passen in RAM für was auch immer verrückt 683 00:29:54,580 --> 00:29:57,820 Grund, gut erhalten Zeichenfolge könnten sehr gut null zurück. 684 00:29:57,820 --> 00:30:01,080 >> Oder wenn Ihr Programm selbst wird dabei eine Menge andere Dinge, und es ist nur 685 00:30:01,080 --> 00:30:03,790 Nicht genügend Speicher für den String erfolgreich zu sein, könnte es am Ende 686 00:30:03,790 --> 00:30:05,240 bis Null zurückgegeben. 687 00:30:05,240 --> 00:30:07,160 Aber lassen Sie uns genauer , was das ist. 688 00:30:07,160 --> 00:30:10,280 Was ist s den Datentyp wirklich? 689 00:30:10,280 --> 00:30:11,610 Char Stern. 690 00:30:11,610 --> 00:30:14,560 >> So stellt sich heraus schälen wir können jetzt Sichern Sie die Ebene von null. 691 00:30:14,560 --> 00:30:17,500 Es stellte sich heraus, ist null - ja, natürlich ein besonderes Symbol. 692 00:30:17,500 --> 00:30:19,190 Aber was ist es wirklich? 693 00:30:19,190 --> 00:30:25,220 Wirklich, es ist null nur ein Symbol, dass wir Menschen verwenden, um Null als gut vertreten. 694 00:30:25,220 --> 00:30:29,010 >> So die Autoren C und Computer ganz allgemein entschieden Jahren 695 00:30:29,010 --> 00:30:30,010 dass Sie wissen, was. 696 00:30:30,010 --> 00:30:34,850 Warum gehen wir nicht gewährleisten, dass kein Benutzer Daten ist immer, immer, immer 697 00:30:34,850 --> 00:30:36,730 gelagert bei Null bye? 698 00:30:36,730 --> 00:30:39,610 In der Tat, auch in meinem beliebiges Beispiel vor, ich habe nicht die Nummerierung beginnen 699 00:30:39,610 --> 00:30:40,390 Bytes auf Null. 700 00:30:40,390 --> 00:30:41,540 Ich begann an einem. 701 00:30:41,540 --> 00:30:44,950 Weil ich wusste, dass die Menschen in der Welt beschlossen, die Null behalten haben 702 00:30:44,950 --> 00:30:47,970 Byte in niemandes RAM als etwas Besonderes. 703 00:30:47,970 --> 00:30:52,020 >> Der Grund dafür ist, wann immer Sie wollen signalisieren, dass etwas schief gegangen ist 704 00:30:52,020 --> 00:30:55,960 im Hinblick auf die Adressen, kehrte sie null - anders als Null bekannt - 705 00:30:55,960 --> 00:30:59,410 und weil Sie wissen, dass es keine legit Daten an der Adresse Null, klar 706 00:30:59,410 --> 00:31:00,400 das bedeutet einen Fehler. 707 00:31:00,400 --> 00:31:04,080 Und das ist, warum wir durch Konvention, überprüfen für null und Rückkehr etwas 708 00:31:04,080 --> 00:31:06,260 wie man in diesen Fällen. 709 00:31:06,260 --> 00:31:09,300 >> Also, wenn wir jetzt nach unten zu blättern, ist dies nur dann einige Fehler geprüft, nur für den Fall 710 00:31:09,300 --> 00:31:10,610 ging etwas mit [falsch? Patsche?] 711 00:31:10,610 --> 00:31:13,470 insgesamt und das Programm beenden durch Rücksendung früh. 712 00:31:13,470 --> 00:31:19,030 Diese Linie könnte nun umgeschrieben werden da dies, was bedeutet, was? 713 00:31:19,030 --> 00:31:23,155 Auf der linken Seite, gib mir ein anderer Zeiger auf ein Zeichen, und nennen es t. 714 00:31:23,155 --> 00:31:26,935 Was mache ich Speicherung innerhalb von t, basierend auf dieser eine Zeile Code? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Ich bin Speichern einer Lage. 717 00:31:32,170 --> 00:31:34,742 Insbesondere die Lage das war in s. 718 00:31:34,742 --> 00:31:39,000 Also, wenn der Benutzer in hallo eingegeben haben, und dass zuerst hallo geschieht, um am Ende 719 00:31:39,000 --> 00:31:42,567 hier, dann wird die Zahl 123 ist gehen, um wieder aus zu bekommen 720 00:31:42,567 --> 00:31:43,810 bespannen und gespeichert werden - 721 00:31:43,810 --> 00:31:44,780 wie wir bereits gesagt - 722 00:31:44,780 --> 00:31:45,440 in s. 723 00:31:45,440 --> 00:31:50,560 >> Wenn ich jetzt noch erklären Zeiger auf ein char und nennen es t, welche Zahl ist 724 00:31:50,560 --> 00:31:53,940 buchstäblich am Ende sich in t nach der Geschichte? 725 00:31:53,940 --> 00:31:55,420 Also 123. 726 00:31:55,420 --> 00:32:00,310 >> So technisch nun beide s und t werden, um die genaue zeigen 727 00:32:00,310 --> 00:32:02,410 gleiche Stücke des Speichers. 728 00:32:02,410 --> 00:32:06,140 So bemerken, was werde ich jetzt tun, um beweisen, dass dieses Programm buggy ist. 729 00:32:06,140 --> 00:32:08,820 >> Zuerst werde ich Anspruch, mit ein Druck f, Kapital 730 00:32:08,820 --> 00:32:10,080 die Kopie des Strings. 731 00:32:10,080 --> 00:32:11,660 Dann werde ich ein wenig zu tun Fehlerprüfung. 732 00:32:11,660 --> 00:32:12,160 Ich werde sicherstellen. 733 00:32:12,160 --> 00:32:16,710 Lassen Sie uns dafür sorgen, dass der String t an ist mindestens größer als Null in der Länge, 734 00:32:16,710 --> 00:32:19,190 so gibt es einige Zeichen gibt tatsächlich zu nutzen. 735 00:32:19,190 --> 00:32:22,840 >> Und dann haben Sie erinnern sich vielleicht an diese von den vorherigen Beispielen. 736 00:32:22,840 --> 00:32:25,630 2 oberen - das ist in die ctype.h Datei. 737 00:32:25,630 --> 00:32:30,800 T Klammer Null gibt mir die Null Zeichen des Strings t. 738 00:32:30,800 --> 00:32:34,360 Und 2 oberen des gleichen Wert, der Natürlich wandelt sie in Großbuchstaben. 739 00:32:34,360 --> 00:32:38,230 >> So intuitiv, diese Linie hervorgehoben der Code ist Großschreibung des ersten 740 00:32:38,230 --> 00:32:40,250 Brief in t. 741 00:32:40,250 --> 00:32:44,485 Aber es ist nicht kapitalisieren, intuitiv, der erste Buchstabe s. 742 00:32:44,485 --> 00:32:48,130 Aber wenn Sie im Voraus denken, was bin ich etwa, um zu sehen, wenn ich dieses Programm ausführen 743 00:32:48,130 --> 00:32:54,220 und ausdrucken sowohl das Original, s, und die so genannte Kopie, t? 744 00:32:54,220 --> 00:32:55,350 >> Sie sind eigentlich los, um die gleichen sein. 745 00:32:55,350 --> 00:32:56,600 Und warum werden sie gleich sein? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Sie sind beide, die auf genau die gleiche Sache. 748 00:33:01,020 --> 00:33:01,610 Also lasst uns dies tun. 749 00:33:01,610 --> 00:33:03,160 >> Als Kopie Null. 750 00:33:03,160 --> 00:33:04,070 Es kompiliert OK. 751 00:33:04,070 --> 00:33:06,500 Lassen Sie mich laufen Kopie Null. 752 00:33:06,500 --> 00:33:10,110 Lassen Sie mich etwas geben wie in hallo alle Kleinbuchstaben drücken Sie dann die Eingabetaste. 753 00:33:10,110 --> 00:33:16,520 Und sie behauptet, dass sowohl die original s und die Kopie sind in der Tat identisch. 754 00:33:16,520 --> 00:33:17,920 >> Also, was ist wirklich passiert? 755 00:33:17,920 --> 00:33:20,100 Lassen Sie mich dieses Bild neu zeichnen nur um die Geschichte zu erzählen, in ein 756 00:33:20,100 --> 00:33:21,340 etwas anders. 757 00:33:21,340 --> 00:33:26,060 Was wirklich los ist unterhalb des Haube, wenn ich etwas erklären, wie 758 00:33:26,060 --> 00:33:30,410 char Start s, oder String s, Ich bekomme einen Zeiger - 759 00:33:30,410 --> 00:33:33,090 was passiert mit vier Bytes in der CS50 Gerät 760 00:33:33,090 --> 00:33:34,410 und in einer Menge von Computern. 761 00:33:34,410 --> 00:33:36,008 Und ich werde dieses s nennen. 762 00:33:36,008 --> 00:33:39,810 Und dies hat derzeit einige unbekannten Wert. 763 00:33:39,810 --> 00:33:43,900 >> Wenn Sie eine Variable deklarieren, es sei denn, Sie Sie setzen einen Wert gibt, der 764 00:33:43,900 --> 00:33:44,570 weiß, was da ist. 765 00:33:44,570 --> 00:33:48,110 Es könnte einige zufällige Folge von sein Bits von der vorherigen Ausführung. 766 00:33:48,110 --> 00:33:52,490 Also, wenn ich in meinem Code-Zeile zu tun bekommen Schnur, und speichern Sie dann die Rückkehr 767 00:33:52,490 --> 00:33:54,800 Wert in den String s irgendwie - 768 00:33:54,800 --> 00:33:58,520 und wir werden schließlich abziehen, wie bekommen String funktioniert, irgendwie weist eine 769 00:33:58,520 --> 00:34:00,480 Array, das sieht wohl ein bisschen wie diese. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, Backslash Null. 771 00:34:05,390 --> 00:34:09,510 >> Nehmen wir an, dass diese Adresse ist 123 nur erste Konsistenz. 772 00:34:09,510 --> 00:34:13,000 So bekommen Zeichenfolge zurückgibt, in der hervorgehobene Zeile gibt, gibt es das 773 00:34:13,000 --> 00:34:15,000 Zahl haben wir gesagt, 123. 774 00:34:15,000 --> 00:34:17,420 Also, was wirklich geht in der s hier? 775 00:34:17,420 --> 00:34:26,590 >> Nun, was wirklich geht innerhalb von 123 s liegt. 776 00:34:26,590 --> 00:34:29,250 Aber ehrlich gesagt, bin ich immer ein wenig verwirrt von all diesen Adressen 777 00:34:29,250 --> 00:34:30,320 alle diese beliebige Zahlen. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Lassen Sie uns also tatsächlich vereinfachen die Welt ein kleines bisschen. 780 00:34:34,570 --> 00:34:38,800 >> Wenn wir über Zeiger sprechen, ehrlich gesagt, zu uns Menschen, wer zum Teufel kümmert, wo 781 00:34:38,800 --> 00:34:39,870 Dinge sind in Erinnerung? 782 00:34:39,870 --> 00:34:41,080 Das ist völlig willkürlich. 783 00:34:41,080 --> 00:34:43,370 Es wird, wie abhängig viel RAM hat der Benutzer. 784 00:34:43,370 --> 00:34:46,590 Es wird davon abhängen, wann in den Tag Sie das Programm, vielleicht, und 785 00:34:46,590 --> 00:34:48,250 Welchen Input der Anwender gibt Ihnen. 786 00:34:48,250 --> 00:34:50,060 Wir sind Wohnung auf unwichtige Details. 787 00:34:50,060 --> 00:34:54,230 >> Also lasst uns abstrahieren und sagen, dass, wenn Sie eine Codezeile wie diese, 788 00:34:54,230 --> 00:34:57,320 char Sterne s bekommt die Rückkehr Wert von get-String. 789 00:34:57,320 --> 00:35:02,720 Warum gehen wir nicht stattdessen nur zeichnen, was wir halten Aufruf einen Zeiger, als ob es 790 00:35:02,720 --> 00:35:04,140 deutete auf etwas? 791 00:35:04,140 --> 00:35:07,000 Also ich behaupte jetzt, dass s up Es ist ein Zeiger - 792 00:35:07,000 --> 00:35:08,480 unter der Haube, es ist eine Adresse. 793 00:35:08,480 --> 00:35:11,330 Aber es ist nur darauf zu das erste Byte in der 794 00:35:11,330 --> 00:35:12,780 String Das ist zurückgegeben worden. 795 00:35:12,780 --> 00:35:16,710 >> Wenn ich jetzt auf den Code hier zurückzukehren, was los ist in dieser Zeile? 796 00:35:16,710 --> 00:35:20,020 Nun, in diesem hervorgehobene Zeile jetzt, Ich bin anscheinend ein anderer erklärt 797 00:35:20,020 --> 00:35:21,070 Variable namens t. 798 00:35:21,070 --> 00:35:25,700 Aber es ist auch ein Zeiger, so werde ich um es als in der Theorie zu ziehen, die genaue 799 00:35:25,700 --> 00:35:26,710 gleiche Größe Box. 800 00:35:26,710 --> 00:35:28,160 Und ich werde es nennen t. 801 00:35:28,160 --> 00:35:33,500 >> Und jetzt, wenn wir zurück zu den Code erneut ein, wenn ich speichern drin von t, 802 00:35:33,500 --> 00:35:36,920 was bin ich technisch Putting Innenseite t? 803 00:35:36,920 --> 00:35:39,350 Nun technisch, diese war die Zahl 123. 804 00:35:39,350 --> 00:35:42,270 Also wirklich, ich sollte schriftlich die Zahl 123 gibt. 805 00:35:42,270 --> 00:35:43,900 Aber nehmen wir es höhere Ebene. 806 00:35:43,900 --> 00:35:48,090 t, wenn es nur ein Zeiger, intuitiv, ist genau dies. 807 00:35:48,090 --> 00:35:49,800 Das ist alles, was ist gespeichert drin. 808 00:35:49,800 --> 00:35:54,970 >> So, jetzt in den letzten Zeilen interessant der Code, wenn ich tatsächlich über gehen 809 00:35:54,970 --> 00:36:00,680 Aktivierung des Null Charakter in t, was ist los? 810 00:36:00,680 --> 00:36:06,310 Nun, das ist t Klammer Null deuten nun zu dem, was Charakter, vermutlich? 811 00:36:06,310 --> 00:36:07,460 >> Es ist zu h zeigt. 812 00:36:07,460 --> 00:36:08,870 Da t Klammer Null - 813 00:36:08,870 --> 00:36:12,490 erinnern, ist dieses alte Syntax. t Halterung Null bedeutet nur, wenn t ist eine Zeichenfolge, t 814 00:36:12,490 --> 00:36:15,590 Klammer Null bedeutet, dass man die Null Charakter in dieser Stärke. 815 00:36:15,590 --> 00:36:18,650 Also, was das wirklich bedeutet wird auf diesem Array gehen - 816 00:36:18,650 --> 00:36:21,520 und ja, könnte dies 123, dies könnte 124 sein. 817 00:36:21,520 --> 00:36:22,790 Aber es ist alles relativ, erinnern. 818 00:36:22,790 --> 00:36:25,640 Immer, wenn es um ein Array, haben wir der Vorteil des Sprechens über 819 00:36:25,640 --> 00:36:27,000 relativen Indizes. 820 00:36:27,000 --> 00:36:31,120 >> Und nun können wir einfach davon ausgehen, dass t Klammer Null ist h. 821 00:36:31,120 --> 00:36:35,090 Also, wenn ich 2 oberen fordern sie auf, was das ist wirklich tun, ist Kapital 822 00:36:35,090 --> 00:36:38,290 die Kleinbuchstaben h in Großbuchstaben H. Aber natürlich, was ist s? 823 00:36:38,290 --> 00:36:41,010 Es ist auf die gleiche verflixte String zeigt. 824 00:36:41,010 --> 00:36:44,200 >> Also das ist alles, was geschehen ist in diesem Code so weit. 825 00:36:44,200 --> 00:36:45,960 Also, was ist dann die Implikation? 826 00:36:45,960 --> 00:36:48,300 Wie können wir diese beiden Probleme zu beheben? 827 00:36:48,300 --> 00:36:50,870 Wie reagieren wir auf aktuelle Zeichenfolgen zu vergleichen? 828 00:36:50,870 --> 00:36:53,720 >> Nun intuitiv, wie würde Sie gehen über den Vergleich von zwei 829 00:36:53,720 --> 00:36:55,090 Saiten für echte Gleichstellung? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Was bedeutet es, wenn zwei Strings sind gleich? 832 00:37:00,750 --> 00:37:04,330 Offenbar nicht, dass ihre Adressen sind gleich in Erinnerung, denn das ist eine geringe 833 00:37:04,330 --> 00:37:06,590 Implementierung auf Details. 834 00:37:06,590 --> 00:37:08,360 Alle Figuren sind die gleichen. 835 00:37:08,360 --> 00:37:12,810 Also lassen Sie mich schlagen, und lassen Sie mich in der Version eines compare.c 836 00:37:12,810 --> 00:37:14,970 hier, so vergleichen-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Lassen Sie mich vorschlagen, dass wir immer noch ein Pointer aufgerufen s, und speichern Sie in der es 838 00:37:19,590 --> 00:37:20,610 Rückgabewert von get-String. 839 00:37:20,610 --> 00:37:21,750 Machen wir das Gleiche mit t. 840 00:37:21,750 --> 00:37:23,230 So kein Code unterscheidet. 841 00:37:23,230 --> 00:37:25,420 Ich werde ein wenig hinzufügen mehr Fehlerprüfung jetzt. 842 00:37:25,420 --> 00:37:29,390 So, jetzt haben wir eine Art Peeling wieder da bist diese Schichten in CS50 von dem, was ein String 843 00:37:29,390 --> 00:37:33,520 tatsächlich ist, müssen wir mehr anal darum, dass wir nicht missbrauchen 844 00:37:33,520 --> 00:37:35,330 ungültige Werte wie null. 845 00:37:35,330 --> 00:37:36,440 >> Also ich bin gerade dabei, zu überprüfen. 846 00:37:36,440 --> 00:37:41,490 Wenn s nicht gleich null und t nicht gleich null, das heißt, wir sind OK. 847 00:37:41,490 --> 00:37:44,460 Lass String nicht vermasseln bekommen eine dieser Zeichenfolgen. 848 00:37:44,460 --> 00:37:51,270 Und Sie können jetzt vielleicht erraten, was hat STR CMP vermutlich tun? 849 00:37:51,270 --> 00:37:52,000 String zu vergleichen. 850 00:37:52,000 --> 00:37:55,470 >> Also, wenn Sie in Java-Programm vor, Das ist wie die Methode equals in der 851 00:37:55,470 --> 00:37:56,490 String-Klasse. 852 00:37:56,490 --> 00:37:57,890 Aber für diejenigen von Ihnen, die nicht über programmiert vor, 853 00:37:57,890 --> 00:37:59,320 dies ist nur ein c-Funktion. 854 00:37:59,320 --> 00:38:02,180 Es passiert in einem kommen Datei namens string.h. 855 00:38:02,180 --> 00:38:03,830 Das ist, wo es erklärt. 856 00:38:03,830 --> 00:38:05,110 >> Und String vergleichen - 857 00:38:05,110 --> 00:38:07,530 Ich tatsächlich vergessen, ihre Nutzung, aber egal, dass. 858 00:38:07,530 --> 00:38:10,470 Daran erinnern, dass wir tun können Mann, rühren zu vergleichen. 859 00:38:10,470 --> 00:38:12,590 Und das wird, um das Fenster Linux-Programmierer Handbuch. 860 00:38:12,590 --> 00:38:14,060 Und es ist, ehrlich gesagt, ein wenig kryptisch. 861 00:38:14,060 --> 00:38:15,270 Aber ich kann sehen, dass, yep. 862 00:38:15,270 --> 00:38:17,570 Ich muss string.h gehören. 863 00:38:17,570 --> 00:38:20,590 >> Und er sagt, hier unter Beschreibung ", die String Vergleichsfunktion vergleicht 864 00:38:20,590 --> 00:38:24,560 die beiden Strings S1 und S2. "Und S1 und S2 sind offenbar die beiden 865 00:38:24,560 --> 00:38:26,120 Argumente übergeben in. 866 00:38:26,120 --> 00:38:28,650 Ich glaube nicht wirklich daran erinnern, was const ist, aber jetzt bemerken - 867 00:38:28,650 --> 00:38:31,480 und Sie können diese schon gesehen haben, wenn Sie haben mit den man-Seiten, wenn Sie 868 00:38:31,480 --> 00:38:32,390 haben sie alle - 869 00:38:32,390 --> 00:38:36,220 dass char Stern ist eben auch mit einer Schnur. 870 00:38:36,220 --> 00:38:40,440 >> So vergleicht die beiden Strings S1 und S2, und es gibt eine ganze Zahl weniger 871 00:38:40,440 --> 00:38:44,930 gleich oder größer als Null ist wenn S1 festgestellt wird bzw. werden 872 00:38:44,930 --> 00:38:47,450 weniger als oder entsprechen, oder größer als S2. 873 00:38:47,450 --> 00:38:51,220 Das ist nur ein sehr komplexer Art zu sagen, diese Zeichenfolge vergleichen Renditen 874 00:38:51,220 --> 00:38:55,760 Null, wenn zwei Saiten sind intuitiv identisch, Zeichen für 875 00:38:55,760 --> 00:38:57,120 Zeichen für Zeichen. 876 00:38:57,120 --> 00:38:59,970 >> Es gibt eine negative Zahl, wenn s, alphabetisch soll 877 00:38:59,970 --> 00:39:01,010 vor t kommen. 878 00:39:01,010 --> 00:39:05,300 Oder gibt eine positive Zahl, wenn s soll nach t kommen 879 00:39:05,300 --> 00:39:06,170 alphabetisch. 880 00:39:06,170 --> 00:39:08,360 Also mit dieser einfachen Funktion, könnte Sie, zum Beispiel, eine sortieren 881 00:39:08,360 --> 00:39:09,770 ganze Reihe von Wörtern? 882 00:39:09,770 --> 00:39:13,984 >> So in dieser neuen Version, ich werde gehen Sie vor und machen compare1. 883 00:39:13,984 --> 00:39:15,750 Dot Slash vergleichen ein. 884 00:39:15,750 --> 00:39:18,030 Ich werde in hallo alle in Kleinbuchstaben eingeben. 885 00:39:18,030 --> 00:39:20,300 Ich werde in hallo geben in Kleinbuchstaben wieder. 886 00:39:20,300 --> 00:39:23,340 Und jetzt ist es zum Glück erkennt Ich tippte die gleiche Sache. 887 00:39:23,340 --> 00:39:27,520 >> Inzwischen, wenn ich schreibe in hallo in unteren Fall und hallo in Groß-und 888 00:39:27,520 --> 00:39:29,710 vergleichen sie, tippte ich verschiedene Dinge. 889 00:39:29,710 --> 00:39:32,530 Denn nicht nur die Adressen anders, aber wir vergleichen 890 00:39:32,530 --> 00:39:35,350 verschiedene Charaktere wieder und wieder. 891 00:39:35,350 --> 00:39:37,320 >> Nun lasst uns gehen und beheben eine andere Problem jetzt. 892 00:39:37,320 --> 00:39:41,590 Lassen Sie mich eröffnen Version eines Kopie, die jetzt behandelt 893 00:39:41,590 --> 00:39:42,900 diese Frage wie folgt. 894 00:39:42,900 --> 00:39:45,650 Und dieser geht zu schauen ein wenig komplizierter. 895 00:39:45,650 --> 00:39:49,320 Aber wenn Sie darüber nachdenken, was wir Problem lösen müssen, hoffentlich wird dies 896 00:39:49,320 --> 00:39:51,870 klar in nur einem Augenblick jetzt. 897 00:39:51,870 --> 00:39:57,280 >> Also das erste Zeile, char Start t, in juristischer Hinsicht könnte jemand vorschlagen 898 00:39:57,280 --> 00:39:59,450 was diese Zeile bedeutet hier? 899 00:39:59,450 --> 00:40:01,050 Char star t, was ist das denn? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Gut. 902 00:40:07,210 --> 00:40:09,500 Erstellen Sie einen Zeiger auf einige Ort im Speicher. 903 00:40:09,500 --> 00:40:10,930 Und lassen Sie mich zu verfeinern es ein wenig. 904 00:40:10,930 --> 00:40:17,180 Deklarieren Sie eine Variable, die gespeichert werden Adresse irgendeiner char in Erinnerung, nur 905 00:40:17,180 --> 00:40:18,480 zu sein, ein wenig mehr richtig. 906 00:40:18,480 --> 00:40:21,210 >> OK, so dass nun auf der rechten Seite, ich habe noch nie gesehen eine dieser Funktionen 907 00:40:21,210 --> 00:40:22,660 vor, malloc. 908 00:40:22,660 --> 00:40:26,980 Aber was könnte das bedeuten? 909 00:40:26,980 --> 00:40:28,050 Zuweisung von Speicher. 910 00:40:28,050 --> 00:40:29,410 Speicherzuweisung. 911 00:40:29,410 --> 00:40:33,050 >> So stellt sich heraus, bis jetzt, wir haben nicht wirklich eine leistungsfähige Methode der 912 00:40:33,050 --> 00:40:36,210 fragt das Betriebssystem, gib mir etwas Speicher. 913 00:40:36,210 --> 00:40:39,980 Vielmehr haben wir jetzt eine Funktion namens malloc, die genau das tut. 914 00:40:39,980 --> 00:40:42,960 Auch wenn dies ein bisschen ein Ablenkung gerade feststellen, dass in 915 00:40:42,960 --> 00:40:46,200 zwischen den beiden Klammern gerade dabei, eine Zahl sein. 916 00:40:46,200 --> 00:40:48,510 Wo habe ich in Frage eingegeben Markierungen können eine Zahl sein. 917 00:40:48,510 --> 00:40:51,020 >> Und diese Zahl bedeutet, gib mir 10 Byte. 918 00:40:51,020 --> 00:40:52,320 Gib mir 20 Byte. 919 00:40:52,320 --> 00:40:53,820 Gib mir 100 Bytes. 920 00:40:53,820 --> 00:40:56,500 Und malloc wird sein Bestes tun fragen des Betriebssystems - 921 00:40:56,500 --> 00:40:57,630 Linux, in diesem Fall - 922 00:40:57,630 --> 00:40:59,630 hey, sind ihre 100 Bytes RAM zur Verfügung? 923 00:40:59,630 --> 00:41:04,320 Wenn dem so ist, kehren diese Bytes, die mir von Rücksenden der Adresse, welche der 924 00:41:04,320 --> 00:41:06,610 diese Bytes, vielleicht? 925 00:41:06,610 --> 00:41:07,610 Die allererste. 926 00:41:07,610 --> 00:41:10,460 >> So auch hier - und das ist vorherrschende in C, zu jeder Zeit, du bist 927 00:41:10,460 --> 00:41:11,680 Umgang mit Adressen? 928 00:41:11,680 --> 00:41:15,830 Sie sind fast immer den Umgang mit der erste derartige Adresse, egal wie groß 929 00:41:15,830 --> 00:41:19,490 ein Teil des Speichers Sie werden zurückgab, so zu sprechen. 930 00:41:19,490 --> 00:41:20,880 >> Also lasst uns hier zu tauchen. 931 00:41:20,880 --> 00:41:23,940 Ich versuche zu vergeben, wie viele Bytes, genau? 932 00:41:23,940 --> 00:41:24,080 Well. 933 00:41:24,080 --> 00:41:26,090 String Länge s - lassen Sie uns tun ein konkretes Beispiel. 934 00:41:26,090 --> 00:41:30,700 Wenn s hallo ist, H-E-L-L-O, was ist das String-Länge von s, natürlich? 935 00:41:30,700 --> 00:41:32,010 So ist es fünf. 936 00:41:32,010 --> 00:41:34,590 Aber ich mache ein plus 1 auf, dass, warum? 937 00:41:34,590 --> 00:41:37,700 Warum will ich sechs Bytes statt fünf? 938 00:41:37,700 --> 00:41:38,790 Das Null-Zeichen. 939 00:41:38,790 --> 00:41:41,210 >> Ich will nicht aufhören, diese besondere null Charakter. 940 00:41:41,210 --> 00:41:45,160 Denn wenn ich eine Kopie Hallo und nur tun, H-E-L-L-O, aber ich weiß nicht setzen 941 00:41:45,160 --> 00:41:50,160 Der besondere Charakter der Computer vielleicht nicht, durch Zufall, ein Backslash 942 00:41:50,160 --> 00:41:51,730 Null für mich da. 943 00:41:51,730 --> 00:41:55,570 Und so, wenn ich versuche, herauszufinden, die Länge der Kopie, könnte ich denken, dass 944 00:41:55,570 --> 00:41:59,360 es ist 20 Zeichen lang sein, oder eine Million Zeichen lang sein, wenn ich nur nie passieren 945 00:41:59,360 --> 00:42:01,050 einen Backslash Null getroffen. 946 00:42:01,050 --> 00:42:05,780 >> Also brauchen wir sechs Byte zu speichern H-E-L-L-O, Backslash Null. 947 00:42:05,780 --> 00:42:07,870 Und dann ist dies nur bis hin zu super anal sein. 948 00:42:07,870 --> 00:42:10,700 Angenommen, dass ich vergessen, was die Größe eines char ist. 949 00:42:10,700 --> 00:42:12,020 Wir sagen immer, es ist ein Byte. 950 00:42:12,020 --> 00:42:12,860 Und es ist in der Regel. 951 00:42:12,860 --> 00:42:15,425 Theoretisch könnte es etwas sein unterschiedliche, auf einem anderen Mac oder 952 00:42:15,425 --> 00:42:16,250 anderen PC. 953 00:42:16,250 --> 00:42:19,650 >> So stellt sich heraus, es gibt dieser Operator genannt sizeof dass, wenn Sie passieren sie die 954 00:42:19,650 --> 00:42:22,680 Name eines Datentyps - wie char oder int oder float - 955 00:42:22,680 --> 00:42:26,930 es wird Ihnen sagen, dynamisch, wie viele Bytes, die ein char nimmt auf diese 956 00:42:26,930 --> 00:42:28,090 bestimmten Computer. 957 00:42:28,090 --> 00:42:31,360 >> Das ist also effektiv nur wie gesagt mal 1 oder 958 00:42:31,360 --> 00:42:32,440 mal überhaupt nichts. 959 00:42:32,440 --> 00:42:36,340 Aber ich mache es nur zu super anal sein, nur für den Fall, dass ein char unterscheidet 960 00:42:36,340 --> 00:42:40,610 auf Ihrem Computer im Vergleich zu mir, auf diese Weise die Mathematik wird immer heraus zu überprüfen. 961 00:42:40,610 --> 00:42:43,720 >> Schließlich hier unten ich für null zu überprüfen, Das ist immer ratsam - wieder 962 00:42:43,720 --> 00:42:44,920 Immer, wenn wir mit Zeigern zu tun haben. 963 00:42:44,920 --> 00:42:47,520 Wenn malloc war nicht in der Lage zu geben, mir sechs byes - das ist 964 00:42:47,520 --> 00:42:49,210 unwahrscheinlich, aber nur für den Fall - 965 00:42:49,210 --> 00:42:50,730 zurückzukehren man sofort. 966 00:42:50,730 --> 00:42:53,290 Und jetzt gehen Sie vor und kopieren die Zeichenkette wie folgt. 967 00:42:53,290 --> 00:42:57,240 Und das ist vertraut Syntax wenn auch in einer anderen Rolle. 968 00:42:57,240 --> 00:43:01,210 >> Ich werde weiter zu machen und die Zeichenfolge Länge s und speichern sie in n. 969 00:43:01,210 --> 00:43:06,620 Ich bin dann werde durchlaufen von i gleich Null bis einschließlich n, 970 00:43:06,620 --> 00:43:08,410 größer als oder gleich. 971 00:43:08,410 --> 00:43:13,540 So dass bei jeder Iteration, habe ich die i-te Zeichen von s in der i-ten 972 00:43:13,540 --> 00:43:15,380 Charakter t. 973 00:43:15,380 --> 00:43:18,190 >> Also, was wirklich vor sich geht unter die Haube hier? 974 00:43:18,190 --> 00:43:22,140 Nun, wenn dies zum Beispiel, ist s - 975 00:43:22,140 --> 00:43:26,400 und ich habe in dem Wort H-E-L-L-O eingegeben und es gibt ein Backslash Null. 976 00:43:26,400 --> 00:43:29,020 Und wieder ist dies zeigt s hier. 977 00:43:29,020 --> 00:43:30,830 Und hier ist jetzt t. 978 00:43:30,830 --> 00:43:34,860 >> Und dies zeigt jetzt auf eine Kopie des Gedächtnisses, nicht wahr? 979 00:43:34,860 --> 00:43:37,340 Malloc hat mir eine ganze Teil des Speichers. 980 00:43:37,340 --> 00:43:41,440 Ich weiß nicht, was zunächst in jeder dieser Positionen. 981 00:43:41,440 --> 00:43:44,340 So werde ich von ihnen als denken eine ganze Reihe von Fragezeichen. 982 00:43:44,340 --> 00:43:50,190 >> Aber sobald ich beginne Looping von Null auf bis über die Länge s, t 983 00:43:50,190 --> 00:43:52,790 Klammer Null und t Halterung 1 - 984 00:43:52,790 --> 00:43:55,080 und ich werde das jetzt setzen auf dem Overhead - 985 00:43:55,080 --> 00:44:04,190 t und s Null Halterung Halter Null bedeuten dass ich werde das Kopieren 986 00:44:04,190 --> 00:44:09,875 iterativ h in hier, E-L-L-O. Plus, weil ich auf das Plus 987 00:44:09,875 --> 00:44:12,370 1, Backslash Null. 988 00:44:12,370 --> 00:44:19,060 >> So, jetzt im Fall von vergleichen-1.c, am Ende, wenn ich drucken Sie die 989 00:44:19,060 --> 00:44:24,760 Aktivierung von t, sollten wir sehen, dass s unverändert ist. 990 00:44:24,760 --> 00:44:26,090 Lassen Sie mich gehen und tun dies jetzt. 991 00:44:26,090 --> 00:44:28,630 So machen copy1. 992 00:44:28,630 --> 00:44:30,860 Dot Slash copy1. 993 00:44:30,860 --> 00:44:33,670 Ich werde in hallo, Enter eingeben. 994 00:44:33,670 --> 00:44:37,430 Und nun bemerken, nur die Kopie wurde aktiviert. 995 00:44:37,430 --> 00:44:40,890 Weil ich wirklich haben zwei Stücke des Speichers. 996 00:44:40,890 --> 00:44:44,390 >> Leider können Sie einige ziemlich schlecht und ziemlich gefährliche Dinge hier. 997 00:44:44,390 --> 00:44:49,290 Lassen Sie mich ein Beispiel hochziehen jetzt hier, das gibt uns ein Beispiel von einigen 998 00:44:49,290 --> 00:44:51,540 verschiedene Linien. 999 00:44:51,540 --> 00:44:56,040 Also einfach intuitiv hier, die erste Zeile Code wird int x Sterne, erklärt 1000 00:44:56,040 --> 00:44:57,340 eine Variable namens x. 1001 00:44:57,340 --> 00:44:58,810 Und was ist der Datentyp dieser Variablen? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Was ist der Datentyp dieser Variablen? 1004 00:45:04,290 --> 00:45:06,980 Das war nicht der Cliffhanger. 1005 00:45:06,980 --> 00:45:08,350 >> Der Datentyp int ist Stern. 1006 00:45:08,350 --> 00:45:12,600 Also, was bedeutet das? x wird speichern Sie die Adresse einer int. 1007 00:45:12,600 --> 00:45:13,520 So einfach ist das.. 1008 00:45:13,520 --> 00:45:16,220 Y wird die Speicherung Adresse einer int. 1009 00:45:16,220 --> 00:45:18,390 Was ist in der dritten Zeile Code da? 1010 00:45:18,390 --> 00:45:21,850 Es ist die Zuteilung, wie viele Bytes, wahrscheinlich? 1011 00:45:21,850 --> 00:45:22,350 Four. 1012 00:45:22,350 --> 00:45:25,460 Aufgrund der Größe eines int Regel vier, gibt malloc von vier 1013 00:45:25,460 --> 00:45:29,950 mich wieder die Adresse eines Batzen Speicher, ist das erste Byte, dessen 1014 00:45:29,950 --> 00:45:32,110 jetzt in x gespeichert. 1015 00:45:32,110 --> 00:45:34,410 >> Jetzt sind wir ein wenig schnell bewegen. 1016 00:45:34,410 --> 00:45:35,760 Sterne x bedeutet was? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Es bedeutet, gehen Sie zu dieser Adresse und legte, welche Zahl da? 1019 00:45:42,590 --> 00:45:43,870 Legte die Zahl 42 gibt. 1020 00:45:43,870 --> 00:45:47,590 Stern y bedeutet gehen, was auf y und setzen die Zahl 13 gibt. 1021 00:45:47,590 --> 00:45:48,600 >> Aber warten Sie eine Minute. 1022 00:45:48,600 --> 00:45:51,640 Was ist in y im Moment? 1023 00:45:51,640 --> 00:45:54,950 Welche Adresse ist y Speichern? 1024 00:45:54,950 --> 00:45:55,770 Wir wissen es nicht, nicht wahr? 1025 00:45:55,770 --> 00:45:59,230 Wir haben nicht ein einziges Mal verwenden die Zuordnung Betreiber mit y. 1026 00:45:59,230 --> 00:46:03,370 So y wie erklärt in der zweiten Zeile der Code ist nur einige Müll Wert, ein großes 1027 00:46:03,370 --> 00:46:04,760 Fragezeichen sozusagen. 1028 00:46:04,760 --> 00:46:07,230 Es könnte zufällig gerichtet sein nichts in Erinnerung, die 1029 00:46:07,230 --> 00:46:08,340 ist in der Regel schlecht. 1030 00:46:08,340 --> 00:46:13,540 >> Also, sobald wir treffen diese Zeile gibt, Sterne y gleich 13, etwas Schlechtes, 1031 00:46:13,540 --> 00:46:17,220 etwas sehr Schlimmes ist etwa zu Binky passieren. 1032 00:46:17,220 --> 00:46:25,810 Also mal sehen, was los ist, um am Ende geschieht hier Binky in dieser Minute 1033 00:46:25,810 --> 00:46:26,200 oder so aussehen. 1034 00:46:26,200 --> 00:46:26,490 >> [VIDEO PLAYBACK] 1035 00:46:26,490 --> 00:46:26,745 >> -Hey, Binky. 1036 00:46:26,745 --> 00:46:27,000 Aufwachen. 1037 00:46:27,000 --> 00:46:29,296 Es ist Zeit für Zeiger Spaß. 1038 00:46:29,296 --> 00:46:30,680 >> -Was ist das? 1039 00:46:30,680 --> 00:46:31,980 Erfahren Sie mehr über Zeiger? 1040 00:46:31,980 --> 00:46:34,010 Oh, Goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Nun, um loszulegen, ich denke, wir sind gehen, um ein paar Zeiger müssen. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 Dieser Code weist zwei Zeiger das kann auf ganze Zahlen verweisen. 1044 00:46:41,650 --> 00:46:43,760 >> -OK, gut, ich sehe die beiden Zeiger. 1045 00:46:43,760 --> 00:46:45,850 Aber sie scheinen nicht zu sein zeigt auf nichts. 1046 00:46:45,850 --> 00:46:46,490 >> -Das ist richtig. 1047 00:46:46,490 --> 00:46:48,630 Zunächst tun Zeiger nicht verweisen auf nichts. 1048 00:46:48,630 --> 00:46:51,700 Die Dinge, die sie zeigen, werden als pointees und deren Einrichtung ist ein 1049 00:46:51,700 --> 00:46:52,850 getrennten Schritt. 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, rechts, rechts. 1051 00:46:53,740 --> 00:46:54,500 Das wusste ich. 1052 00:46:54,500 --> 00:46:56,270 Die pointees sind getrennt. 1053 00:46:56,270 --> 00:46:58,553 So wie Sie vergeben einen pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 Nun, weist dieser Code eine neue Zahlen pointee, und dieser Teil setzt x 1056 00:47:03,707 --> 00:47:05,520 auf ihn verweisen. 1057 00:47:05,520 --> 00:47:06,760 >> -Hey, das sieht besser. 1058 00:47:06,760 --> 00:47:08,520 So machen es etwas zu tun. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Ich werde Dereferenzierung der Zeiger x zu speichern die Zahl 42 in ihre pointee. 1061 00:47:14,110 --> 00:47:17,660 Für diesen Trick, ich brauche meine Magie Zauberstab der Dereferenzierung. 1062 00:47:17,660 --> 00:47:20,695 >> -Ihr Zauberstab der Dereferenzierung? 1063 00:47:20,695 --> 00:47:22,632 Uh, das ist großartig. 1064 00:47:22,632 --> 00:47:24,620 >> -Dies ist, was der Code aussieht. 1065 00:47:24,620 --> 00:47:27,526 Ich werde einfach richten Sie die Nummer, und - 1066 00:47:27,526 --> 00:47:28,250 >> -Hey, schau. 1067 00:47:28,250 --> 00:47:29,680 Dort geht es. 1068 00:47:29,680 --> 00:47:34,520 So tut ein dereference auf x folgt der Pfeil auf seine pointee zugreifen. 1069 00:47:34,520 --> 00:47:36,690 In diesem Fall ist es in 42 zu speichern. 1070 00:47:36,690 --> 00:47:40,890 Hey, versuchen Sie es, um die Nummer zu speichern 13 durch den anderen Zeiger, y. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Ich werde einfach gehen hier auf y und die Zahl 13 gesetzt aufstehen. 1073 00:47:46,810 --> 00:47:50,890 Und dann nehmen Sie den Zauberstab Dereferenzierung und einfach - 1074 00:47:50,890 --> 00:47:52,430 Whoa! 1075 00:47:52,430 --> 00:47:53,030 >> -Oh, hey. 1076 00:47:53,030 --> 00:47:54,610 Das hat nicht funktioniert. 1077 00:47:54,610 --> 00:47:58,200 Sprich, Binky, ich glaube nicht, das Dereferenzierung y ist eine gute Idee, 1078 00:47:58,200 --> 00:48:01,370 weil die Einrichtung der pointee ist ein separater Schritt. 1079 00:48:01,370 --> 00:48:03,460 Und ich glaube nicht, dass wir jemals getan hat. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Guter Punkt. 1082 00:48:05,160 --> 00:48:07,410 >> -Ja, wir vergeben den Zeiger y. 1083 00:48:07,410 --> 00:48:10,045 Aber wir haben nie stellen Sie ihn auf deuten auf eine pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Sehr aufmerksam. 1086 00:48:12,170 --> 00:48:13,790 >> -Hey, du siehst gut da, Binky. 1087 00:48:13,790 --> 00:48:16,920 Können Sie das reparieren, so dass y Punkte auf den gleichen pointee als x? 1088 00:48:16,920 --> 00:48:17,810 >> -Sure. 1089 00:48:17,810 --> 00:48:20,300 Ich werde mit meinem Zauberstab Zeiger Zuordnung. 1090 00:48:20,300 --> 00:48:22,240 >> -Ist das wird eine sein Problem wie vorher? 1091 00:48:22,240 --> 00:48:22,665 >> -No. 1092 00:48:22,665 --> 00:48:24,300 Dies berührt nicht die pointees. 1093 00:48:24,300 --> 00:48:27,880 Es ändert nur einen Zeiger darauf auf die gleiche Sache wie der andere. 1094 00:48:27,880 --> 00:48:28,970 >> -Oh, ich verstehe. 1095 00:48:28,970 --> 00:48:31,730 Jetzt y Punkte auf der gleichen Stelle wie x. 1096 00:48:31,730 --> 00:48:32,450 So warten. 1097 00:48:32,450 --> 00:48:33,490 Nun y befestigt ist. 1098 00:48:33,490 --> 00:48:34,630 Es hat eine pointee. 1099 00:48:34,630 --> 00:48:36,520 So können Sie versuchen, den Zauberstab von Dereferenzierung wieder 1100 00:48:36,520 --> 00:48:39,200 um die 13 über senden. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Hier geht. 1103 00:48:41,570 --> 00:48:42,870 >> -Hey, schau dir das an. 1104 00:48:42,870 --> 00:48:44,320 Jetzt Dereferenzieren Werke auf y. 1105 00:48:44,320 --> 00:48:47,020 Und weil die Zeiger teilen dass man pointee, sie 1106 00:48:47,020 --> 00:48:48,585 beide sehen den 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Ja. 1108 00:48:49,040 --> 00:48:49,670 Teilen. 1109 00:48:49,670 --> 00:48:50,380 Wie auch immer. 1110 00:48:50,380 --> 00:48:52,290 So werden wir die Plätze jetzt? 1111 00:48:52,290 --> 00:48:52,970 >> -Oh, schau. 1112 00:48:52,970 --> 00:48:54,150 Wir haben keine Zeit mehr. 1113 00:48:54,150 --> 00:48:55,200 >> -Aber - 1114 00:48:55,200 --> 00:48:57,060 >> -Denken Sie daran, die drei Zeiger Regeln. 1115 00:48:57,060 --> 00:49:00,100 Die Nummer eins, die grundlegende Struktur ist, dass man einen Zeiger haben. 1116 00:49:00,100 --> 00:49:02,170 Und es weist über einem pointee. 1117 00:49:02,170 --> 00:49:04,160 Aber der Zeiger und pointee getrennt. 1118 00:49:04,160 --> 00:49:06,460 Und die häufiger Fehler ist, Einrichten eines Zeigers, sondern 1119 00:49:06,460 --> 00:49:08,540 Vergessen gegeben eine pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Nummer zwei, startet Zeiger Dereferenzierung am Zeiger und folgt seiner 1121 00:49:12,460 --> 00:49:14,570 Pfeil über seine pointee zugreifen. 1122 00:49:14,570 --> 00:49:18,640 Wie wir alle wissen, dies funktioniert nur, wenn es ist ein pointee, die zurück bekommt 1123 00:49:18,640 --> 00:49:19,790 Regel Nummer eins. 1124 00:49:19,790 --> 00:49:23,670 >> Nummer drei, nimmt Zeigerzuweisung einen Zeiger und Veränderungen es darauf 1125 00:49:23,670 --> 00:49:25,850 das gleiche wie pointee anderen Zeiger. 1126 00:49:25,850 --> 00:49:27,840 So nach der Abtretung die beiden Zeiger wird 1127 00:49:27,840 --> 00:49:29,430 weisen auf die gleiche pointee. 1128 00:49:29,430 --> 00:49:31,600 Manchmal, dass heißt Sharing. 1129 00:49:31,600 --> 00:49:33,430 Und das ist alles dort ist zu ihm, wirklich. 1130 00:49:33,430 --> 00:49:33,840 Bye bye jetzt. 1131 00:49:33,840 --> 00:49:34,300 >> [END VIDEO PLAYBACK] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID MALAN: Also mehr auf Zeiger, mehr auf Binky nächste Woche. 1133 00:49:36,940 --> 00:49:38,190 Wir informieren Sie am Montag zu sehen. 1134 00:49:38,190 --> 00:49:42,187