1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. MALAN: Va bene. 2 00:00:08,160 --> 00:00:11,170 Questo è CS50, e questa è la fine della settimana due. 3 00:00:11,170 --> 00:00:14,650 Se vi aspettate di avere fame in questo periodo di domani, sappiamo che stiamo andando 4 00:00:14,650 --> 00:00:18,920 di convocare un piccolo gruppo domani, Giovedi, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 C'è questo URL qui se vuoi RSVP. 6 00:00:21,460 --> 00:00:25,270 Lo spazio è limitato, quindi ti prego di perdonare se il modulo è riempito per il momento si 7 00:00:25,270 --> 00:00:26,680 compili questo. 8 00:00:26,680 --> 00:00:29,400 Un altro URL però che possa essere di interesse è questo. 9 00:00:29,400 --> 00:00:32,409 >> Quindi, in quasi un mese di tempo, il corso sta per essere messa a disposizione 10 00:00:32,409 --> 00:00:36,090 tanto più in generale tramite edx, attraverso la quale la gente su Internet sarà 11 00:00:36,090 --> 00:00:39,580 in grado di seguire, partecipare al corso abbastanza attivamente, in effetti. 12 00:00:39,580 --> 00:00:43,070 Saranno utilizzando il CS50 e CS50 Appliance discutere e la maggior parte del 13 00:00:43,070 --> 00:00:45,840 svariati strumenti software che già hanno utilizzato questo semestre. 14 00:00:45,840 --> 00:00:49,030 E una delle iniziative vorremmo assumere come un esperimento di quest'anno 15 00:00:49,030 --> 00:00:53,120 è quello di vedere quanto siamo in grado di tradurre i contenuti in altre parlato e 16 00:00:53,120 --> 00:00:54,110 lingue scritte. 17 00:00:54,110 --> 00:00:58,000 Quindi, se si potrebbe avere un interesse a partecipare a questo progetto, in base al quale 18 00:00:58,000 --> 00:01:02,090 ci fornirà trascrizioni inglese e sottotitoli per il suo corso 19 00:01:02,090 --> 00:01:05,190 lezioni e pantaloncini e seminari e sezioni e simili - 20 00:01:05,190 --> 00:01:08,700 se si parla fluentemente o scrivere correntemente un'altra lingua, avremmo 21 00:01:08,700 --> 00:01:12,240 l'amore di impegnarsi in questo progetto, per cui si prende uno o più dei 22 00:01:12,240 --> 00:01:15,340 video, traducendoli in una lingua che si conosce abbastanza bene. 23 00:01:15,340 --> 00:01:19,050 Per dare un senso di interfaccia, c'è questo web-based interfaccia utente 24 00:01:19,050 --> 00:01:22,330 che useremo che creerà essenzialmente un utente come questo. 25 00:01:22,330 --> 00:01:24,520 Questo mi stava insegnando un po 'di Halloween fa. 26 00:01:24,520 --> 00:01:27,710 E sul lato destro c'è in nero accanto a queste indicazioni temporali, 27 00:01:27,710 --> 00:01:31,300 vedrai le varie cose che sono uscite dalla mia bocca quel giorno. 28 00:01:31,300 --> 00:01:34,660 E poi sotto, sarete in grado di tradurre in qualche altra lingua. 29 00:01:34,660 --> 00:01:37,840 Esattamente la mappatura tra, in questo caso, inglese 30 00:01:37,840 --> 00:01:38,660 e, diciamo, spagnolo. 31 00:01:38,660 --> 00:01:40,480 Quindi è in realtà una molto user-friendly strumento. 32 00:01:40,480 --> 00:01:43,690 È possibile tornare indietro e avanti veloce molto rapidamente con le scorciatoie da tastiera. 33 00:01:43,690 --> 00:01:46,710 Quindi, se volete prendere parte a questo esperimento e sono le tue parole 34 00:01:46,710 --> 00:01:50,730 visto e letto da potenzialmente migliaia di persone là fuori, per favore mi sento 35 00:01:50,730 --> 00:01:51,960 liberi di partecipare. 36 00:01:51,960 --> 00:01:56,940 >> Ora, una parola sul gattino da Lunedi, perché abbiamo inviato una troppo 37 00:01:56,940 --> 00:01:58,120 messaggio di paura. 38 00:01:58,120 --> 00:02:02,130 Si rendono conto che, come suggerisce l'orario di ufficio e, come suggeriscono le sezioni, il 39 00:02:02,130 --> 00:02:05,110 progettazione del corso è molto di aver studenti collaborazione e 40 00:02:05,110 --> 00:02:09,250 parlando di lavorare con set di problemi e problemi insieme. 41 00:02:09,250 --> 00:02:13,630 E in realtà la linea è in fondo a, ancora una volta, il lavoro che in ultima analisi, 42 00:02:13,630 --> 00:02:16,420 dovrebbe presentare dovrebbe essere il proprio. 43 00:02:16,420 --> 00:02:19,080 E così è, in tutta onestà - in orario di ufficio, è del tutto normale - 44 00:02:19,080 --> 00:02:21,560 è del tutto prevedibile, anche - di essere in chat con un po 'di 45 00:02:21,560 --> 00:02:22,370 amici accanto a voi. 46 00:02:22,370 --> 00:02:25,240 Se lui o lei è alle prese con qualche argomento, e siete come, oh, ben 47 00:02:25,240 --> 00:02:27,750 di darvi un assaggio di qualche linea di codice che ho scritto. 48 00:02:27,750 --> 00:02:28,290 Va bene. 49 00:02:28,290 --> 00:02:28,700 Succede. 50 00:02:28,700 --> 00:02:31,580 E questo è molto favorevole, credo che, con il processo di apprendimento. 51 00:02:31,580 --> 00:02:35,270 Dove la linea, di nuovo, si è attraversato quando la testa è una sorta di inclinato sopra 52 00:02:35,270 --> 00:02:38,800 qui per i secondi troppi o minuti che in realtà per avere solo 53 00:02:38,800 --> 00:02:41,250 stata un'occasione di sblocco per il tuo amico. 54 00:02:41,250 --> 00:02:43,870 E certamente, quando le cose si scambiate via e-mail e Dropbox e 55 00:02:43,870 --> 00:02:45,350 simili, vi è anche la linea. 56 00:02:45,350 --> 00:02:48,940 Quindi, con tutti i mezzi, sentirsi a proprio agio e si sentono incoraggiati a chattare con gli amici 57 00:02:48,940 --> 00:02:51,270 e compagni di classe circa i pset e altro ancora. 58 00:02:51,270 --> 00:02:54,680 E proprio rendersi conto che ciò che in ultima analisi, presenta in realtà dovrebbe essere il 59 00:02:54,680 --> 00:02:57,780 prodotto della vostra creazione e non qualcun altro. 60 00:02:57,780 --> 00:03:01,010 >> Quindi, nella stessa vena di creature coccolone, si potrebbe 61 00:03:01,010 --> 00:03:02,820 conoscenza di questo ragazzo qui. 62 00:03:02,820 --> 00:03:06,180 Quindi questo è un film terribilmente formaggio da anni fa. 63 00:03:06,180 --> 00:03:08,680 Qualcuno qui visto Balle spaziali? 64 00:03:08,680 --> 00:03:09,120 Bene. 65 00:03:09,120 --> 00:03:10,220 Quindi, un buon numero qui. 66 00:03:10,220 --> 00:03:13,840 Quindi questo è il nostro modo meravigliosamente accademico di introdurre oggi in ultima analisi 67 00:03:13,840 --> 00:03:15,130 il concetto di crittografia. 68 00:03:15,130 --> 00:03:19,010 E così uno dei problemi di dominio specifici per pset 2, che verrà 69 00:03:19,010 --> 00:03:22,770 domani sera tardi, è quello di tuffarsi nel mondo della crittografia, che 70 00:03:22,770 --> 00:03:26,380 è l'arte di crittografia o cifratura dei dati. 71 00:03:26,380 --> 00:03:30,160 E questo si riferisce in ultima analisi, al mondo della sicurezza. 72 00:03:30,160 --> 00:03:34,440 >> Ora di sicurezza per la maggior parte ci si presenta sotto forma di meccanismi piuttosto banali. 73 00:03:34,440 --> 00:03:36,920 Tutti noi abbiamo nomi utente e password. 74 00:03:36,920 --> 00:03:41,350 E tutti noi abbiamo nomi utente e le password molto male, molto probabilmente. 75 00:03:41,350 --> 00:03:45,250 Se la password è la stessa su più siti web, che probabilmente non è 76 00:03:45,250 --> 00:03:47,920 l'idea migliore, come vedremo verso la fine del semestre. 77 00:03:47,920 --> 00:03:51,680 Se la password è scritto su un post-it - non è uno scherzo - sul 78 00:03:51,680 --> 00:03:55,130 monitor, anche questo non è necessariamente il miglior design, ma piuttosto una comune 79 00:03:55,130 --> 00:03:56,140 fenomeno. 80 00:03:56,140 --> 00:04:00,420 E se non si sta usando la crittografia per crittografare le password, sono 81 00:04:00,420 --> 00:04:01,610 particolarmente vulnerabili. 82 00:04:01,610 --> 00:04:04,670 Quindi, se pensi di essere super intelligente da avere una parola nascosta 83 00:04:04,670 --> 00:04:07,740 documentare qualche parte sul vostro disco rigido che ha tutte le password, ma 84 00:04:07,740 --> 00:04:10,550 si trova in una cartella che non si sta andando a guardare dentro, anche questo non è molto 85 00:04:10,550 --> 00:04:11,540 meccanismo sicuro. 86 00:04:11,540 --> 00:04:15,100 E allora cosa pset 2 introdurrà è questa arte di crittografia e 87 00:04:15,100 --> 00:04:18,300 scrambling informazioni in modo che cose come le password sono 88 00:04:18,300 --> 00:04:19,500 tanto più sicura. 89 00:04:19,500 --> 00:04:24,500 Al fine di motivare il problema del mondo reale con una molto non nel mondo reale 90 00:04:24,500 --> 00:04:28,740 scenario, lasciate che vi presenti a uno dei nostri video preferiti qui da questa 91 00:04:28,740 --> 00:04:29,895 film, Balle spaziali. 92 00:04:29,895 --> 00:04:30,565 >> [RIPRODUZIONE VIDEO] 93 00:04:30,565 --> 00:04:32,995 -Casco, è demonio, cosa sta succedendo? 94 00:04:32,995 --> 00:04:34,730 Cosa stai facendo a mia figlia? 95 00:04:34,730 --> 00:04:38,960 -Mi permetta di introdurre il chirurgo plastico brillante giovane, il dottor Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, il più grande uomo di lavoro naso in tutta la 97 00:04:43,290 --> 00:04:45,526 universo e Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Vostra Altezza. 99 00:04:46,450 --> 00:04:47,380 Nose-lavoro? 100 00:04:47,380 --> 00:04:48,035 Non capisco. 101 00:04:48,035 --> 00:04:49,480 Ha già avuto il naso. 102 00:04:49,480 --> 00:04:51,490 E 'stato un dolce 16 presenti. 103 00:04:51,490 --> 00:04:53,090 -No, non è quello che pensi. 104 00:04:53,090 --> 00:04:55,150 E 'molto, molto peggio. 105 00:04:55,150 --> 00:04:59,860 Se non mi dai la combinazione della protezione dell'aria, il dottor Schlotkin sarà 106 00:04:59,860 --> 00:05:04,135 dare tua figlia il naso vecchio. 107 00:05:04,135 --> 00:05:05,385 -No! 108 00:05:08,202 --> 00:05:10,186 Dove l'hai preso? 109 00:05:10,186 --> 00:05:11,178 -Va bene. 110 00:05:11,178 --> 00:05:11,674 Lo dirò. 111 00:05:11,674 --> 00:05:12,666 Lo dirò. 112 00:05:12,666 --> 00:05:14,154 -No, papà, no. 113 00:05:14,154 --> 00:05:15,150 Non devi. 114 00:05:15,150 --> 00:05:16,460 -Hai ragione, mia cara. 115 00:05:16,460 --> 00:05:18,450 Mi mancherà il naso nuovo. 116 00:05:18,450 --> 00:05:21,550 Ma non voglio dire loro la combinazione non importa quale. 117 00:05:21,550 --> 00:05:23,100 -Molto bene. 118 00:05:23,100 --> 00:05:25,510 Dr. Schlotkin, fai del tuo peggio. 119 00:05:25,510 --> 00:05:26,760 -Il piacere è mio. 120 00:05:30,560 --> 00:05:31,180 -No! 121 00:05:31,180 --> 00:05:33,450 Aspetta, aspetta. 122 00:05:33,450 --> 00:05:34,770 Lo dirò. 123 00:05:34,770 --> 00:05:36,400 Lo dirò. 124 00:05:36,400 --> 00:05:38,630 -Sapevo che avrebbe funzionato. 125 00:05:38,630 --> 00:05:42,040 Va bene, a me. 126 00:05:42,040 --> 00:05:46,890 -La combinazione è uno. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Due. 130 00:05:48,950 --> 00:05:49,370 -Due. 131 00:05:49,370 --> 00:05:50,450 -Due. 132 00:05:50,450 --> 00:05:50,715 -Tre 133 00:05:50,715 --> 00:05:51,380 -Tre. 134 00:05:51,380 --> 00:05:52,390 -Tre. 135 00:05:52,390 --> 00:05:53,200 -Quattro. 136 00:05:53,200 --> 00:05:53,720 -Quattro. 137 00:05:53,720 --> 00:05:55,830 -Quattro. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Cinque. 140 00:05:57,120 --> 00:05:58,560 -Cinque. 141 00:05:58,560 --> 00:06:03,770 -Quindi, la combinazione è uno, due, tre, quattro, cinque. 142 00:06:03,770 --> 00:06:06,745 Questa è la più stupida combinazione che abbia mai sentito in vita mia. 143 00:06:06,745 --> 00:06:09,290 Questo è il genere di cose un idiota avrebbe sul suo bagaglio. 144 00:06:09,290 --> 00:06:11,540 -Grazie, Vostra Altezza. 145 00:06:11,540 --> 00:06:12,940 -Che cosa hai fatto? 146 00:06:12,940 --> 00:06:14,230 -Ho spento il muro. 147 00:06:14,230 --> 00:06:14,630 -No, non l'hai fatto. 148 00:06:14,630 --> 00:06:15,430 Si spense il film intero. 149 00:06:15,430 --> 00:06:16,722 -Devo aver premuto il tasto sbagliato. 150 00:06:16,722 --> 00:06:18,078 -Beh, è ​​rimesso in. 151 00:06:18,078 --> 00:06:18,805 Mettere il filmato su. 152 00:06:18,805 --> 00:06:19,080 -Sì, signore. 153 00:06:19,080 --> 00:06:19,270 Sì, signore. 154 00:06:19,270 --> 00:06:19,830 -Andiamo, Erna. 155 00:06:19,830 --> 00:06:20,270 Vieni, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Naturalmente sai che avrai ancora per la fatturazione per questo. 157 00:06:27,400 --> 00:06:28,325 -Beh, ha funzionato? 158 00:06:28,325 --> 00:06:29,550 Dov'e 'la porta? 159 00:06:29,550 --> 00:06:29,910 -Ha funzionato, signore. 160 00:06:29,910 --> 00:06:30,770 Abbiamo la combinazione. 161 00:06:30,770 --> 00:06:31,390 -Grande. 162 00:06:31,390 --> 00:06:35,630 Ora possiamo prendere ogni ultimo respiro di aria fresca dal pianeta Druidia. 163 00:06:35,630 --> 00:06:36,550 Qual è la combinazione? 164 00:06:36,550 --> 00:06:38,805 -Uno, due, tre, quattro, cinque. 165 00:06:38,805 --> 00:06:40,610 -Uno, due, tre, quattro, cinque? 166 00:06:40,610 --> 00:06:41,070 -Sì. 167 00:06:41,070 --> 00:06:41,760 -E 'incredibile. 168 00:06:41,760 --> 00:06:45,200 Ho la stessa combinazione sul mio bagaglio. 169 00:06:45,200 --> 00:06:47,800 Preparare Spaceball 1 per partenza immediata. 170 00:06:47,800 --> 00:06:48,536 -Sì, signore. 171 00:06:48,536 --> 00:06:52,350 -E cambiare la combinazione sul mio bagaglio. 172 00:06:52,350 --> 00:06:53,250 -Ahi! 173 00:06:53,250 --> 00:06:55,020 [END RIPRODUZIONE VIDEO] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. MALAN: Un film incredibile si dovrebbe ora vedere tutti. 175 00:07:00,600 --> 00:07:06,540 Quindi il contesto è che con i dati insicuri viene un'opportunità per 176 00:07:06,540 --> 00:07:07,790 cifrare e ad esso scramble. 177 00:07:07,790 --> 00:07:11,060 E così questo, per esempio, è un esempio di un messaggio crittografato. 178 00:07:11,060 --> 00:07:12,980 Questo in realtà dice qualcosa in inglese. 179 00:07:12,980 --> 00:07:14,750 Ma non è chiaramente del tutto evidente. 180 00:07:14,750 --> 00:07:17,360 E torneremo al punto di oggi a prendere in giro a parte ciò che questo segreto 181 00:07:17,360 --> 00:07:18,380 messaggio qui è. 182 00:07:18,380 --> 00:07:22,370 Ma nel mondo reale dei computer, le cose non sembra nemmeno che potrebbero 183 00:07:22,370 --> 00:07:23,440 essere frasi in inglese. 184 00:07:23,440 --> 00:07:27,500 Per esempio, questo è quello che si potrebbe trovare su un Linux standard o Mac o 185 00:07:27,500 --> 00:07:32,080 Unix in un file che è stato un tempo chiamato il file delle password. 186 00:07:32,080 --> 00:07:34,170 Al giorno d'oggi, è stato spostato in altri luoghi. 187 00:07:34,170 --> 00:07:38,660 Ma se si guarda al posto giusto su un sistema, si vedrà non solo la vostra 188 00:07:38,660 --> 00:07:41,430 nome utente o quella di altre persone nel sistema, ma vedrete un 189 00:07:41,430 --> 00:07:43,410 versione crittografata della propria password. 190 00:07:43,410 --> 00:07:47,800 In effetti, la cripta parola ci suggerisce che la roba che segue è crittografato. 191 00:07:47,800 --> 00:07:52,030 E questa serie di lettere apparentemente casuali e caratteri e numeri e 192 00:07:52,030 --> 00:07:56,370 così via, possono essere decifrati solo generalmente conoscendo un segreto - 193 00:07:56,370 --> 00:07:58,600 una parola segreta, un numero segreto. 194 00:07:58,600 --> 00:08:02,760 E così in effetti, l'arte della crittografia in ultima analisi si riduce a fidarsi di alcuni 195 00:08:02,760 --> 00:08:05,700 ordinare e conoscere qualcosa che qualcun altro non lo fa. 196 00:08:05,700 --> 00:08:10,010 Di seguito verrà illustrato in dettaglio un po 'di più oggi e in pset a venire. 197 00:08:10,010 --> 00:08:11,860 >> Ed ora una parola sul passaggio / sicuro. 198 00:08:11,860 --> 00:08:15,250 Quindi, in particolare, come alcuni di voi hanno tuffò pset 1, l 'apparecchio, e 199 00:08:15,250 --> 00:08:18,390 un mondo nuovo per lei, si rese conto che frustrazioni e 200 00:08:18,390 --> 00:08:21,340 difficoltà di confusione e solo tecnico sono da aspettarsi. 201 00:08:21,340 --> 00:08:24,410 Specialmente con l'pset prima, dove c'è solo così tanto nuovo, solo per 202 00:08:24,410 --> 00:08:28,830 familiarità con ls e cd e tutti questi comandi arcani in un ambiente nuovo. 203 00:08:28,830 --> 00:08:32,679 E che è separato dal materiale reale e la programmazione stessa. 204 00:08:32,679 --> 00:08:35,960 Quindi rendersi conto, anche, che ci sono certamente ore di ufficio che esistono come 205 00:08:35,960 --> 00:08:36,770 la struttura di supporto. 206 00:08:36,770 --> 00:08:38,620 Sezioni iniziare il prossimo Domenica. 207 00:08:38,620 --> 00:08:41,990 Ma la cosa più importante, se ti senti solo che questo non è il 208 00:08:41,990 --> 00:08:44,420 mondo per voi, si rende conto che in realtà si limita a prendere tempo. 209 00:08:44,420 --> 00:08:47,520 E se non fosse per l'occasione anni fa per me di prendere una classe 210 00:08:47,520 --> 00:08:50,840 pass / fail, onestamente, non avrei mai nemmeno messo piede in classe. 211 00:08:50,840 --> 00:08:53,520 E si può cambiare questo fino, diciamo, il Lunedi quinto corso. 212 00:08:53,520 --> 00:08:57,110 Quindi, se siete sul bordo ora, si rendono conto che invece di testa in un altro 213 00:08:57,110 --> 00:09:01,000 acque del tutto, non certamente in considerazione il solo cambio di pass / fail. 214 00:09:01,000 --> 00:09:03,750 Anche in questo caso, non c'è davvero questa cultura qui a Harvard di prendere le cose 215 00:09:03,750 --> 00:09:08,080 pass / fail dato che tutti vuole davvero raggiungere o otterrebbe. 216 00:09:08,080 --> 00:09:11,470 Ma, francamente, questo è un modo meraviglioso di provare qualcosa che potrebbe non 217 00:09:11,470 --> 00:09:13,110 essere familiare a voi. 218 00:09:13,110 --> 00:09:17,090 E si finisce per fare nella maggior parte dei casi abbastanza bene, forse 219 00:09:17,090 --> 00:09:18,040 molto per la vostra sorpresa. 220 00:09:18,040 --> 00:09:20,850 E in termini più concreti, quello che penso pass / fail generalmente fa, 221 00:09:20,850 --> 00:09:23,350 tanto più che si potrebbe avere sperimentato con pset 0, se hai messo 222 00:09:23,350 --> 00:09:27,200 in 10 ore, 15 ore, 25 ore in alcuni pset - e tu sei solo battere 223 00:09:27,200 --> 00:09:28,180 la testa contro il muro, 224 00:09:28,180 --> 00:09:29,850 e sta diventando sempre eccellente a tarda notte, 225 00:09:29,850 --> 00:09:31,880 ma hai preso la pset come il 90% della strada, 226 00:09:31,880 --> 00:09:33,780 sai che proprio non riesco a capire una cosa - 227 00:09:33,780 --> 00:09:36,830 pass / fail prende davvero il bordo al largo di una classe come questa, in cui è possibile ordinare 228 00:09:36,830 --> 00:09:39,150 tranquillamente dire di bene, lo so che non è perfetto. 229 00:09:39,150 --> 00:09:40,470 Ma ho lavorato il culo su questo. 230 00:09:40,470 --> 00:09:42,410 Sono abbastanza contento di dove è finito. 231 00:09:42,410 --> 00:09:44,780 E in grado di soddisfare le aspettative di pass / fail. 232 00:09:44,780 --> 00:09:46,850 Quindi non tenere a mente. 233 00:09:46,850 --> 00:09:47,140 >> Bene. 234 00:09:47,140 --> 00:09:50,980 Così quelli di voi che hanno lottato per utilizzare la Harvard University Wi-Fi sapere 235 00:09:50,980 --> 00:09:54,780 che c'è un SSID CS50, una connessione Wi-Fi che si girano 236 00:09:54,780 --> 00:09:56,520 potrebbe avere più fortuna per. 237 00:09:56,520 --> 00:09:59,430 E 'un po' ironico che la password per questo - se si desidera provare 238 00:09:59,430 --> 00:10:03,080 il collegamento a questo per una migliore velocità e farci sapere se si tratta di niente di meglio - 239 00:10:03,080 --> 00:10:09,240 è uno, due, tre, quattro, cinque, tutta la strada fino a otto perché otto è 240 00:10:09,240 --> 00:10:10,270 più sicuro di cinque. 241 00:10:10,270 --> 00:10:15,520 Quindi, se avete bisogno di password Wi-Fi, la connessione a CS50 wireless qui. 242 00:10:15,520 --> 00:10:16,950 Uno, due, tre, quattro, cinque, sei, sette, otto. 243 00:10:16,950 --> 00:10:20,440 E messaggi il CS50 Discutere se avete ancora problemi di connettività intermittente, 244 00:10:20,440 --> 00:10:24,880 e ti faremo i poteri che sanno essere per questo spazio. 245 00:10:24,880 --> 00:10:25,180 >> Bene. 246 00:10:25,180 --> 00:10:30,350 Quindi un teaser rapida, soprattutto per quelli di voi che sono ragazzi o ragazze fan 247 00:10:30,350 --> 00:10:31,900 di tutte le cose di Apple. 248 00:10:31,900 --> 00:10:37,566 Quello che ho riesumato da qualche anno fa era questo file qui, ilock.c, solo per 249 00:10:37,566 --> 00:10:40,930 tipo di rendere più concreto e più complesse alcune delle C più fondamentale 250 00:10:40,930 --> 00:10:42,350 programmi che abbiamo scritto. 251 00:10:42,350 --> 00:10:44,360 Così ho aperto questo file, ilock.c. 252 00:10:44,360 --> 00:10:46,830 E 'disponibile nella pagina lezioni per oggi. 253 00:10:46,830 --> 00:10:49,470 Sulla sinistra, si vede un lungo elenco di funzioni. 254 00:10:49,470 --> 00:10:51,860 Quindi il tizio che ha scritto questo ha scritto un sacco di funzioni, 255 00:10:51,860 --> 00:10:53,290 più appena principale. 256 00:10:53,290 --> 00:10:55,490 Ha usato un sacco di librerie qui. 257 00:10:55,490 --> 00:11:00,450 E se si parte scorrere, di cosa si tratta in realtà è l'esatto 258 00:11:00,450 --> 00:11:04,670 in primo luogo, io credo, crack per l'iPhone originale. 259 00:11:04,670 --> 00:11:08,000 Quando si voleva per il jailbreak di iPhone originale, il che significa che untether 260 00:11:08,000 --> 00:11:11,800 da AT & T e in realtà installare un software speciale su di esso e fare le cose 261 00:11:11,800 --> 00:11:13,510 che Apple non voleva che la gente da fare - 262 00:11:13,510 --> 00:11:17,020 Beh, qualcuno ha avuto il tempo di capire esattamente come si può sfruttare 263 00:11:17,020 --> 00:11:20,880 difetti del software, errori, bug nel software di Apple. 264 00:11:20,880 --> 00:11:22,650 E così è nato ilock.c. 265 00:11:22,650 --> 00:11:26,670 Che se è stato compilato su un computer e installato su un iPhone che 266 00:11:26,670 --> 00:11:29,810 è stato collegato al computer tramite, per esempio, un cavo USB, questo darebbe 267 00:11:29,810 --> 00:11:33,360 privilegi di amministratore o di root sul vostro iPhone e ti permette di fare più o meno 268 00:11:33,360 --> 00:11:34,170 quello che vuoi. 269 00:11:34,170 --> 00:11:36,740 >> E così c'è stato questo gatto affascinante e topo tra Apple e 270 00:11:36,740 --> 00:11:39,920 il resto del mondo, in particolare in quanto, come molte aziende, cercano di bloccare 271 00:11:39,920 --> 00:11:43,220 le loro cose in modo che si può fare solo con essa ciò che intendono. 272 00:11:43,220 --> 00:11:46,620 Ma grazie a gente come questa e la loro comprensione di basso livello 273 00:11:46,620 --> 00:11:50,580 i dettagli e, in questo caso, di programmazione C e un sacco di costrutti familiari 274 00:11:50,580 --> 00:11:54,630 che abbiamo iniziato a giocare con, si è in grado di sfruttare davvero il 275 00:11:54,630 --> 00:11:59,050 hardware in modo si vede in forma e non necessariamente una qualche entità aziendale. 276 00:11:59,050 --> 00:12:01,360 Così, per esempio, non ho idea di che cosa tutto questo sta facendo. 277 00:12:01,360 --> 00:12:03,220 Ma GetVersion sembra abbastanza semplice. 278 00:12:03,220 --> 00:12:05,480 E sembra che questa è una funzione che questa persona ha scritto. 279 00:12:05,480 --> 00:12:09,240 Prendete un po 'tipo di numero intero come argomento, non restituisce nulla, ma 280 00:12:09,240 --> 00:12:13,080 sembra loop con un ciclo for qui e una condizione if, se la condizione, 281 00:12:13,080 --> 00:12:15,620 rottura, e si riferisce in qualche modo i numeri di versione. 282 00:12:15,620 --> 00:12:16,700 Se scorrere verso il basso - 283 00:12:16,700 --> 00:12:19,570 anche se molte di queste parole chiave stanno per essere nuovo, e c'è una 284 00:12:19,570 --> 00:12:22,590 bel po 'di funzioni in qui non abbiamo mai visto e forse non mai vedere oltre 285 00:12:22,590 --> 00:12:23,830 corso del semestre - 286 00:12:23,830 --> 00:12:27,150 alla fine della giornata, segue le stesse regole e la logica che ci sono già stati 287 00:12:27,150 --> 00:12:28,760 gioca con finora. 288 00:12:28,760 --> 00:12:34,220 Quindi questo è di gran lunga troppo vecchio per risolvere i vostri iPhone o 3s 4s 5s o poco, in questi giorni, 289 00:12:34,220 --> 00:12:37,320 ma so che è tutto molto derivato da questo mondo che abbiamo 290 00:12:37,320 --> 00:12:38,430 si tuffò. 291 00:12:38,430 --> 00:12:41,900 >> Quindi diamo un'occhiata a un esempio po 'più semplice. 292 00:12:41,900 --> 00:12:46,100 Questo, solo per ottenere riscaldato con qualche sintassi e anche alcuni altri dati 293 00:12:46,100 --> 00:12:49,240 tipo che abbiamo parlato, ma non hanno davvero visto in C. Quindi questo è un 294 00:12:49,240 --> 00:12:51,680 file chiamato positive1.c. 295 00:12:51,680 --> 00:12:55,120 E per i commenti in alto, ciò richiede solo che un utente di fornire un 296 00:12:55,120 --> 00:12:55,960 numero positivo. 297 00:12:55,960 --> 00:12:59,530 Quindi è un esempio di un ciclo do-while, che è bello per l'utente interattivo 298 00:12:59,530 --> 00:13:01,980 programmi in cui è necessario indicare all'utente di fare qualcosa. 299 00:13:01,980 --> 00:13:05,190 E se non collaborano, è urlare contro di loro o rifiutare il loro ingresso. 300 00:13:05,190 --> 00:13:11,610 Caso in questione, ho intenzione di fare le linee 19 a 24 a condizione che l'utente ha 301 00:13:11,610 --> 00:13:14,310 Non mi ha dato un numero positivo. 302 00:13:14,310 --> 00:13:20,400 Ora questo dettaglio qui sulla linea 18, perché dichiaro n sopra tutto questo 303 00:13:20,400 --> 00:13:24,490 costrutto loop al contrario di proprio accanto alla linea 22 dove ho 304 00:13:24,490 --> 00:13:26,880 in realtà la cura per ottenere n? 305 00:13:26,880 --> 00:13:27,330 Si '? 306 00:13:27,330 --> 00:13:27,780 [Incomprensibile] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. MALAN: Sì, così la questione del campo di applicazione. 308 00:13:29,040 --> 00:13:30,850 E in termini profani, cosa portata riferisce? 309 00:13:34,690 --> 00:13:36,610 Si '? 310 00:13:36,610 --> 00:13:37,860 [Incomprensibile] 311 00:13:40,040 --> 00:13:41,105 DAVID J. MALAN: Si può parlare un po 'più forte? 312 00:13:41,105 --> 00:13:43,450 SPEAKER 1: Dove è possibile accedere a una particolare variabile. 313 00:13:43,450 --> 00:13:45,170 DAVID J. MALAN: Perfect. 314 00:13:45,170 --> 00:13:47,360 Dove è possibile accedere a una particolare variabile. 315 00:13:47,360 --> 00:13:50,400 E, in generale, la regola pratica finora è stato che la portata di alcune 316 00:13:50,400 --> 00:13:55,860 variabile è definita dalle parentesi graffe più recenti che avete visto. 317 00:13:55,860 --> 00:14:02,010 E così, in questo caso, se ho fatto l'errore di dichiarare n sulla linea 22, 318 00:14:02,010 --> 00:14:03,010 quella linea avrebbe funzionato. 319 00:14:03,010 --> 00:14:10,990 Vorrei avere un int, e io la metterei in quella variabile n in linea 22. 320 00:14:10,990 --> 00:14:16,900 Ma quale riga di codice che ora non hanno alcuna idea di cosa sto parlando? 321 00:14:16,900 --> 00:14:22,650 Quindi 25, e si scopre 24, nonché, in quanto in questo caso, non rientra 322 00:14:22,650 --> 00:14:23,610 delle parentesi graffe. 323 00:14:23,610 --> 00:14:27,280 Quindi, solo un po 'di una seccatura, ma molto facilmente risolto limitandosi a dichiarare 324 00:14:27,280 --> 00:14:30,140 l'esterno variabile della funzione stessa. 325 00:14:30,140 --> 00:14:32,600 >> Ora vedremo più tardi di oggi, si può fare un passo avanti. 326 00:14:32,600 --> 00:14:34,860 E si potrebbe anche ottenere un po 'pigro - 327 00:14:34,860 --> 00:14:37,320 e questo non è da raccomandare, in generale - 328 00:14:37,320 --> 00:14:42,260 ma si potrebbe anche ottenere pigro e mettere una variabile globale, per così dire, non 329 00:14:42,260 --> 00:14:46,670 all'interno di una funzione, non all'interno di un ciclo, ma nel file stesso, fuori 330 00:14:46,670 --> 00:14:49,600 di tutte le funzioni che hai scritto, come ho fatto qui sulla linea 15. 331 00:14:49,600 --> 00:14:51,160 Ma questo è generalmente malvista. 332 00:14:51,160 --> 00:14:55,680 Ma realizzare questa è una soluzione a volte ad altri problemi, come vedremo 333 00:14:55,680 --> 00:14:56,620 finalmente vedere. 334 00:14:56,620 --> 00:14:58,130 Quindi, per ora, ci lasciamo così. 335 00:14:58,130 --> 00:15:01,030 Ma vediamo se siamo in grado di riscrivere questo solo per iniziare a esprimere noi stessi un 336 00:15:01,030 --> 00:15:01,990 po 'diverso. 337 00:15:01,990 --> 00:15:05,330 >> Quindi questo programma, tanto per essere chiari, è positive1. 338 00:15:05,330 --> 00:15:11,810 Lasciami andare avanti qui e nella mia finestra di terminale fare positive1, Invio. 339 00:15:11,810 --> 00:15:12,740 Compila, va bene. 340 00:15:12,740 --> 00:15:14,910 Io vado a correre positive1, premete Invio. 341 00:15:14,910 --> 00:15:16,820 Esigo che tu mi dia un numero intero positivo. 342 00:15:16,820 --> 00:15:18,260 Dirò -1. 343 00:15:18,260 --> 00:15:18,910 Non ha funzionato. 344 00:15:18,910 --> 00:15:22,150 0, 99, che sembra funzionare. 345 00:15:22,150 --> 00:15:23,570 Forse non la prova più rigorosa. 346 00:15:23,570 --> 00:15:26,480 Ma almeno è un controllo di integrità bello che siamo sulla strada giusta. 347 00:15:26,480 --> 00:15:29,240 Così ora lasciami andare avanti e aprire la versione due di questo. 348 00:15:29,240 --> 00:15:32,500 E ciò che è diverso già? 349 00:15:32,500 --> 00:15:35,140 Essa attua la stessa cosa. 350 00:15:35,140 --> 00:15:40,660 Ma ciò che salta fuori il più chiaramente diverso questa volta? 351 00:15:40,660 --> 00:15:42,560 Gia ', quindi questo bool in verde. 352 00:15:42,560 --> 00:15:45,980 Gedit è evidenziata in verde questa parola chiave conosciuto come bool, 353 00:15:45,980 --> 00:15:47,000 che è un tipo di dati. 354 00:15:47,000 --> 00:15:51,080 Non viene integrato in tutte le versioni di C. È necessario includere un 355 00:15:51,080 --> 00:15:52,010 specifica libreria. 356 00:15:52,010 --> 00:15:54,770 Nel nostro caso, ho inserito il CS50 biblioteca in modo che si 357 00:15:54,770 --> 00:15:56,460 hanno accesso a bool. 358 00:15:56,460 --> 00:15:59,810 Ma in linea 18, ci sembra di avere un valore booleano che qui chiamano grati. 359 00:15:59,810 --> 00:16:01,040 Così ho potuto chiamare questo nulla. 360 00:16:01,040 --> 00:16:04,500 Ma ho chiamato grato solo per tipo di trasmettere un significato semantico. 361 00:16:04,500 --> 00:16:07,930 Quindi inizialmente sulla linea 18, non sono evidentemente grato perché il 362 00:16:07,930 --> 00:16:12,150 Valore booleano grato è inizializzato a false nella riga 18. 363 00:16:12,150 --> 00:16:16,890 E poi sembra che quello che ho fatto nelle linee da 21 a 23 è che ho appena 364 00:16:16,890 --> 00:16:18,610 tipo di riscritto la mia logica. 365 00:16:18,610 --> 00:16:21,020 Quindi non funzionalmente diversi. 366 00:16:21,020 --> 00:16:26,940 Ma in linea 22 ora, verificare se l'int l'utente ha fornito è maggiore di 367 00:16:26,940 --> 00:16:31,120 0, allora ho semplicemente cambiare il valore di grato a true. 368 00:16:31,120 --> 00:16:32,290 E perché dovrei farlo? 369 00:16:32,290 --> 00:16:35,600 Perché in linea 25, a quanto pare, ho intenzione di verificare una condizione. 370 00:16:35,600 --> 00:16:39,380 Fate questo ciclo while è falsa grati. 371 00:16:39,380 --> 00:16:43,610 >> Quindi vi propongo questo come alternativa alla versione uno perché è almeno un 372 00:16:43,610 --> 00:16:45,130 po 'più intuitivo, forse. 373 00:16:45,130 --> 00:16:46,900 E 'un po' più a terra in lingua inglese. 374 00:16:46,900 --> 00:16:51,710 Quindi, eseguire le seguenti operazioni mentre non si è grati o mentre grato è falso. 375 00:16:51,710 --> 00:16:55,890 E anche questa volta, mi pare non si cura di ricordare ciò che l'utente ha digitato 376 00:16:55,890 --> 00:16:57,730 perché nel bando non c'è n variabile. 377 00:16:57,730 --> 00:16:58,650 Quindi, in realtà, io - 378 00:16:58,650 --> 00:17:00,080 una piccola bugia bianca lì. 379 00:17:00,080 --> 00:17:02,770 Punto di vista funzionale, il programma è un po 'diversa una volta che andare a fondo di 380 00:17:02,770 --> 00:17:04,819 perché non mi ricordo che cosa è n. 381 00:17:04,819 --> 00:17:09,579 Ma ho voluto dimostrare anche qui che, anche se abbiamo visto e GetInt 382 00:17:09,579 --> 00:17:13,920 GetString utilizzato sul lato destro di un segno uguale finora in modo che 383 00:17:13,920 --> 00:17:17,160 ricordiamo il valore, tecnicamente, non è strettamente necessario. 384 00:17:17,160 --> 00:17:20,950 Se per qualsiasi motivo non solo la cura per salvare il valore, si vuole solo 385 00:17:20,950 --> 00:17:25,710 per controllare il valore, si noti che possiamo semplicemente scrivere questo come GetInt aperto 386 00:17:25,710 --> 00:17:27,000 parentesi, parentesi vicino. 387 00:17:27,000 --> 00:17:30,460 Tale funzione sta per restituire un valore, come abbiamo detto. 388 00:17:30,460 --> 00:17:32,010 E 'intenzione di dare indietro un int. 389 00:17:32,010 --> 00:17:36,450 E quindi se mentalmente pensa che ciò accada, quando digito nel 99, GetInt 390 00:17:36,450 --> 00:17:38,160 restituisce il numero 99. 391 00:17:38,160 --> 00:17:41,330 E così concettualmente, è come se il mio codice erano in realtà questo. 392 00:17:41,330 --> 00:17:45,880 Quindi, se il 99 è effettivamente maggiore di 0, quindi grato diventa vero. 393 00:17:45,880 --> 00:17:50,420 Poi linea 25 si rende conto ooh, abbiamo finito, perché ora sono grato. 394 00:17:50,420 --> 00:17:54,590 E in linea 26, diciamo semplicemente, ringrazia per il numero intero positivo, qualunque cosa 395 00:17:54,590 --> 00:17:55,710 capitato di essere. 396 00:17:55,710 --> 00:17:58,900 >> Ora facciamo una leggera zucchero sintattico qui, per così dire. 397 00:17:58,900 --> 00:18:02,990 Vediamo se riusciamo a ripulire questa linea 25 con la terza e ultima variazione 398 00:18:02,990 --> 00:18:04,640 in positive3. 399 00:18:04,640 --> 00:18:08,250 Quindi, nota la differenza solo ora è quello che riga di codice? 400 00:18:11,930 --> 00:18:13,260 Gia ', quindi 25. 401 00:18:13,260 --> 00:18:15,520 E non abbiamo veramente visto questo trucco ancora. 402 00:18:15,520 --> 00:18:19,510 Ma abbiamo fatto vedere il punto esclamativo il Lunedi, il che denota che cosa? 403 00:18:19,510 --> 00:18:20,970 Quindi non, o negazione. 404 00:18:20,970 --> 00:18:23,460 Così ha un valore booleano e capovolgere il suo valore. 405 00:18:23,460 --> 00:18:24,390 Vero diventa falso. 406 00:18:24,390 --> 00:18:25,500 False diventa vero. 407 00:18:25,500 --> 00:18:28,910 Quindi questo, vorrei proporre, è anche un po 'più intuitivo di un modo di 408 00:18:28,910 --> 00:18:32,200 la scrittura del codice, perché ho ancora inizializzare grato a false. 409 00:18:32,200 --> 00:18:33,530 Ho ancora effettuare le seguenti operazioni. 410 00:18:33,530 --> 00:18:35,700 Ho impostato grato a true quando sarà il momento. 411 00:18:35,700 --> 00:18:40,690 Ma ora si può davvero solo tradurre questo codice verbalmente da sinistra a destra, 412 00:18:40,690 --> 00:18:42,550 mentre non grata. 413 00:18:42,550 --> 00:18:46,170 Perché bang, o un punto esclamativo, denota la nozione di non, così, mentre 414 00:18:46,170 --> 00:18:47,010 non grata. 415 00:18:47,010 --> 00:18:49,740 >> Quindi, di nuovo, non abbiamo introdotto nuovi concetti di per sé. 416 00:18:49,740 --> 00:18:53,230 Abbiamo parlato di valori booleani indietro quando abbiamo giocato con Scratch. 417 00:18:53,230 --> 00:18:55,690 Ma conto ora possiamo solo iniziare a scrivere il nostro codice in 418 00:18:55,690 --> 00:18:56,550 molti modi diversi. 419 00:18:56,550 --> 00:19:00,010 Quindi, soprattutto in pset1, se siete una sorta di fatica a capire il modo di 420 00:19:00,010 --> 00:19:03,400 scrivere qualche programma, le vincite sono siete fortunati perché non ci sarà alcuna 421 00:19:03,400 --> 00:19:05,780 numero di soluzioni che possono accadere al momento. 422 00:19:05,780 --> 00:19:09,850 Per esempio, questo è solo per tre anche il più semplice dei programmi. 423 00:19:09,850 --> 00:19:10,180 Bene. 424 00:19:10,180 --> 00:19:13,860 E ora ricordo il Lunedi, abbiamo lasciato su questa nota con valori di ritorno. 425 00:19:13,860 --> 00:19:18,280 Così, per la prima volta, abbiamo scritto un programma che non solo principale, 426 00:19:18,280 --> 00:19:22,240 ma ha anche una sua funzione personalizzata che ho scritto qui. 427 00:19:22,240 --> 00:19:26,640 Quindi, in linea da 31 a 34, ho implementato una funzione cubo. 428 00:19:26,640 --> 00:19:27,800 Non è complessa. 429 00:19:27,800 --> 00:19:29,830 E 'solo a volte a volte a, in questo caso. 430 00:19:29,830 --> 00:19:34,920 Ma ciò che è importante a questo proposito è che sto prendendo l'input sotto forma di un e 431 00:19:34,920 --> 00:19:38,910 Sto tornando uscita sotto forma di volte a volte a. 432 00:19:38,910 --> 00:19:43,940 >> Così ora ho la possibilità, proprio come facevo con printf da solo, per chiamare 433 00:19:43,940 --> 00:19:47,120 questa funzione chiamando la funzione cubo. 434 00:19:47,120 --> 00:19:49,470 E la funzione cubo richiede un input. 435 00:19:49,470 --> 00:19:52,030 E la funzione cubo restituisce un output. 436 00:19:52,030 --> 00:19:56,660 E così al contrario, printf appena fatto qualcosa. 437 00:19:56,660 --> 00:19:59,490 Essa non ha restituito tutto ciò che abbiamo a cuore - anche se, come 438 00:19:59,490 --> 00:20:00,820 a parte, lo fa restituire un valore. 439 00:20:00,820 --> 00:20:02,650 Basta generalmente ignorarlo. 440 00:20:02,650 --> 00:20:04,000 Printf appena fatto qualcosa. 441 00:20:04,000 --> 00:20:06,220 Esso aveva un effetto collaterale di stampa sulla schermata. 442 00:20:06,220 --> 00:20:09,480 Al contrario qui, abbiamo la funzione di cubo, che 443 00:20:09,480 --> 00:20:11,400 restituisce effettivamente qualcosa. 444 00:20:11,400 --> 00:20:12,960 >> Quindi questo è in genere - 445 00:20:12,960 --> 00:20:15,260 per chi ha familiarità con questo, è una idea abbastanza semplice. 446 00:20:15,260 --> 00:20:18,460 Ma per coloro che hanno meno familiarità con l'idea di passare in input e ottenere 447 00:20:18,460 --> 00:20:21,700 uscite posteriori, proviamo solo semplice qualcosa di super. 448 00:20:21,700 --> 00:20:25,180 C'è qualcuno che sta comodo in arrivo sul palco per breve tempo? 449 00:20:25,180 --> 00:20:27,460 Devi stare bene con una macchina fotografica su di te, pure. 450 00:20:27,460 --> 00:20:27,640 Gia '. 451 00:20:27,640 --> 00:20:28,610 Ok, come ti chiami? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. MALAN: Ken. 454 00:20:29,420 --> 00:20:29,810 Va bene, Ken. 455 00:20:29,810 --> 00:20:31,060 Vieni su. 456 00:20:31,060 --> 00:20:34,660 Quindi Ken sarà una funzione della specie qui. 457 00:20:34,660 --> 00:20:35,760 E andiamo avanti e farlo. 458 00:20:35,760 --> 00:20:38,790 Prendiamo un po 'di fantasia. 459 00:20:38,790 --> 00:20:39,770 Lieto di vederla. 460 00:20:39,770 --> 00:20:41,010 Benvenuti al centro della scena. 461 00:20:41,010 --> 00:20:41,980 Bene. 462 00:20:41,980 --> 00:20:45,590 Che ha colpito questo pulsante qui. 463 00:20:45,590 --> 00:20:46,420 Bene. 464 00:20:46,420 --> 00:20:49,490 Così qui avete una lavagna moderna. 465 00:20:49,490 --> 00:20:53,050 E quello che sono è la funzione principale, per esempio. 466 00:20:53,050 --> 00:20:55,990 E non ho un iPad in mano. 467 00:20:55,990 --> 00:20:59,000 Non mi ricordo come - beh, in realtà, non si può dire che. 468 00:20:59,000 --> 00:21:02,200 Io in realtà non hanno una buona scrittura. 469 00:21:02,200 --> 00:21:05,260 E così dunque, voglio di stampare qualcosa sullo schermo per me. 470 00:21:05,260 --> 00:21:07,470 >> Così sto è il programma principale. 471 00:21:07,470 --> 00:21:15,060 E io sto per avere voi dite questo, scrivendo nel mio pollo e graffi 472 00:21:15,060 --> 00:21:16,600 quindi si passa un ingresso. 473 00:21:16,600 --> 00:21:20,000 Così come stupido se questo esercizio è, il concetto di funzioni e chiamare un 474 00:21:20,000 --> 00:21:22,260 funzione e restituire una funzione davvero si riduce a questo. 475 00:21:22,260 --> 00:21:23,120 Sono principale. 476 00:21:23,120 --> 00:21:26,270 Ho appena scritto printf ("qualcosa") sullo schermo. 477 00:21:26,270 --> 00:21:27,470 Sono in esecuzione di questo programma. 478 00:21:27,470 --> 00:21:30,900 E non appena printf viene chiamato, ci vuole un argomento - o un parametro, 479 00:21:30,900 --> 00:21:31,660 a volte - 480 00:21:31,660 --> 00:21:32,780 tra virgolette. 481 00:21:32,780 --> 00:21:33,960 Ecco questo argomento. 482 00:21:33,960 --> 00:21:35,740 Lo sto passando a Ken. 483 00:21:35,740 --> 00:21:39,390 Ora è una scatola nera scritto un certo numero di anni fa, che a quanto pare 484 00:21:39,390 --> 00:21:41,070 solo sa come stampare le cose sullo schermo. 485 00:21:41,070 --> 00:21:42,320 >> Quindi, eseguire. 486 00:21:48,842 --> 00:21:49,900 Non è male. 487 00:21:49,900 --> 00:21:50,890 Quindi, molto buono. 488 00:21:50,890 --> 00:21:52,900 Così ora Ken è fatto in esecuzione. 489 00:21:52,900 --> 00:21:55,810 Ha bisogno di darmi nulla in cambio? 490 00:21:55,810 --> 00:21:57,240 Quindi non che abbiamo visto finora. 491 00:21:57,240 --> 00:21:59,230 Anche in questo caso, printf in effetti restituisce un numero. 492 00:21:59,230 --> 00:22:01,640 Ma stiamo andando a ignorare che per il momento, perché non l'abbiamo mai usato. 493 00:22:01,640 --> 00:22:03,400 Ecco, questo è esso per Ken. 494 00:22:03,400 --> 00:22:06,650 E così ora principale torna per l'esecuzione - 495 00:22:06,650 --> 00:22:09,630 principale prende il controllo del programma di nuovo perché quella riga di codice, 496 00:22:09,630 --> 00:22:11,010 printf, è fatto in esecuzione. 497 00:22:11,010 --> 00:22:13,890 E si va il nostro modo di esecuzione qualunque altre linee ci sono. 498 00:22:13,890 --> 00:22:14,130 >> Bene. 499 00:22:14,130 --> 00:22:17,080 Ora proviamo un esempio leggermente diverso. 500 00:22:17,080 --> 00:22:22,430 E questa volta qui, si deve prima cancellare la schermata qui. 501 00:22:22,430 --> 00:22:24,670 E questa volta, faremo la funzione di cubatura. 502 00:22:24,670 --> 00:22:27,350 Ma questa volta, mi aspetto un valore di uscita. 503 00:22:27,350 --> 00:22:28,630 Quindi cerchiamo di andare avanti e farlo. 504 00:22:28,630 --> 00:22:35,680 Così ora ho una riga di codice che dice che x = cubo (x). 505 00:22:35,680 --> 00:22:36,930 Quindi in realtà let's - 506 00:22:41,450 --> 00:22:43,940 la riga di codice, richiamo, simile a questa. 507 00:22:43,940 --> 00:22:45,960 x = cubo (x). 508 00:22:45,960 --> 00:22:48,100 Così come è questo di andare a lavorare? 509 00:22:48,100 --> 00:22:50,820 Quindi cerchiamo di andare avanti e dare uno schermo bianco di nuovo. 510 00:22:50,820 --> 00:22:55,000 E sto per scrivere ora verso il basso il valore di x, che in questo momento 511 00:22:55,000 --> 00:23:01,080 il tempo sembra essere, diciamo, 2, per mantenere le cose semplici. 512 00:23:01,080 --> 00:23:04,890 Così ho scritto su un pezzo di carta il valore di 2, 513 00:23:04,890 --> 00:23:06,100 che è il mio valore x. 514 00:23:06,100 --> 00:23:08,250 L'ho mano a Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: E ho appena scrivere la risposta? 516 00:23:09,200 --> 00:23:12,660 DAVID J. MALAN: Sì, facciamo solo scrivere la risposta. 517 00:23:12,660 --> 00:23:13,030 Va bene. 518 00:23:13,030 --> 00:23:16,280 E ora deve restituire qualcosa. 519 00:23:16,280 --> 00:23:17,560 So - 520 00:23:17,560 --> 00:23:18,170 perfetto. 521 00:23:18,170 --> 00:23:18,840 Segue Nizza. 522 00:23:18,840 --> 00:23:21,970 >> Così ora mi porge nuovamente il valore di 8, in questo caso. 523 00:23:21,970 --> 00:23:23,220 E cosa devo fare con esso? 524 00:23:23,220 --> 00:23:26,130 Beh, in realtà, vediamo. 525 00:23:26,130 --> 00:23:26,640 Ottieni questo diritto. 526 00:23:26,640 --> 00:23:27,880 Cosa devo fare con esso? 527 00:23:27,880 --> 00:23:31,900 Ora sto andando a prendere questo valore e in realtà conservare in quelle 528 00:23:31,900 --> 00:23:33,400 stessi bit in memoria. 529 00:23:33,400 --> 00:23:35,030 Ma notate, io sono una specie di lottare qui. 530 00:23:35,030 --> 00:23:38,280 Sono un po 'confuso perché dove ho effettivamente scrivere il valore di x? 531 00:23:38,280 --> 00:23:41,840 Perché quello che ho appena fatto è fisicamente Ken mano un pezzo di carta 532 00:23:41,840 --> 00:23:44,400 che ha il valore 2, che era x. 533 00:23:44,400 --> 00:23:46,300 E in effetti, questo è esattamente ciò che accade. 534 00:23:46,300 --> 00:23:50,100 Così si scopre che quando si chiama una funzione, e si passa in una discussione 535 00:23:50,100 --> 00:23:54,130 come "ciao mondo" o si passa in una discussione come 2, in generale, si è 536 00:23:54,130 --> 00:23:56,720 passando in una copia di tale argomento. 537 00:23:56,720 --> 00:24:01,020 E così come ho scritto il numero 2 qui e la porse a Ken, che deve 538 00:24:01,020 --> 00:24:04,760 significa che ho ancora una copia del valore 2 da qualche parte. 539 00:24:04,760 --> 00:24:08,140 Perché in effetti, ora che ho ottenuto di nuovo il valore 8, ho bisogno di tornare in 540 00:24:08,140 --> 00:24:12,010 RAM ed effettivamente scrivere 8, dove una volta ho avuto il numero 2. 541 00:24:12,010 --> 00:24:15,720 >> Quindi visivamente ricordare questo concetto di passaggio in letteralmente 542 00:24:15,720 --> 00:24:16,730 una copia del valore. 543 00:24:16,730 --> 00:24:19,570 Ken fa la sua cosa, mi porge indietro qualcosa - in questo caso, 544 00:24:19,570 --> 00:24:20,820 un valore come 8. 545 00:24:20,820 --> 00:24:22,660 E poi devo fare qualcosa con quel valore, se io 546 00:24:22,660 --> 00:24:24,880 vogliono mantenere in giro. 547 00:24:24,880 --> 00:24:29,470 Quindi, tutto questo sarà fin troppo familiare in breve tempo. 548 00:24:29,470 --> 00:24:33,082 Grazie mille per questa demo qui, Ken. 549 00:24:33,082 --> 00:24:34,820 Bene. 550 00:24:34,820 --> 00:24:36,720 Molto ben fatto. 551 00:24:36,720 --> 00:24:40,610 Quindi cerchiamo di vedere come in ultima analisi, che si riferisce ad alcune delle funzioni 552 00:24:40,610 --> 00:24:42,270 da visita che abbiamo fatto qui. 553 00:24:42,270 --> 00:24:47,610 Permettetemi quindi di andare avanti e ci riportano l'esempio cubatura qui. 554 00:24:47,610 --> 00:24:53,080 E notare che, se vogliamo iniziare effettivamente l'assunzione di questo ulteriore, stiamo andando 555 00:24:53,080 --> 00:24:57,050 di essere consapevole del fatto che il numero x che viene passato 556 00:24:57,050 --> 00:25:01,390 qui è diverso da quello che è effettivamente passato alla funzione. 557 00:25:01,390 --> 00:25:03,940 Quindi, di nuovo, il passato per copia sta per diventare molto 558 00:25:03,940 --> 00:25:05,620 germano in un attimo. 559 00:25:05,620 --> 00:25:09,320 >> Quindi diamo un'occhiata a qualcosa che non tutto funziona bene ancora. 560 00:25:09,320 --> 00:25:11,790 Ho intenzione di andare avanti e aprire un terzo esempio buggy, che 561 00:25:11,790 --> 00:25:13,560 è viziata dalla natura. 562 00:25:13,560 --> 00:25:18,070 E si chiama buggy3, e implementa una funzione di scambio. 563 00:25:18,070 --> 00:25:23,500 Quindi qui abbiamo una funzione principale che è x e y arbitrariamente inizializzato a 564 00:25:23,500 --> 00:25:24,720 1 e 2, rispettivamente. 565 00:25:24,720 --> 00:25:27,590 Potremmo usare GetInt, ma abbiamo solo bisogno di un semplice esercizio. 566 00:25:27,590 --> 00:25:29,680 Quindi è difficile codificato come 1 e 2. 567 00:25:29,680 --> 00:25:35,330 In linee 21 e 22, che apparentemente stampare x ed y, uno per riga. 568 00:25:35,330 --> 00:25:39,620 Poi, sulla linea 23, sostengo che sto scambiando questi valori, punti, puntini, puntini. 569 00:25:39,620 --> 00:25:43,030 Mi pare chiamare una funzione in linea 24 chiamata di swap 570 00:25:43,030 --> 00:25:44,000 che accetta due argomenti. 571 00:25:44,000 --> 00:25:46,430 E 'del tutto legittimo per le funzioni di prendere due argomenti. 572 00:25:46,430 --> 00:25:48,220 Abbiamo visto printf lo fanno già. 573 00:25:48,220 --> 00:25:50,370 Quindi scambio prende apparentemente x e y. 574 00:25:50,370 --> 00:25:53,010 E come suggerisce il nome, mi auguro che sta andando a 575 00:25:53,010 --> 00:25:54,320 scambiare questi due valori. 576 00:25:54,320 --> 00:25:57,560 Allora io sostengo sulla linea 25, scambiati. 577 00:25:57,560 --> 00:26:01,570 E io ristampare x e y sotto l'ipotesi che 578 00:26:01,570 --> 00:26:02,830 hanno infatti state scambiate. 579 00:26:02,830 --> 00:26:04,370 Ma se in realtà ho eseguito questo programma - 580 00:26:04,370 --> 00:26:06,060 vorrei aprire una finestra di terminale. 581 00:26:06,060 --> 00:26:07,750 Permettetemi buggy3. 582 00:26:07,750 --> 00:26:09,970 Come suggerisce il nome, questo non sta andando a finire bene. 583 00:26:09,970 --> 00:26:14,690 Perché quando premere Invio, si noti che x è 1. 584 00:26:14,690 --> 00:26:15,720 y è 2. 585 00:26:15,720 --> 00:26:19,160 E ancora alla fine del programma, sono ancora, infatti, lo stesso. 586 00:26:19,160 --> 00:26:22,760 >> Quindi, basata sulla dimostrazione poco fa con Ken, cosa sta realmente succedendo? 587 00:26:22,760 --> 00:26:24,660 Bene, vediamo di tuffarsi in questa funzione di scambio. 588 00:26:24,660 --> 00:26:25,800 E 'super breve. 589 00:26:25,800 --> 00:26:28,020 Sono solo poche righe di codice lungo. 590 00:26:28,020 --> 00:26:32,810 Ma qual è il problema fondamentale basato sulla storia semplice che racconta 591 00:26:32,810 --> 00:26:34,270 qui con Ken? 592 00:26:34,270 --> 00:26:36,115 Perché è rotto di swap? 593 00:26:36,115 --> 00:26:37,365 [Incomprensibile] 594 00:26:39,840 --> 00:26:40,460 Esattamente. 595 00:26:40,460 --> 00:26:43,610 Quindi stiamo memorizzazione su una copia non, la variabile stessa. 596 00:26:43,610 --> 00:26:46,810 In altre parole, scambio apparentemente prende due argomenti, un int. 597 00:26:46,810 --> 00:26:49,370 Ed è arbitrariamente chiamato a e b. 598 00:26:49,370 --> 00:26:54,430 E qui, ho passato in x ed y, che sono rispettivamente 1 e 2. 599 00:26:54,430 --> 00:26:56,580 Ma non sto letteralmente passando x. 600 00:26:56,580 --> 00:26:58,410 Non sto letteralmente passando y. 601 00:26:58,410 --> 00:27:01,230 Sto passando una copia di x e una copia di y. 602 00:27:01,230 --> 00:27:05,180 E 'come quasi come se è stato copiato e incollato in scambiare i valori che 603 00:27:05,180 --> 00:27:07,440 si desidera manipolare effettivamente. 604 00:27:07,440 --> 00:27:11,970 Quindi, se questo è il caso, quando io, il programma, avviare l'esecuzione 605 00:27:11,970 --> 00:27:14,140 linea 35, poi 36 - 606 00:27:14,140 --> 00:27:17,740 quando arrivo a riga 37, a questo punto della storia, qual è il valore di un? 607 00:27:20,740 --> 00:27:24,850 A questo punto della storia, riga 37, che è il valore di a questo punto? 608 00:27:24,850 --> 00:27:25,980 Così dovrebbe essere solo 1. 609 00:27:25,980 --> 00:27:26,170 Giusto? 610 00:27:26,170 --> 00:27:29,100 Poiché x è stato passato come primo argomento. 611 00:27:29,100 --> 00:27:33,150 E questa funzione è sufficiente arbitrariamente sta chiamando il suo primo argomento, a. 612 00:27:33,150 --> 00:27:35,130 Allo stesso modo è y, il secondo argomento. 613 00:27:35,130 --> 00:27:37,930 Ed è solo arbitrariamente chiamando il b secondo argomento. 614 00:27:37,930 --> 00:27:40,510 >> Ora, questa dicotomia è in realtà abbastanza semplice spiegato. 615 00:27:40,510 --> 00:27:40,880 Pensateci. 616 00:27:40,880 --> 00:27:42,980 Nessuno di noi ha incontrato la persona che ha scritto printf. 617 00:27:42,980 --> 00:27:49,880 Quindi sicuramente, lui o lei non ha idea di quello che le nostre variabili 30 anni dopo si sta 618 00:27:49,880 --> 00:27:50,710 di essere chiamato. 619 00:27:50,710 --> 00:27:55,110 Quindi ci deve essere una distinzione tra ciò che voi chiamate le variabili in 620 00:27:55,110 --> 00:27:59,960 funzioni che stai scrivendo e ciò che chiamate variabili in funzioni siete 621 00:27:59,960 --> 00:28:01,770 chiamata o utilizzando. 622 00:28:01,770 --> 00:28:05,120 In altre parole, ho scritto le mie variabili come x e y. 623 00:28:05,120 --> 00:28:08,060 Ma se qualcun altro aveva scritto la funzione di scambio, lui o lei certamente 624 00:28:08,060 --> 00:28:10,480 non so quello che i miei variabili stanno per essere chiamati. 625 00:28:10,480 --> 00:28:13,850 Così si rendono conto che questo è il motivo che ha questa dualità di nomi. 626 00:28:13,850 --> 00:28:16,800 Tecnicamente, potrei fare questo per caso. 627 00:28:16,800 --> 00:28:19,750 Ma sarebbe ancora passata in tante copie. 628 00:28:19,750 --> 00:28:22,940 Sarebbe solo una pura coincidenza esteticamente se la persona che ha scritto 629 00:28:22,940 --> 00:28:25,590 di swap aveva usato gli stessi nomi. 630 00:28:25,590 --> 00:28:25,930 >> Bene. 631 00:28:25,930 --> 00:28:29,010 Quindi, a questo punto della storia, riga 37, a è 1. 632 00:28:29,010 --> 00:28:30,410 b è 2. 633 00:28:30,410 --> 00:28:32,040 E ora procedere per scambiarle. 634 00:28:32,040 --> 00:28:34,730 Prima di tutto, vorrei effettivamente fare questo molto più semplicemente. 635 00:28:34,730 --> 00:28:36,500 Non so che cosa quelle tre righe di codice sono state facendo. 636 00:28:36,500 --> 00:28:37,370 Vorrei solo fare questo. 637 00:28:37,370 --> 00:28:38,850 b ottiene un. 638 00:28:38,850 --> 00:28:40,170 ottiene un b. 639 00:28:40,170 --> 00:28:41,450 Fatto. 640 00:28:41,450 --> 00:28:43,540 Perché è rotto, logico? 641 00:28:46,980 --> 00:28:48,590 È un po 'la cosa intuitiva, giusto? 642 00:28:48,590 --> 00:28:50,640 Così diventa un b. 643 00:28:50,640 --> 00:28:52,450 E diventa un b. 644 00:28:52,450 --> 00:28:55,410 Ma il problema è che, non appena la linea 37 viene eseguito, qual è la 645 00:28:55,410 --> 00:28:58,170 valore di a e b? 646 00:28:58,170 --> 00:28:59,070 Lo stesso, 1. 647 00:28:59,070 --> 00:29:03,460 Poiché tu hai rovinati, per così dire, hai cambiato b corrisponderanno a. 648 00:29:03,460 --> 00:29:06,000 Quindi una volta che la linea 37 viene eseguito, che è grande. 649 00:29:06,000 --> 00:29:09,940 Si dispone ora di due copie del numero 1 all'interno di questa funzione. 650 00:29:09,940 --> 00:29:14,720 Quindi quando si dice in linea 38, un b si, beh, sei una specie di vite. 651 00:29:14,720 --> 00:29:17,370 Perché sei solo assegnando 1 a 1. 652 00:29:17,370 --> 00:29:20,400 Hai perso il tipo di valore che si interessava. 653 00:29:20,400 --> 00:29:22,910 >> Quindi, nella versione originale di questo, nota quello che ho fatto. 654 00:29:22,910 --> 00:29:26,620 Ho invece avuto una terza riga di codice che si presentava così. 655 00:29:26,620 --> 00:29:29,910 Dichiaro una variabile temporanea - tmp è un nome molto comune 656 00:29:29,910 --> 00:29:31,240 per una variabile temporanea. 657 00:29:31,240 --> 00:29:34,280 Si tratta di un int, perché deve corrispondere a ciò che voglio fare una copia di. 658 00:29:34,280 --> 00:29:39,720 Devo conservare una copia di un interno di tmp. Quindi una volta che la linea 37 è stato eseguito, 659 00:29:39,720 --> 00:29:41,390 il valore di a è - 660 00:29:41,390 --> 00:29:42,970 sanity rapido check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Il valore di b è 2. 663 00:29:45,780 --> 00:29:48,470 E il valore di tmp è anche 1. 664 00:29:48,470 --> 00:29:51,470 Così ora eseguo linea 38. 665 00:29:51,470 --> 00:29:57,180 Quindi, una volta eseguita la linea 38, assume un valore di b. 666 00:29:57,180 --> 00:29:58,510 E b era 2. 667 00:29:58,510 --> 00:30:00,500 Quindi un ora 2. 668 00:30:00,500 --> 00:30:03,110 Quindi, a questo punto della storia, è un 2, b è 2, 669 00:30:03,110 --> 00:30:05,130 e tmp è 1. 670 00:30:05,130 --> 00:30:09,330 Così ora logicamente, possiamo solo valore di tmp plop in b. 671 00:30:09,330 --> 00:30:10,690 E abbiamo finito. 672 00:30:10,690 --> 00:30:12,170 >> Così abbiamo risolto il problema. 673 00:30:12,170 --> 00:30:16,040 Purtroppo, quando si esegue il programma in questa forma, in realtà non scambiare 674 00:30:16,040 --> 00:30:17,700 tutti i valori. 675 00:30:17,700 --> 00:30:18,950 Ma per essere chiari, perché? 676 00:30:23,420 --> 00:30:26,310 Ho risolto il problema logico da un momento fa. 677 00:30:26,310 --> 00:30:31,150 Ma ancora una volta, se si esegue il programma, x e y restano invariati per la fine del 678 00:30:31,150 --> 00:30:33,834 esecuzione del programma. 679 00:30:33,834 --> 00:30:34,760 [Incomprensibile] 680 00:30:34,760 --> 00:30:36,030 DAVID J. MALAN: Quindi non sono tornati nulla. 681 00:30:36,030 --> 00:30:36,960 Ecco, questo è vero. 682 00:30:36,960 --> 00:30:39,880 Ma si scopre c'è un po 'un problema qui, perché fino ad ora, il 683 00:30:39,880 --> 00:30:42,460 unica cosa che siamo stati in grado di tornare è una cosa. 684 00:30:42,460 --> 00:30:46,540 E questa è una limitazione di C. È possibile tornare veramente un valore, 685 00:30:46,540 --> 00:30:48,970 in questo caso, sono un po 'bloccato qui 686 00:30:48,970 --> 00:30:51,805 perché ho potuto restituire il nuovo valore di x oppure avrei potuto restituire il 687 00:30:51,805 --> 00:30:53,160 nuovo valore di y. 688 00:30:53,160 --> 00:30:54,330 Ma voglio che sia indietro. 689 00:30:54,330 --> 00:30:58,010 Quindi ritorno non è la soluzione più semplice qui. 690 00:30:58,010 --> 00:30:59,770 Ma il problema è fondamentalmente il motivo? 691 00:30:59,770 --> 00:31:03,270 Cosa abbiamo scambiato? 692 00:31:03,270 --> 00:31:04,010 ae b. 693 00:31:04,010 --> 00:31:07,670 Ma a e b sono copie di x e y, il che significa che abbiamo appena fatto tutto questo 694 00:31:07,670 --> 00:31:10,080 lavoro - come abbiamo appena trascorso tre minuti parlando dello swap 695 00:31:10,080 --> 00:31:11,680 funzione e tutte e tre queste variabili. 696 00:31:11,680 --> 00:31:15,090 E questo è grande, perfettamente corretto in isolamento. 697 00:31:15,090 --> 00:31:20,230 Ma un e ambito di applicazione b è solo in queste righe qui. 698 00:31:20,230 --> 00:31:24,130 Quindi, proprio come un ciclo for, se si dichiara un intero i all'interno di 699 00:31:24,130 --> 00:31:27,400 loop - allo stesso modo, se si sta dentro dichiara a e b di una funzione che 700 00:31:27,400 --> 00:31:30,550 che hai scritto, sono validi solo all'interno di tale funzione. 701 00:31:30,550 --> 00:31:35,020 Il che significa che non appena swap viene fatto in esecuzione e si va dalla linea 24 a 702 00:31:35,020 --> 00:31:38,380 linea 25, X e Y non sono state cambiate. 703 00:31:38,380 --> 00:31:42,580 Hai appena sprecato un sacco di tempo scambiare copie di variabili. 704 00:31:42,580 --> 00:31:46,490 >> Così si scopre che la soluzione a questo è in realtà non ovvio. 705 00:31:46,490 --> 00:31:49,210 Non è del tutto sufficiente per restituire i valori, perché possiamo 706 00:31:49,210 --> 00:31:50,320 solo restituire un valore. 707 00:31:50,320 --> 00:31:53,370 E davvero si vuole fare swap sia x e y al tempo stesso. 708 00:31:53,370 --> 00:31:55,020 Quindi stiamo andando a tornare a questo. 709 00:31:55,020 --> 00:31:58,770 Ma per ora, si rende conto che il problema deriva fondamentalmente dal fatto 710 00:31:58,770 --> 00:32:00,660 che a e b sono copie. 711 00:32:00,660 --> 00:32:03,450 E sono nel loro spazio proprio. 712 00:32:03,450 --> 00:32:04,980 Bene, cerchiamo di risolvere questo problema in qualche modo. 713 00:32:04,980 --> 00:32:09,200 Vorrei in realtà scorrere di nuovo qui e di aprire, diciamo, una quarta variante 714 00:32:09,200 --> 00:32:11,170 di questo, buggy4. 715 00:32:11,170 --> 00:32:13,230 E che dire di questo? 716 00:32:13,230 --> 00:32:16,690 Si tratta di un problema simile ma più semplice da guardare prima di prendere una pugnalata a 717 00:32:16,690 --> 00:32:17,530 risolverlo. 718 00:32:17,530 --> 00:32:19,440 Questo programma si chiama incremento. 719 00:32:19,440 --> 00:32:24,320 E a quanto pare inizializza un numero intero x a 1 in linea 18. 720 00:32:24,320 --> 00:32:25,950 Ho poi l'affermazione X è 1. 721 00:32:25,950 --> 00:32:28,020 Ho poi un'indicazione di incremento, punto, punto, punto. 722 00:32:28,020 --> 00:32:29,460 Ho quindi chiamare incremento. 723 00:32:29,460 --> 00:32:33,480 Ma poi nelle linee 22 e 23, io sostengo che è stato incrementato. 724 00:32:33,480 --> 00:32:37,780 Io sostengo x ora è quello che è, 2 presumibilmente. 725 00:32:37,780 --> 00:32:39,770 >> Ma questo programma è bacato. 726 00:32:39,770 --> 00:32:41,020 Qual è il problema? 727 00:32:43,450 --> 00:32:44,418 Si '? 728 00:32:44,418 --> 00:32:45,668 [Incomprensibile] 729 00:32:49,260 --> 00:32:49,850 DAVID J. MALAN: Esattamente. 730 00:32:49,850 --> 00:32:52,430 Quindi x è stata dichiarata, ovviamente, sulla linea 18. 731 00:32:52,430 --> 00:32:54,410 Questo è all'interno delle parentesi graffe principale. 732 00:32:54,410 --> 00:32:58,470 Quindi la risposta semplice è che, beh, x esiste qui. 733 00:32:58,470 --> 00:33:01,510 Non esiste in linea 32. 734 00:33:01,510 --> 00:33:03,710 Quindi questo programma in realtà non sarà nemmeno la compilazione. 735 00:33:03,710 --> 00:33:07,910 Il compilatore, quando provare a compilare questo codice, sta per urlare contro di me 736 00:33:07,910 --> 00:33:13,190 su alcuni identificatore non dichiarato o qualcosa in tal senso. 737 00:33:13,190 --> 00:33:13,870 Infatti, proviamo. 738 00:33:13,870 --> 00:33:15,235 Questo è fare buggy4. 739 00:33:17,780 --> 00:33:18,190 Eccolo. 740 00:33:18,190 --> 00:33:22,030 L'uso di x identificatore non dichiarato in linea 32. 741 00:33:22,030 --> 00:33:25,700 E in realtà, cerchiamo di essere più esplicito qui oggi, in modo che questo sia utile per 742 00:33:25,700 --> 00:33:27,140 orario di ufficio e in casa. 743 00:33:27,140 --> 00:33:29,000 Si noti che è un po 'criptico scritto. 744 00:33:29,000 --> 00:33:31,560 Ma il fatto che Clang ha urlato contro di noi, dicendo: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, è effettivamente utile. 746 00:33:36,970 --> 00:33:41,970 Significa che l'errore è sulla linea 32 alla posizione del carattere cinque. 747 00:33:41,970 --> 00:33:44,670 Quindi uno, due, tre, quattro, cinque. 748 00:33:44,670 --> 00:33:46,640 Questo è, infatti, dove il problema è. 749 00:33:46,640 --> 00:33:49,710 E anche da tenere a mente in orario d'ufficio, a casa, sono fortunato qui. 750 00:33:49,710 --> 00:33:50,740 Ho un errore. 751 00:33:50,740 --> 00:33:52,660 E 'intenzione di essere relativamente facile da risolvere. 752 00:33:52,660 --> 00:33:56,220 Ma se si ottiene uno schermo pieno di messaggi di errore travolgente, ancora una volta, 753 00:33:56,220 --> 00:33:59,240 si rendono conto che quello in basso potrebbe essere solo sintomatico di 754 00:33:59,240 --> 00:34:00,320 quelli più in alto. 755 00:34:00,320 --> 00:34:03,560 Quindi, sempre inseguire i bug dal basso in alto. 756 00:34:03,560 --> 00:34:06,720 Perché ci potrebbe essere solo una margherita-catena di effetti che ti sta suggerendo 757 00:34:06,720 --> 00:34:09,030 hanno problemi più di quanto effettivamente fare. 758 00:34:09,030 --> 00:34:14,989 >> Quindi, come possiamo risolvere questo problema se il mio obiettivo è quello di incrementare x? 759 00:34:14,989 --> 00:34:15,370 Che cos'è? 760 00:34:15,370 --> 00:34:15,620 Va bene. 761 00:34:15,620 --> 00:34:16,679 Così possiamo fare x globale. 762 00:34:16,679 --> 00:34:18,860 Prendiamo la scorciatoia che ho avvertito in precedenza. 763 00:34:18,860 --> 00:34:20,550 Ma diamine, abbiamo solo bisogno di una soluzione rapida. 764 00:34:20,550 --> 00:34:23,949 Quindi, diciamo solo che x int qui. 765 00:34:23,949 --> 00:34:25,600 Che fa x globale. 766 00:34:25,600 --> 00:34:28,460 Così ora principale ha accesso ad esso. 767 00:34:28,460 --> 00:34:31,780 E incremento ha accesso ad esso. 768 00:34:31,780 --> 00:34:33,860 E così mi permetta di andare avanti e compilare questo ora. 769 00:34:33,860 --> 00:34:36,330 Fai buggy4, Invio. 770 00:34:36,330 --> 00:34:37,440 Sembra da compilare al momento. 771 00:34:37,440 --> 00:34:40,949 Corriamo buggy4, e sembra funzionare davvero. 772 00:34:40,949 --> 00:34:42,780 Ora, questa è una di queste cose - 773 00:34:42,780 --> 00:34:45,870 fai come ti dico, non come faccio io, come ho appena fatto qui. 774 00:34:45,870 --> 00:34:49,239 Perché, in generale, i nostri programmi stanno andando ottenere molto più interessante e 775 00:34:49,239 --> 00:34:50,440 molto più a lungo. 776 00:34:50,440 --> 00:34:53,199 E se la soluzione ai problemi della vita è solo ah, mettere tutti i 777 00:34:53,199 --> 00:34:57,550 variabili nella parte superiore del file, molto velocemente fare programmi ottenere 778 00:34:57,550 --> 00:34:59,700 terribilmente difficile da gestire. 779 00:34:59,700 --> 00:35:02,050 Diventa sempre più difficile pensare a nuovi nomi delle variabili. 780 00:35:02,050 --> 00:35:05,240 Diventa sempre più difficile capire quale variabile sta facendo cosa. 781 00:35:05,240 --> 00:35:08,250 >> E quindi, in generale, questa non è una buona soluzione. 782 00:35:08,250 --> 00:35:09,780 Quindi cerchiamo di farlo meglio. 783 00:35:09,780 --> 00:35:11,920 Non vogliamo usare una variabile globale qui. 784 00:35:11,920 --> 00:35:14,050 Voglio incrementare x. 785 00:35:14,050 --> 00:35:16,050 Così ho potuto, ovviamente - 786 00:35:16,050 --> 00:35:18,450 alla fine della giornata, è una specie di una storia stupida, perché abbiamo appena farlo. 787 00:35:18,450 --> 00:35:22,050 Ma se io non lo sapevo che l'operatore, o non mi è stato permesso di 788 00:35:22,050 --> 00:35:27,700 modificarlo in main sé, in quale altro modo avrei potuto implementare Ken qui, questa 789 00:35:27,700 --> 00:35:31,450 tempo non per cubo, ma per incrementare? 790 00:35:31,450 --> 00:35:32,700 Come faccio a cambiare questa cosa qui? 791 00:35:32,700 --> 00:35:33,025 Gia '. 792 00:35:33,025 --> 00:35:34,275 [Incomprensibile] 793 00:35:37,430 --> 00:35:38,000 DAVID J. MALAN: Ok, bene. 794 00:35:38,000 --> 00:35:40,490 Allora perché non mi passa a x? 795 00:35:40,490 --> 00:35:44,390 E poi invece di tornare, perche 'non mi basta fare ritorno x + 1? 796 00:35:44,390 --> 00:35:46,370 Ora, un paio di cose devono cambiare qui. 797 00:35:46,370 --> 00:35:47,530 Sono sulla strada giusta. 798 00:35:47,530 --> 00:35:48,910 Che altro ho bisogno di modificare? 799 00:35:48,910 --> 00:35:49,470 Qualcun altro. 800 00:35:49,470 --> 00:35:49,882 Si '? 801 00:35:49,882 --> 00:35:51,530 [Incomprensibile] 802 00:35:51,530 --> 00:35:53,520 DAVID J. MALAN: ho bisogno di cambiare il tipo di ritorno di incremento 803 00:35:53,520 --> 00:35:54,590 perché non è nulla. 804 00:35:54,590 --> 00:35:56,650 Void non significa nulla è da restituire. 805 00:35:56,650 --> 00:35:57,600 Ma chiaramente, ora lo è. 806 00:35:57,600 --> 00:36:01,280 Quindi, questo deve cambiare a int per essere coerente con ciò che 807 00:36:01,280 --> 00:36:02,580 In realtà sto ritornando. 808 00:36:02,580 --> 00:36:04,580 >> Ora ci sia ancora qualcosa buggy qui. 809 00:36:04,580 --> 00:36:04,982 Si '? 810 00:36:04,982 --> 00:36:06,590 [Incomprensibile] 811 00:36:06,590 --> 00:36:07,630 DAVID J. MALAN: Così ho bisogno di incrementare x? 812 00:36:07,630 --> 00:36:10,336 [Incomprensibile] 813 00:36:10,336 --> 00:36:11,880 DAVID J. MALAN: Ah, quindi ho bisogno di passare x. 814 00:36:11,880 --> 00:36:13,300 Quindi ho bisogno di fare questo qui. 815 00:36:17,590 --> 00:36:19,690 Quindi il prototipo, devo cambiare questo qui. 816 00:36:19,690 --> 00:36:21,290 Quindi questo deve diventare un int. 817 00:36:21,290 --> 00:36:22,820 Questo deve diventare - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Mi hanno fatto un bug qui. 820 00:36:24,710 --> 00:36:25,780 Si può correggere prima. 821 00:36:25,780 --> 00:36:27,990 Che cosa avrebbe dovuto in realtà essere? 822 00:36:27,990 --> 00:36:29,330 Quindi è avuto modo di essere un qualcosa di int. 823 00:36:29,330 --> 00:36:30,340 Potrebbe essere x. 824 00:36:30,340 --> 00:36:33,120 Ma francamente, se si inizia a chiamare tutti i tuoi x variabili, sta andando per ottenere 825 00:36:33,120 --> 00:36:35,250 sempre meno chiaro che cosa si tratta. 826 00:36:35,250 --> 00:36:38,210 Così facciamo solo arbitrariamente scegliere una diversa convenzione di denominazione per il mio 827 00:36:38,210 --> 00:36:40,220 funzioni di supporto, le funzioni che sto scrivendo. 828 00:36:40,220 --> 00:36:41,100 Lo chiameremo a. 829 00:36:41,100 --> 00:36:44,500 Oppure si può chiamare - chiamiamola even_number per essere ancora più esplicito. 830 00:36:44,500 --> 00:36:47,610 Allora devo restituire ciò che il numero è più 1. 831 00:36:47,610 --> 00:36:49,720 E ora devo cambiare una cosa qui e una 832 00:36:49,720 --> 00:36:50,700 altra cosa qui. 833 00:36:50,700 --> 00:36:54,150 Che cosa devo cambiare sulla linea 21 prima? 834 00:36:54,150 --> 00:36:55,390 Devo assegnarlo a x. 835 00:36:55,390 --> 00:36:57,480 Quindi non posso chiamare x incremento. 836 00:36:57,480 --> 00:37:01,000 Ho bisogno di ricordare la risposta modificando il valore di x il 837 00:37:01,000 --> 00:37:02,020 sinistra. 838 00:37:02,020 --> 00:37:04,930 E anche se x ora è a sinistra e destra, che è totalmente bene perché 839 00:37:04,930 --> 00:37:08,370 destra viene eseguito in primo luogo allora si lasciò cadere nella sinistra 840 00:37:08,370 --> 00:37:10,240 mano cosa, x in questo caso. 841 00:37:10,240 --> 00:37:11,900 E poi, infine, si tratta di una soluzione semplice ora. 842 00:37:11,900 --> 00:37:15,080 Questo dovrebbe corrispondere solo ciò che è in basso. 843 00:37:15,080 --> 00:37:17,120 Numero int. 844 00:37:17,120 --> 00:37:17,320 >> Bene. 845 00:37:17,320 --> 00:37:20,290 Quindi un sacco di modifiche per una funzione davvero stupida. 846 00:37:20,290 --> 00:37:24,250 Ma rappresentante di cose che dovremo sempre più vogliamo fare. 847 00:37:24,250 --> 00:37:25,490 Quindi, fare buggy4. 848 00:37:25,490 --> 00:37:26,485 Ho fatto un casino da qualche parte. 849 00:37:26,485 --> 00:37:27,520 Oh mio Dio. 850 00:37:27,520 --> 00:37:29,660 Cinque errori, come, un bambino di sei-line del programma. 851 00:37:29,660 --> 00:37:36,500 Allora, cosa c'è che non va sulla linea 18, il carattere 5? 852 00:37:36,500 --> 00:37:36,970 Bene. 853 00:37:36,970 --> 00:37:39,330 Quindi devo dichiarare questo int. 854 00:37:39,330 --> 00:37:39,630 Bene. 855 00:37:39,630 --> 00:37:41,790 Quindi cerchiamo di vedere, un sacco di altri errori. 856 00:37:41,790 --> 00:37:42,230 Oh mio dio. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Ma ancora una volta, facciamo solo cancellare lo schermo - 859 00:37:46,020 --> 00:37:48,660 Controllo L qui - e re-run Clang. 860 00:37:48,660 --> 00:37:51,340 Così cinque problemi in realtà è solo per quello. 861 00:37:51,340 --> 00:37:53,500 Così ora corriamo buggy4, Invio. 862 00:37:53,500 --> 00:37:54,150 Whew. 863 00:37:54,150 --> 00:37:57,434 x è stato incrementato correttamente. 864 00:37:57,434 --> 00:37:58,420 >> Bene. 865 00:37:58,420 --> 00:38:01,700 Hai domande su come incrementare i numeri? 866 00:38:01,700 --> 00:38:02,896 Si '? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Perché è che si può cambiare solo x al numero nella variabile 868 00:38:06,864 --> 00:38:08,860 il nome e ti so cosa vuoi dire? 869 00:38:08,860 --> 00:38:09,600 DAVID J. MALAN: Bella domanda. 870 00:38:09,600 --> 00:38:13,130 Come è possibile che io possa cambiare solo x al numero e il programma saprà 871 00:38:13,130 --> 00:38:13,990 immediatamente? 872 00:38:13,990 --> 00:38:16,120 Quindi, di nuovo, pensare ad esso come questa astrazione. 873 00:38:16,120 --> 00:38:20,110 Quindi, se ho am main e Ken è incrementale, francamente, non mi interessa 874 00:38:20,110 --> 00:38:21,540 ciò che Ken chiama il suo iPad. 875 00:38:21,540 --> 00:38:25,350 Non mi interessa quello che lui chiama tutto ciò che ha a che fare con la sua attuazione 876 00:38:25,350 --> 00:38:26,550 di questa funzionalità. 877 00:38:26,550 --> 00:38:32,130 Quindi questo è un dettaglio di implementazione che io, principale, non 878 00:38:32,130 --> 00:38:33,010 devono preoccuparsi. 879 00:38:33,010 --> 00:38:37,440 E così semplicemente cambiando costantemente all'interno della funzione, numero qui 880 00:38:37,440 --> 00:38:41,340 e il numero di qui, è tutto quello che vuole tanto tempo come ho ricompilare. 881 00:38:41,340 --> 00:38:43,820 E 'un po' come se ci pensate - molti di noi, quelli di voi con conducente 882 00:38:43,820 --> 00:38:46,590 licenze che ho guidato, o se hai anche guidato in una macchina - 883 00:38:46,590 --> 00:38:50,710 la maggior parte di noi non hanno idea di come funziona una macchina sotto la cappa. 884 00:38:50,710 --> 00:38:54,710 E letteralmente, se si apre il cofano, la maggior parte di noi - me compreso - 885 00:38:54,710 --> 00:38:56,580 non stanno andando per sapere esattamente cosa stiamo guardando. 886 00:38:56,580 --> 00:38:58,850 Un po 'come si potrebbe sentire con roba come questo adesso. 887 00:38:58,850 --> 00:39:01,380 Ma in realtà non hanno di prendersi cura come la macchina funziona. 888 00:39:01,380 --> 00:39:05,000 Non c'è bisogno di importa di quello che tutte le aste e pistoni e cavi all'interno di 889 00:39:05,000 --> 00:39:07,700 la macchina sta effettivamente facendo. 890 00:39:07,700 --> 00:39:11,360 >> Quindi, qualcosa di simile a quello che voi chiamate il pistone non ha importanza 891 00:39:11,360 --> 00:39:11,920 qui in questo caso. 892 00:39:11,920 --> 00:39:12,490 Stessa idea. 893 00:39:12,490 --> 00:39:12,670 Si '? 894 00:39:12,670 --> 00:39:13,920 [Incomprensibile] 895 00:39:25,250 --> 00:39:29,530 DAVID J. MALAN: Se ci fossero più usi del momento variabile xa fa, 896 00:39:29,530 --> 00:39:32,220 si, il programmatore, dovrebbe cambiare ovunque. 897 00:39:32,220 --> 00:39:35,230 Oppure si potrebbe letteralmente fare file, Menu, quindi Trova / Sostituisci, 898 00:39:35,230 --> 00:39:36,270 qualcosa del genere. 899 00:39:36,270 --> 00:39:40,110 Ma si sta andando ad avere per fare le modifiche da soli. 900 00:39:40,110 --> 00:39:41,200 Bisogna essere coerenti. 901 00:39:41,200 --> 00:39:42,450 [Incomprensibile] 902 00:39:47,200 --> 00:39:48,960 DAVID J. MALAN: un ordine particolare come qui? 903 00:39:48,960 --> 00:39:52,660 Se questo era un altro numero int? 904 00:39:52,660 --> 00:39:52,940 Gia '. 905 00:39:52,940 --> 00:39:56,430 Quindi, al fine conta quando si chiama la funzione. 906 00:39:56,430 --> 00:40:00,350 Quindi, se fossi chiamato Rilancio qui con qualcosa qualcosa di virgola, 907 00:40:00,350 --> 00:40:01,400 c'è una corrispondenza diretta. 908 00:40:01,400 --> 00:40:04,490 La prima variabile, come si chiama, è una copia della prima 909 00:40:04,490 --> 00:40:05,480 argomento qui. 910 00:40:05,480 --> 00:40:07,280 Siamo spiacenti, questo non dovrebbe essere una parentesi. 911 00:40:07,280 --> 00:40:09,300 Le linee argomento secondo fino con il secondo. 912 00:40:09,300 --> 00:40:11,220 >> Quindi l'ordine, sì, le cose. 913 00:40:11,220 --> 00:40:11,490 Bene. 914 00:40:11,490 --> 00:40:13,360 Scusate ho preso una lunga strada per arrivarci. 915 00:40:13,360 --> 00:40:14,610 Altre domande? 916 00:40:16,460 --> 00:40:16,850 Bene. 917 00:40:16,850 --> 00:40:20,300 Quindi cerchiamo di vedere se non si può dipingere un quadro di ciò che sta realmente accadendo 918 00:40:20,300 --> 00:40:22,160 qui sotto il cofano, per così dire. 919 00:40:22,160 --> 00:40:26,310 Quindi questo è un rettangolo che potrebbe rappresentare la memoria del computer. 920 00:40:26,310 --> 00:40:31,240 Quindi, anche se non avete idea di come funziona la memoria RAM o come funziona, almeno 921 00:40:31,240 --> 00:40:33,590 si supponga di avere grappoli di esso in questi giorni. 922 00:40:33,590 --> 00:40:34,740 Hai megabyte di esso. 923 00:40:34,740 --> 00:40:35,760 Hai gigabyte di esso. 924 00:40:35,760 --> 00:40:40,690 E sappiamo da zero settimana che un byte è proprio quello? 925 00:40:40,690 --> 00:40:41,280 8 bit. 926 00:40:41,280 --> 00:40:42,730 Giusto, quindi 8 zeri e di uno. 927 00:40:42,730 --> 00:40:46,300 Quindi, se il vostro computer dispone di un giga di RAM, due giga di RAM in questi giorni, si dispone di un 928 00:40:46,300 --> 00:40:54,450 o 2 miliardi di miliardi di byte di memoria, o di circa 8 miliardi di dollari o 16 miliardi 929 00:40:54,450 --> 00:40:56,560 bit, all'interno del computer. 930 00:40:56,560 --> 00:40:59,710 Ora, a differenza del piccolo esempio Woolly Willy, non è particelle magnetiche 931 00:40:59,710 --> 00:41:00,560 tipicamente più. 932 00:41:00,560 --> 00:41:04,470 Sempre più spesso, nei computer portatili, almeno, è unità a stato solido, SSD, che 933 00:41:04,470 --> 00:41:05,560 solo non hanno parti in movimento. 934 00:41:05,560 --> 00:41:06,710 E 'tutto elettronico. 935 00:41:06,710 --> 00:41:08,070 E 'tutta l'energia elettrica sulla base. 936 00:41:08,070 --> 00:41:12,360 Quindi penso, però, di questo rettangolo come solo rappresenta il uno o due 937 00:41:12,360 --> 00:41:13,930 gigabyte di memoria che avete. 938 00:41:13,930 --> 00:41:15,500 >> Quindi è un pezzo di memoria. 939 00:41:15,500 --> 00:41:20,460 Ora il mondo dell'informatica è sorta di pezzi partizionati off di 940 00:41:20,460 --> 00:41:22,570 memoria per fare cose diverse. 941 00:41:22,570 --> 00:41:25,930 Così, per esempio, se questa è la RAM del computer - come suggerito dal 942 00:41:25,930 --> 00:41:30,400 rettangolo là - scopre che per convenzione, nella parte superiore della RAM, in modo da 943 00:41:30,400 --> 00:41:33,170 di parlare, è in genere quello che si chiama un segmento di testo. 944 00:41:33,170 --> 00:41:35,910 Queste sono le zero e uno che hai compilato. 945 00:41:35,910 --> 00:41:39,040 Così, quando abbiamo guardato sotto il cofano a ciò che a.out è, tutto 946 00:41:39,040 --> 00:41:40,360 gli zeri e quelli - 947 00:41:40,360 --> 00:41:44,000 quando si esegue un programma, questi zero e uno sono caricati dal vostro hard 948 00:41:44,000 --> 00:41:46,290 unità in qualcosa chiamato RAM. 949 00:41:46,290 --> 00:41:48,950 E nella RAM, vengono messe in alto. 950 00:41:48,950 --> 00:41:50,330 Ora invece, si dispone di altre cose. 951 00:41:50,330 --> 00:41:53,060 Dati inizializzati, dati non inizializzati. 952 00:41:53,060 --> 00:41:56,440 Questi due andane di memoria fare riferimento a variabili globali, che 953 00:41:56,440 --> 00:41:57,530 non si usano spesso. 954 00:41:57,530 --> 00:42:00,630 Ma a volte se lo fai, finiscono anche lassù. 955 00:42:00,630 --> 00:42:01,620 Poi c'è un po 'di altre cose. 956 00:42:01,620 --> 00:42:04,130 Le variabili d'ambiente, che non passano molto tempo su. 957 00:42:04,130 --> 00:42:06,120 Ma poi due cose importanti che tornerà nel corso di questo 958 00:42:06,120 --> 00:42:08,130 semestre, stack e heap. 959 00:42:08,130 --> 00:42:12,280 >> Così la maggior parte della memoria del computer è riservato durante l'esecuzione di un programma per 960 00:42:12,280 --> 00:42:14,880 qualcosa chiamato la pila e qualcosa chiamato l'heap. 961 00:42:14,880 --> 00:42:16,940 E non stiamo andando a parlare del mucchio oggi, ma ci sarà 962 00:42:16,940 --> 00:42:18,180 parlare della pila. 963 00:42:18,180 --> 00:42:22,910 E la pila è destinata a evocare la visuale di come la sala da pranzo 964 00:42:22,910 --> 00:42:26,120 vassoi dei pasti in Mather Casa, o dovunque vi capita di essere, dove il 965 00:42:26,120 --> 00:42:27,810 sala da pranzo personale pulirli ogni giorno. 966 00:42:27,810 --> 00:42:30,180 Li pila di sopra del piano in su. 967 00:42:30,180 --> 00:42:33,800 E allo stesso modo in memoria, c'è questa idea di mettere qualcosa su un 968 00:42:33,800 --> 00:42:36,740 pila, mettere qualcosa su una pila, mettere qualcosa su una pila. 969 00:42:36,740 --> 00:42:38,000 E che cosa si intende con questo? 970 00:42:38,000 --> 00:42:41,430 Bene, vediamo di ingrandire solo la metà inferiore di questa immagine, computer 971 00:42:41,430 --> 00:42:43,990 RAM, di proporre quanto segue. 972 00:42:43,990 --> 00:42:48,300 Si scopre che quando si esegue un programma come a.out o ciao, a prescindere 973 00:42:48,300 --> 00:42:49,920 il programma è che hai scritto, 974 00:42:49,920 --> 00:42:53,030 ancora una volta, questi zero e uno sono caricati dal disco rigido - che è 975 00:42:53,030 --> 00:42:56,190 conservazione a lungo termine, vi rimane anche quando si tira la spina - 976 00:42:56,190 --> 00:42:57,220 caricato nella RAM. 977 00:42:57,220 --> 00:42:59,020 RAM è più veloce di hard disk. 978 00:42:59,020 --> 00:43:00,700 E 'più piccolo hard disk. 979 00:43:00,700 --> 00:43:03,490 Ma è dove programmi in diretta mentre li stai eseguendo. 980 00:43:03,490 --> 00:43:06,380 >> Così si fa doppio clic su un programma su un Mac o un PC - è caricato dal 981 00:43:06,380 --> 00:43:07,750 disco rigido in RAM. 982 00:43:07,750 --> 00:43:11,760 Non appena viene caricata in RAM, le zero e uno vada al top modo, l' 983 00:43:11,760 --> 00:43:13,130 cosiddetto segmento di testo. 984 00:43:13,130 --> 00:43:17,040 Ma non appena il programma viene avviato effettivamente in esecuzione, il principale 985 00:43:17,040 --> 00:43:18,140 funzione viene chiamata. 986 00:43:18,140 --> 00:43:21,070 E principale, come abbiamo visto, ha spesso variabili locali. 987 00:43:21,070 --> 00:43:24,560 E ha interi e stringhe e caratteri e simili. 988 00:43:24,560 --> 00:43:28,300 Così, se il programma che hai scritto o il programma che avete 989 00:43:28,300 --> 00:43:33,680 doppio clic utilizzato alcune variabili all'interno del principale, finiscono al 990 00:43:33,680 --> 00:43:37,020 fondo alla pila di memoria, per così dire. 991 00:43:37,020 --> 00:43:39,160 Ora più concretamente, che cosa significa questo in realtà significa? 992 00:43:39,160 --> 00:43:44,080 Questo significa solo che se stavamo per numerare le cose - 993 00:43:44,080 --> 00:43:49,380 se dovessimo andare al numero dei byte di RAM nel computer, si noti che 994 00:43:49,380 --> 00:43:51,650 questo potrebbe essere pari a zero il numero di byte. 995 00:43:51,650 --> 00:43:56,130 Questo potrebbe essere il numero di byte uno, due, tre, quattro, cinque, sei, tutti 996 00:43:56,130 --> 00:43:57,290 la strada fino a come - 997 00:43:57,290 --> 00:44:01,520 2000000000 sarebbe fin lassù in cima. 998 00:44:01,520 --> 00:44:05,960 In altre parole, quando si parla di RAM o memoria in termini di byte, 999 00:44:05,960 --> 00:44:09,680 significa semplicemente che qualcuno ha deciso cosa numerare ciascuna delle 1000 00:44:09,680 --> 00:44:11,110 quei pezzi di memoria. 1001 00:44:11,110 --> 00:44:16,950 >> Così, quando avete bisogno di 32 bit per un int, o avete bisogno di 8 bit per un char, se 1002 00:44:16,950 --> 00:44:18,320 vanno a finire nella memoria? 1003 00:44:18,320 --> 00:44:20,650 Beh concettualmente, hanno appena finiscono in fondo a questo 1004 00:44:20,650 --> 00:44:21,780 cosa chiamata stack. 1005 00:44:21,780 --> 00:44:25,670 Ma ciò che è interessante ora è quando chiama una funzione principale. 1006 00:44:25,670 --> 00:44:28,830 Supponiamo che una funzione chiamata foo, solo un nome arbitrario. 1007 00:44:28,830 --> 00:44:32,480 Ciò che accade è principale è in fondo a questa pila di memoria. 1008 00:44:32,480 --> 00:44:35,630 Foo ora è messo in cima principale in memoria. 1009 00:44:35,630 --> 00:44:40,020 Quindi tutte le variabili locali che foo è finire sorta di concettualmente sopra 1010 00:44:40,020 --> 00:44:40,770 quelli in principale. 1011 00:44:40,770 --> 00:44:46,920 Se foo chiama un'altra funzione chiamata bar, le variabili finiscono qui. 1012 00:44:46,920 --> 00:44:49,790 Se la barra chiama qualcosa d'altro, qui, qui, qui. 1013 00:44:49,790 --> 00:44:53,900 Così che cosa è interessante l'esecuzione di un programma è che, come si chiamano le funzioni, 1014 00:44:53,900 --> 00:44:57,720 e come tali funzioni chiamare le funzioni, e come tali funzioni chiamare funzioni, 1015 00:44:57,720 --> 00:45:00,980 si costruisce questa pila di funzioni in memoria. 1016 00:45:00,980 --> 00:45:06,740 E solo una volta restituisce una funzione si fa a iniziare a ricevere che la memoria indietro. 1017 00:45:06,740 --> 00:45:11,190 Quindi, uno dei modi più semplici per l'esecuzione di memoria in un programma per computer è quello di 1018 00:45:11,190 --> 00:45:14,170 scrivere funzioni che non restituiscono. 1019 00:45:14,170 --> 00:45:16,650 >> Così, per esempio, cerchiamo di dimostrare tanto con un 1020 00:45:16,650 --> 00:45:18,460 programma creato appositamente per buggy. 1021 00:45:18,460 --> 00:45:24,690 Lasciatemi andare avanti e non # include int main (void). 1022 00:45:24,690 --> 00:45:31,270 E ho intenzione di fare, mentre (2> 1), che probabilmente non potrà mai 1023 00:45:31,270 --> 00:45:33,370 cambiare su di noi. 1024 00:45:33,370 --> 00:45:37,720 E lasciatemi andare avanti ora e fare printf. 1025 00:45:37,720 --> 00:45:39,950 A dire il vero, che sta per essere meno visivamente interessante. 1026 00:45:39,950 --> 00:45:40,460 Facciamolo. 1027 00:45:40,460 --> 00:45:44,840 Per int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Facciamo in modo che questo errore, i + +. 1029 00:45:49,740 --> 00:45:51,150 E non printf qui. 1030 00:45:51,150 --> 00:45:52,550 Vediamo in pratica quello che predicava. 1031 00:45:52,550 --> 00:45:54,090 Facciamo un metodo qui. 1032 00:45:54,090 --> 00:46:00,860 Void coro, e diremo int i. 1033 00:46:00,860 --> 00:46:02,295 E poi ho intenzione di dire, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, cerchiamo di renderlo più interessante. 1035 00:46:06,790 --> 00:46:08,350 Facciamo in realtà non stampa nulla. 1036 00:46:08,350 --> 00:46:10,530 Diciamo solo fare questo. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Bene. 1039 00:46:17,000 --> 00:46:20,040 Quindi questo è bacato perché perché? 1040 00:46:20,040 --> 00:46:22,850 Sto facendo questo come vado perché il programma non fa niente 1041 00:46:22,850 --> 00:46:23,420 di interesse. 1042 00:46:23,420 --> 00:46:24,670 Ma questo non è l'obiettivo. 1043 00:46:24,670 --> 00:46:30,440 L'obiettivo è quello di scrivere un programma la cui funzione principale fa che cosa, a quanto pare? 1044 00:46:30,440 --> 00:46:31,370 Chiama se stessa. 1045 00:46:31,370 --> 00:46:32,600 E in realtà, non abbiamo bisogno del ciclo. 1046 00:46:32,600 --> 00:46:36,070 Facciamo anche semplificare questo proprio per non perdere di vista la realtà 1047 00:46:36,070 --> 00:46:37,310 bug fondamentale. 1048 00:46:37,310 --> 00:46:39,200 Chiamate principali coro a cantare qualche coro. 1049 00:46:39,200 --> 00:46:41,760 Poi ho fatto qualcosa di stupido, e avevo chiamata coro coro perché davo per scontato 1050 00:46:41,760 --> 00:46:43,550 qualcun altro stava per attuarlo forse. 1051 00:46:43,550 --> 00:46:45,960 E ora questo non sta andando per compilare ancora. 1052 00:46:45,960 --> 00:46:48,340 Ho bisogno di fare ciò? 1053 00:46:48,340 --> 00:46:49,700 Ho bisogno del prototipo, ricorda. 1054 00:46:49,700 --> 00:46:55,520 Quindi ho bisogno di avere qui coro void (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Così ora, se vado qui - 1056 00:46:57,470 --> 00:46:59,030 in realtà, cerchiamo di utilizzare la finestra più grande. 1057 00:46:59,030 --> 00:47:01,670 Andiamo avanti e fare coro. 1058 00:47:01,670 --> 00:47:06,000 Andiamo avanti e fare coro. 1059 00:47:06,000 --> 00:47:08,302 L'uso di dichiarante identificato i. 1060 00:47:08,302 --> 00:47:09,860 Oh, che era stupido. 1061 00:47:09,860 --> 00:47:11,020 Non abbiamo bisogno l'argomento. 1062 00:47:11,020 --> 00:47:13,680 Diciamo solo fare questo. 1063 00:47:13,680 --> 00:47:14,550 Avremmo voluto iniziato in questo modo. 1064 00:47:14,550 --> 00:47:16,160 Sarebbe stato un programma molto più facile da scrivere. 1065 00:47:16,160 --> 00:47:20,100 Quindi c'è. 1066 00:47:20,100 --> 00:47:23,870 Ora andiamo verso la mia finestra di terminale, eseguire di nuovo Clang. 1067 00:47:23,870 --> 00:47:26,900 E qui andiamo. 1068 00:47:26,900 --> 00:47:28,020 E 'stato veramente veloce. 1069 00:47:28,020 --> 00:47:30,690 Che cosa realmente è successo, però? 1070 00:47:30,690 --> 00:47:33,430 Bene, ora mi aggiungere la riga di stampa, in modo che possiamo vedere. 1071 00:47:33,430 --> 00:47:41,330 Quindi lasciatemi dire printf, diciamo, io sono qui. 1072 00:47:41,330 --> 00:47:43,470 Ok, nessuna variabile, lasceremo così. 1073 00:47:43,470 --> 00:47:44,860 Vorrei ri-eseguire make. 1074 00:47:44,860 --> 00:47:47,940 Permettetemi di re-run coro. 1075 00:47:47,940 --> 00:47:51,235 E dai. 1076 00:47:53,880 --> 00:47:55,130 Continua ad andare. 1077 00:47:57,630 --> 00:47:59,750 Per inciso, perché non è ancora caduto? 1078 00:47:59,750 --> 00:48:02,050 L'errore di segmentazione successo super veloce prima. 1079 00:48:02,050 --> 00:48:04,250 [Incomprensibile] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. MALAN: Esattamente. 1081 00:48:04,830 --> 00:48:06,350 Quindi ci vuole tempo per stampare. 1082 00:48:06,350 --> 00:48:08,370 Ci vuole solo più lavoro da parte del computer. 1083 00:48:08,370 --> 00:48:09,550 E non lo è. 1084 00:48:09,550 --> 00:48:10,620 Segmentazione guasto. 1085 00:48:10,620 --> 00:48:12,140 >> Quindi, notare quanto i programmi veloci correre. 1086 00:48:12,140 --> 00:48:14,110 Se non si sta stampando nulla, super veloce. 1087 00:48:14,110 --> 00:48:18,100 Ma abbiamo ancora ottenuto questo errore di segmentazione, perché quello che stava accadendo? 1088 00:48:18,100 --> 00:48:21,310 Beh, se si pensa a come la memoria del computer è disposto, questo 1089 00:48:21,310 --> 00:48:22,890 sembra essere principale. 1090 00:48:22,890 --> 00:48:23,800 Ma qui - 1091 00:48:23,800 --> 00:48:28,670 facciamo solo chiamare questo coro, e chiama questo coro. 1092 00:48:28,670 --> 00:48:33,420 E ora se lo faccio mia estetica a destra, questo è solo andare a dire coro, 1093 00:48:33,420 --> 00:48:38,060 coro, coro, coro, coro, coro, coro, fino alla nausea. 1094 00:48:38,060 --> 00:48:39,920 E alla fine, che cosa succederà? 1095 00:48:39,920 --> 00:48:46,690 Se il quadro è letteralmente questo, che accade solo concettualmente? 1096 00:48:46,690 --> 00:48:48,320 I sovraccarichi di stack del mucchio. 1097 00:48:48,320 --> 00:48:52,400 O peggio, basta invaso tutto, compreso il segmento di testo, che è 1098 00:48:52,400 --> 00:48:54,530 gli zeri e quelli che rappresentano il vostro programma. 1099 00:48:54,530 --> 00:48:56,690 In breve, questo è solo super, male super. 1100 00:48:56,690 --> 00:48:56,860 Giusto? 1101 00:48:56,860 --> 00:48:58,620 Il vostro programma è fuori controllo. 1102 00:48:58,620 --> 00:49:02,840 Stai usando la memoria modo più di quanto previsto tutto per colpa di una stupida 1103 00:49:02,840 --> 00:49:03,920 errore, in questo caso. 1104 00:49:03,920 --> 00:49:08,160 O in questo caso, una funzione molto deliberatamente fatto stesso chiamante. 1105 00:49:08,160 --> 00:49:09,210 Ora, questo non è affatto male. 1106 00:49:09,210 --> 00:49:12,540 Le funzioni che si definiscono in realtà ha un grande potere 1107 00:49:12,540 --> 00:49:13,700 quando lo si utilizza correttamente. 1108 00:49:13,700 --> 00:49:15,650 Non l'ho usato correttamente qui. 1109 00:49:15,650 --> 00:49:16,940 >> Quindi questo non è affatto male. 1110 00:49:16,940 --> 00:49:20,620 Ma il fatto che non ho mai fatto smettere di chiamare me è un fondamentale 1111 00:49:20,620 --> 00:49:23,050 qui la debolezza di questo programma. 1112 00:49:23,050 --> 00:49:25,090 Allora, dove stiamo andando con tutto questo? 1113 00:49:25,090 --> 00:49:26,230 Ebbene, che cosa sta realmente accadendo? 1114 00:49:26,230 --> 00:49:30,010 Quando chiamo la funzione di incremento, come stavamo facendo in questi esempi, 1115 00:49:30,010 --> 00:49:33,290 Ho un valore come 1 che mi passa trovi 1116 00:49:33,290 --> 00:49:35,820 Passo in una copia del numero uno. 1117 00:49:35,820 --> 00:49:37,080 Quindi, si verifica quanto segue. 1118 00:49:37,080 --> 00:49:40,390 Quindi cerchiamo di andare in esempio incremento. 1119 00:49:40,390 --> 00:49:44,230 E questo ragazzo proprio qui. 1120 00:49:44,230 --> 00:49:46,800 Quindi, ecco quello che succede. 1121 00:49:46,800 --> 00:49:50,770 Quando ho chiamato incremento, e passo in x, pittoricamente ciò che è 1122 00:49:50,770 --> 00:49:53,660 succedendo qui è questa - 1123 00:49:53,660 --> 00:50:00,240 se ho il valore di 1 memorizzati qui, e io in realtà chiamare incremento, che 1124 00:50:00,240 --> 00:50:02,680 ora si chiama coro - 1125 00:50:02,680 --> 00:50:04,010 sì, che mi ha gettato via qui. 1126 00:50:04,010 --> 00:50:06,750 Quindi cerchiamo di chiamare questo incremento. 1127 00:50:06,750 --> 00:50:09,420 E noi non sappiamo che cosa questa funzione successiva sarà. 1128 00:50:09,420 --> 00:50:14,270 Quindi, quello che succede è qui da qualche parte in main, ho un pezzo di 1129 00:50:14,270 --> 00:50:16,670 memoria che memorizza il numero 1. 1130 00:50:16,670 --> 00:50:19,730 Quando chiamo incremento, sto utilizzando un altro pezzo di memoria, ma ora mi 1131 00:50:19,730 --> 00:50:20,840 la copia di 1. 1132 00:50:20,840 --> 00:50:25,480 Quando ho incrementare tale valore, questo diventa 2 - orribilmente scritto sul 1133 00:50:25,480 --> 00:50:26,420 schermata qui. 1134 00:50:26,420 --> 00:50:30,550 Ma allora, che cosa succede non appena ritorni di incremento? 1135 00:50:30,550 --> 00:50:34,610 Questa memoria appena viene restituito al sistema operativo, il che significa che tutte le 1136 00:50:34,610 --> 00:50:37,470 che hai fatto è nulla di utile. 1137 00:50:37,470 --> 00:50:43,460 Quello che in origine era contenuto nella principale è ancora effettivamente. 1138 00:50:43,460 --> 00:50:44,650 >> Allora, dove stiamo andando con questo? 1139 00:50:44,650 --> 00:50:49,400 Bene, si scopre che nella memoria si dispone di questa back to back sequenza di 1140 00:50:49,400 --> 00:50:50,940 byte che si può mettere roba trovi 1141 00:50:50,940 --> 00:50:53,760 E si scopre che abbiamo già visto qualcosa che consiste nel mettere 1142 00:50:53,760 --> 00:50:55,100 cose back to back to back to back. 1143 00:50:55,100 --> 00:51:00,170 Che cosa è una stringa, in base a una settimana e ora due settimane? 1144 00:51:00,170 --> 00:51:01,840 Quindi è solo un insieme di caratteri. 1145 00:51:01,840 --> 00:51:05,290 Così si scopre, proprio come si può mettere i numeri in memoria, allo stesso modo è possibile 1146 00:51:05,290 --> 00:51:06,900 mettere i caratteri in memoria. 1147 00:51:06,900 --> 00:51:09,810 E una volta che si inizia personaggi mettendo in memoria back to back per tornare al 1148 00:51:09,810 --> 00:51:12,800 indietro, si scopre che con la più semplice delle cose come un ciclo for o 1149 00:51:12,800 --> 00:51:14,510 un ciclo while, possiamo iterare - 1150 00:51:14,510 --> 00:51:17,130 da sinistra a destra sopra i caratteri di una stringa - 1151 00:51:17,130 --> 00:51:20,720 e iniziare a massaggiare in caratteri completamente diversi. 1152 00:51:20,720 --> 00:51:25,550 A potrebbe diventare B. B potrebbe diventare C. So che in ultima analisi, si può prendere un 1153 00:51:25,550 --> 00:51:28,830 Frase in inglese che rende effettivamente senso e convertire ciascuno di questi 1154 00:51:28,830 --> 00:51:32,440 lettere, una alla volta a piedi attraverso la memoria del nostro computer a sinistra per 1155 00:51:32,440 --> 00:51:34,300 diritto per crittografare effettivamente. 1156 00:51:34,300 --> 00:51:36,590 >> Quindi cerchiamo di prendere la nostra pausa di cinque minuti qui, e quando torneremo, faremo 1157 00:51:36,590 --> 00:51:39,060 avviare questo processo di scrambling informazioni. 1158 00:51:41,640 --> 00:51:43,180 >> Bene. 1159 00:51:43,180 --> 00:51:48,440 Quindi, prima di immergersi per qualche crypto e queste cose chiamate matrici, lasciatemi 1160 00:51:48,440 --> 00:51:51,610 pausa per tutte le domande, perché mi sento come se davvero sorta di confusa alcuni dei 1161 00:51:51,610 --> 00:51:52,230 questi argomenti. 1162 00:51:52,230 --> 00:51:53,940 Quindi cerchiamo di correggerla se possiamo. 1163 00:51:53,940 --> 00:51:56,480 Così abbiamo appena parlato di valori di ritorno. 1164 00:51:56,480 --> 00:51:58,630 Abbiamo parlato di argomenti. 1165 00:51:58,630 --> 00:52:02,330 E abbiamo parlato di questo concetto, che vedremo tornare nelle prossime settimane 1166 00:52:02,330 --> 00:52:07,140 venire, di vedere la memoria come un insieme di questi impilati 1167 00:52:07,140 --> 00:52:08,540 vassoi, per così dire. 1168 00:52:08,540 --> 00:52:13,460 Dal basso in alto, in modo tale che ogni vassoio che viene messa in pila rappresenta 1169 00:52:13,460 --> 00:52:15,160 una funzione che è attualmente in fase di chiamata. 1170 00:52:17,970 --> 00:52:20,300 Hai ancora domande? 1171 00:52:20,300 --> 00:52:22,890 Così come su - mi permetta di provare facendo una domanda. 1172 00:52:22,890 --> 00:52:25,520 Continuo a rovinare, ma ora E'- you've visto tutti il ​​viso del ragazzo. 1173 00:52:25,520 --> 00:52:27,020 Così torneremo a questo. 1174 00:52:27,020 --> 00:52:29,700 >> Permettetemi quindi di fare una domanda qui. 1175 00:52:29,700 --> 00:52:34,810 Vorrei semplificare questo torna a quello che era prima che alcuni dei nostri precedenti Q & A. 1176 00:52:34,810 --> 00:52:41,730 E il fatto che abbia incremento parentesi aperta, int numero, chiuso 1177 00:52:41,730 --> 00:52:42,260 parentesi. 1178 00:52:42,260 --> 00:52:46,370 Che cosa significa il numero int rappresenta? 1179 00:52:46,370 --> 00:52:47,250 [Incomprensibile] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. MALAN: Un argomento. 1181 00:52:47,870 --> 00:52:50,732 Va bene, ma che cosa è un argomento? 1182 00:52:50,732 --> 00:52:51,620 [Incomprensibile] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. MALAN: Scusa, che cos'è? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Qualcosa si passa trovi 1185 00:52:53,150 --> 00:52:53,570 DAVID J. MALAN: Okay. 1186 00:52:53,570 --> 00:52:54,780 Quindi qualcosa che si passa trovi 1187 00:52:54,780 --> 00:52:56,560 E più in generale, è solo l'ingresso. 1188 00:52:56,560 --> 00:52:59,860 Se si sta scrivendo una funzione e lo scopo che la funzione nella vita è quello di fare 1189 00:52:59,860 --> 00:53:03,290 qualcosa di un po 'diverso ogni volta che lo si utilizza, quindi l'unico modo per 1190 00:53:03,290 --> 00:53:07,710 che accada realmente sembrerebbe fornire con ingresso in modo che 1191 00:53:07,710 --> 00:53:10,180 può fare qualcosa di diverso con il medesimo ogni volta. 1192 00:53:10,180 --> 00:53:13,590 >> Quindi è necessario specificare due cose quando una funzione richiede ingressi. 1193 00:53:13,590 --> 00:53:17,240 È necessario specificare il nome che si vuole dare a quella di ingresso, per puro 1194 00:53:17,240 --> 00:53:20,790 proprio comodo in modo che è possibile fare riferimento ad esso nella funzione che si 1195 00:53:20,790 --> 00:53:23,610 te sta scrivendo, come ho fatto qui in linea 32. 1196 00:53:23,610 --> 00:53:27,840 Ma è anche necessario specificarne il tipo, perché C è un linguaggio di programmazione 1197 00:53:27,840 --> 00:53:28,840 che richiede solo 1198 00:53:28,840 --> 00:53:31,810 che se si vuole una variabile, è necessario dire al computer cosa 1199 00:53:31,810 --> 00:53:32,790 tipo di dati si tratta, 1200 00:53:32,790 --> 00:53:35,540 in gran parte in modo che sappia quanti bit 1201 00:53:35,540 --> 00:53:37,230 assegnare per tale variabile. 1202 00:53:37,230 --> 00:53:38,600 Perché potrebbe essere sei - 1203 00:53:38,600 --> 00:53:39,990 mi dispiace, non saranno sei. 1204 00:53:39,990 --> 00:53:41,050 Esso può essere 16. 1205 00:53:41,050 --> 00:53:41,630 Può essere 8. 1206 00:53:41,630 --> 00:53:44,410 Esso può essere di 32, anche 64. 1207 00:53:44,410 --> 00:53:45,820 Ma il computer ha bisogno di sapere. 1208 00:53:45,820 --> 00:53:49,110 Ora la int sul lato sinistro rappresenta ciò, invece? 1209 00:53:52,825 --> 00:53:53,780 [Incomprensibile] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. MALAN: Che cos'è? 1211 00:53:54,570 --> 00:53:55,390 [Incomprensibile] 1212 00:53:55,390 --> 00:53:57,920 David J. MALAN: Il tipo di funzione e, più specificamente, la 1213 00:53:57,920 --> 00:53:59,755 tipo di sua produzione. 1214 00:53:59,755 --> 00:54:00,220 Giusto. 1215 00:54:00,220 --> 00:54:04,220 Così che la cosa in parentesi rappresenta il suo ingresso, se presente, la 1216 00:54:04,220 --> 00:54:06,640 cosa da sinistra rappresenta la sua uscita. 1217 00:54:06,640 --> 00:54:10,560 E in questo caso, a quanto pare incremento restituisce un int. 1218 00:54:10,560 --> 00:54:14,590 E così int è il tipo restituito da questa funzione. 1219 00:54:14,590 --> 00:54:16,090 >> Che cosa significa per il ritorno? 1220 00:54:16,090 --> 00:54:19,810 Letteralmente, si utilizza la parola chiave return. 1221 00:54:19,810 --> 00:54:24,640 E poi se quello che stanno tornando a destra della parola chiave è un 1222 00:54:24,640 --> 00:54:28,340 numero intero, allora quello è effettivamente coerente con ciò che abbiamo promesso. 1223 00:54:28,340 --> 00:54:31,110 Non si poteva fare qualcosa di simile - 1224 00:54:31,110 --> 00:54:32,280 ciao, mondo - 1225 00:54:32,280 --> 00:54:33,500 perché questa è una stringa. 1226 00:54:33,500 --> 00:54:35,440 Ovviamente non è un numero intero. 1227 00:54:35,440 --> 00:54:40,450 Così, in breve, il peso è davvero su di noi, il programmatore, per essere precisi come 1228 00:54:40,450 --> 00:54:44,730 a quello che stiamo tornando e poi effettivamente fare per restituirlo. 1229 00:54:44,730 --> 00:54:49,030 E poi per fare un po 'più chiaro il contesto - 1230 00:54:49,030 --> 00:54:50,080 eccolo di nuovo. 1231 00:54:50,080 --> 00:54:51,060 Il contesto - 1232 00:54:51,060 --> 00:54:52,830 grande sorpresa in arrivo un attimo. 1233 00:54:52,830 --> 00:54:57,720 Il contesto qui è ora che la memoria del computer è, ancora una volta, un 1234 00:54:57,720 --> 00:54:59,070 gigabyte, due gigabyte, a prescindere. 1235 00:54:59,070 --> 00:54:59,630 Forse è più. 1236 00:54:59,630 --> 00:55:00,540 Forse è meno. 1237 00:55:00,540 --> 00:55:03,750 Ma il computer lo vede come avere diverse sezioni. 1238 00:55:03,750 --> 00:55:04,860 Qualcosa va laggiù. 1239 00:55:04,860 --> 00:55:06,020 Qualcos'altro va lassù. 1240 00:55:06,020 --> 00:55:07,540 Cose diverse va al centro. 1241 00:55:07,540 --> 00:55:09,300 E oggi, dobbiamo solo iniziare a raccontare questa storia. 1242 00:55:09,300 --> 00:55:11,130 >> Ma torneremo a questo nel corso del tempo. 1243 00:55:11,130 --> 00:55:15,000 Per ora, l'unico pezzo di memoria che veramente interessa è il segmento di testo 1244 00:55:15,000 --> 00:55:17,160 perché questo rappresenta solo gli zeri e quelli 1245 00:55:17,160 --> 00:55:18,460 Clang che ha emesso. 1246 00:55:18,460 --> 00:55:21,570 Così, quando si esegue un comando a tastiera come a.out, o si fa doppio 1247 00:55:21,570 --> 00:55:25,350 fare clic su un'icona in Mac OS o Windows, il programma viene caricato dal disco 1248 00:55:25,350 --> 00:55:26,930 guidare in RAM. 1249 00:55:26,930 --> 00:55:30,850 Ed è plopped nella parte superiore della RAM del computer, per così dire. 1250 00:55:30,850 --> 00:55:35,470 Ora invece, come il programma si avvia e principale viene chiamato in 1251 00:55:35,470 --> 00:55:39,240 programma che hai scritto o il programma di Microsoft o Apple ha scritto, nulla della sua 1252 00:55:39,240 --> 00:55:42,930 variabili locali finiscono laggiù in fondo alla memoria del computer. 1253 00:55:42,930 --> 00:55:46,490 Ma se chiama un'altra funzione principale che si dispone di variabili o 1254 00:55:46,490 --> 00:55:48,340 argomenti, finiscono sopra di esso. 1255 00:55:48,340 --> 00:55:50,670 E se tale funzione chiama qualcosa, finiscono sopra di esso, 1256 00:55:50,670 --> 00:55:51,840 sopra di esso, sopra di esso. 1257 00:55:51,840 --> 00:55:56,100 E solo una volta una funzione avviene eseguendo fa la pila di vassoi, così 1258 00:55:56,100 --> 00:55:58,320 di parlare, iniziare a ottenere sempre più in basso. 1259 00:55:58,320 --> 00:56:03,370 E questo è quello che poi, in poche parole, spiega perché, quando si chiama cubo - 1260 00:56:03,370 --> 00:56:04,660 o si chiama incremento - 1261 00:56:04,660 --> 00:56:06,490 si sta passando a una copia del valore. 1262 00:56:06,490 --> 00:56:09,840 E che cosa significa pittoricamente è che si sta letteralmente scrivendo la 1263 00:56:09,840 --> 00:56:14,540 numero 1 in un'altra parte della memoria, che cambia 1 a 2, in caso di 1264 00:56:14,540 --> 00:56:15,360 incremento - 1265 00:56:15,360 --> 00:56:17,450 o ad un 8, nel caso di cubo - 1266 00:56:17,450 --> 00:56:21,450 e poi gettare via che la memoria non appena l'incremento o il cubo 1267 00:56:21,450 --> 00:56:23,410 funzione ritorna. 1268 00:56:23,410 --> 00:56:24,267 >> Domanda. 1269 00:56:24,267 --> 00:56:25,517 [Incomprensibile] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. MALAN: Dove - sono memorizzate le variabili globali in quello che è 1271 00:56:29,970 --> 00:56:32,960 attualmente chiamato i dati inizializzati o dati non inizializzati. 1272 00:56:32,960 --> 00:56:35,900 La differenza è, se si dispone di una variabile globale, e si assegna 1273 00:56:35,900 --> 00:56:39,530 immediatamente un valore con il segno di uguale, finisce in alto là. 1274 00:56:39,530 --> 00:56:43,390 E se hai appena detto int x punto e virgola senza alcun valore, si finisce un po ' 1275 00:56:43,390 --> 00:56:46,670 più basso in RAM semplicemente per convenzione. 1276 00:56:46,670 --> 00:56:49,308 Altre domande. 1277 00:56:49,308 --> 00:56:49,750 Bene. 1278 00:56:49,750 --> 00:56:53,040 >> Quindi questa immagine tornerà, come abbiamo più più potente con quello che possiamo fare 1279 00:56:53,040 --> 00:56:53,830 con il computer. 1280 00:56:53,830 --> 00:56:58,790 Ma per ora, diamo una breve introduzione alla crittografia, un tipo specifico di 1281 00:56:58,790 --> 00:57:01,910 crittografia che non risolve tutti i problemi del mondo, ma non risolve 1282 00:57:01,910 --> 00:57:02,480 alcuni di essi. 1283 00:57:02,480 --> 00:57:06,090 In questo caso qui, abbiamo qualcosa che si chiama crittografia a chiave segreta. 1284 00:57:06,090 --> 00:57:10,430 E crittografia a chiave segreta, come suggerisce il nome, deriva la sua sicurezza 1285 00:57:10,430 --> 00:57:11,330 da un segreto. 1286 00:57:11,330 --> 00:57:14,720 Così, per esempio, se sei di nuovo in grado di scuola e si sta passando un 1287 00:57:14,720 --> 00:57:18,040 piccola lettera d'amore segreta con il ragazzo o la ragazza che si sta schiacciando il - se si 1288 00:57:18,040 --> 00:57:20,820 voleva passare che attraverso il pubblico, probabilmente non avrebbe scritto 1289 00:57:20,820 --> 00:57:24,120 una nota in inglese o qualunque sia la vostra lingua madre è, anzi, è 1290 00:57:24,120 --> 00:57:25,800 potrebbe cifrare. 1291 00:57:25,800 --> 00:57:27,820 Oppure si potrebbe semplicemente inviare un messaggio di testo in questi giorni. 1292 00:57:27,820 --> 00:57:30,310 Ma si potrebbe effettivamente passare una nota in tutta la classe. 1293 00:57:30,310 --> 00:57:33,820 E per farlo in modo sicuro, in modo che i tuoi amici e l'insegnante 1294 00:57:33,820 --> 00:57:36,820 Non so quello che stai scrivendo, si potrebbe trovare una abbastanza semplice 1295 00:57:36,820 --> 00:57:37,800 algoritmo - 1296 00:57:37,800 --> 00:57:39,290 giovane anche se si potrebbe essere - 1297 00:57:39,290 --> 00:57:40,780 solo a rimescolare le parole. 1298 00:57:40,780 --> 00:57:44,390 Così, invece di scrivere A, è possibile scrivere B. Invece di B, è possibile scrivere 1299 00:57:44,390 --> 00:57:46,670 C. Invece di C, è possibile scrivere D, e così via. 1300 00:57:46,670 --> 00:57:50,020 Oppure si potrebbe trovare una traduzione più sofisticato di lettere 1301 00:57:50,020 --> 00:57:51,300 alle lettere diverse. 1302 00:57:51,300 --> 00:57:55,440 Ma il fermo è il ragazzo o la ragazza a cui si sta inviando questa nota deve 1303 00:57:55,440 --> 00:57:56,850 sapere qualcosa. 1304 00:57:56,850 --> 00:57:59,620 Che è ciò che, ovviamente? 1305 00:57:59,620 --> 00:58:01,400 Come, che cosa il vostro segreto. 1306 00:58:01,400 --> 00:58:04,620 Come, che cosa è che la mappatura tra il nome e B e Cs e Ds? 1307 00:58:04,620 --> 00:58:08,780 È solo l'aggiunta di uno, per così dire, a ciascuna delle lettere per passare da 1308 00:58:08,780 --> 00:58:09,730 A a B, da B a C? 1309 00:58:09,730 --> 00:58:11,350 E 'più complesso di quello? 1310 00:58:11,350 --> 00:58:16,450 Quindi tu e il tuo amore hanno bisogno di avere questa informazioni segrete. 1311 00:58:16,450 --> 00:58:18,170 Ma c'è una specie di cattura-22 qui. 1312 00:58:18,170 --> 00:58:20,760 Se questa è la prima volta che si sta inviando questa lettera d'amore attraverso il 1313 00:58:20,760 --> 00:58:25,590 classe, come è quel ragazzo o ragazza andando a conoscere quale sia il segreto è ancora? 1314 00:58:25,590 --> 00:58:28,450 Così chiave segreta di crittografia non risolve tutti i problemi del mondo. 1315 00:58:28,450 --> 00:58:30,490 E c'è in realtà un rapporto che torneremo al verso 1316 00:58:30,490 --> 00:58:31,370 semestre end. 1317 00:58:31,370 --> 00:58:35,970 >> Allo stesso modo, non hanno nessuna di noi probabilmente mai inviato un - 1318 00:58:35,970 --> 00:58:39,453 Analogamente, non più di noi conoscono qualcuno che funziona, per esempio, a 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Eppure, molti di noi hanno probabilmente comprato roba su Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 E ci è stato insegnato di ritenere che queste e-commerce 1322 00:58:45,670 --> 00:58:47,060 transazioni sono sicure. 1323 00:58:47,060 --> 00:58:47,210 Giusto? 1324 00:58:47,210 --> 00:58:49,310 L'URL dice probabilmente https. 1325 00:58:49,310 --> 00:58:51,590 C'è forse un icon lucchetto da qualche parte. 1326 00:58:51,590 --> 00:58:54,680 C'è qualche tipo di crittografia proteggere i dati della carta di credito 1327 00:58:54,680 --> 00:58:56,980 tra te e Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Eppure, se la crittografia implica conoscere qualche segreto, ma non mi 1329 00:59:00,410 --> 00:59:03,330 conosco nessuno su Amazon, e di certo non ho organizzato nessun tipo di 1330 00:59:03,330 --> 00:59:07,350 segreto con qualcuno su Amazon, come è il mio computer o il mio browser facendo questo? 1331 00:59:07,350 --> 00:59:10,100 Ebbene, risulta ci sono altri tipi di crittografia complessivamente in grado di risolvere 1332 00:59:10,100 --> 00:59:10,740 tale problema. 1333 00:59:10,740 --> 00:59:13,610 Ma per oggi, ci concentreremo sul semplice, in cui è possibile organizzare in 1334 00:59:13,610 --> 00:59:18,480 avanzare di conoscere qualche segreto, come più 1 o qualche corrispondenza tra As e breakfast. 1335 00:59:18,480 --> 00:59:20,710 >> E il processo di crittografia comporta generalmente questo. 1336 00:59:20,710 --> 00:59:23,550 Hai un po 'di testo, illustrato qui a sinistra. 1337 00:59:23,550 --> 00:59:26,260 Lo si esegue attraverso un qualche tipo di algoritmo o procedura 1338 00:59:26,260 --> 00:59:27,670 per la crittografia. 1339 00:59:27,670 --> 00:59:31,390 Forse questo è solo A diventa B, B diventa C e poi si finisce con 1340 00:59:31,390 --> 00:59:32,260 criptare testo. 1341 00:59:32,260 --> 00:59:36,450 Nel frattempo, una volta che il tuo amore riceve la nota segreta, lui o lei deve poi 1342 00:59:36,450 --> 00:59:39,950 decifrare generalmente le inversioni di algoritmo in modo da ottenere 1343 00:59:39,950 --> 00:59:41,640 eseguire il testo in chiaro. 1344 00:59:41,640 --> 00:59:43,860 Ora ci sono incarnazioni fisiche di questo. 1345 00:59:43,860 --> 00:59:46,720 Per esempio, questo è un piccolo anello decodificatore segreto. 1346 00:59:46,720 --> 00:59:50,060 E questo è un anello, nel senso che ci sono due quadranti qui. 1347 00:59:50,060 --> 00:59:53,630 Alla periferia al di fuori di questa cosa, ci sono le lettere dalla A alla Z, 1348 00:59:53,630 --> 00:59:55,110 anche se sono in ordine casuale. 1349 00:59:55,110 --> 00:59:58,410 E al suo interno, c'è in realtà alcuni numeri, in modo tale che con questo 1350 00:59:58,410 --> 01:00:02,940 anello, è possibile tipo di ruotare l'esterno ma non l'interno in modo da allineare 1351 01:00:02,940 --> 01:00:04,110 numeri con le lettere. 1352 01:00:04,110 --> 01:00:08,290 E nella clip che state per vedere - alcuni dei quali si può avere visto 24/7 1353 01:00:08,290 --> 01:00:11,120 tutto il periodo di Natale da un film intitolato Una storia di Natale. 1354 01:00:11,120 --> 01:00:16,050 Vedrai che Ralphie piccolo era così ansioso di capire cosa orfanella 1355 01:00:16,050 --> 01:00:19,810 Messaggio segreto di Annie era a lui che era stata comunicata, credo, nel 1356 01:00:19,810 --> 01:00:22,810 forma di messaggi numerici su una scatola di serie. 1357 01:00:22,810 --> 01:00:26,760 E si doveva accumulare tutte le carte piccole che è venuto 1358 01:00:26,760 --> 01:00:27,480 nella scatola di cereali. 1359 01:00:27,480 --> 01:00:28,320 Si doveva spedirle trovi 1360 01:00:28,320 --> 01:00:31,060 Si doveva tornare sul ring segreto decoder, in modo da poter finalmente capire 1361 01:00:31,060 --> 01:00:34,190 che cosa è la mappatura tra lettere e numeri, 1362 01:00:34,190 --> 01:00:35,420 o lettere e lettere. 1363 01:00:35,420 --> 01:00:39,790 Quindi vi do questa breve clip da Una storia di Natale per motivare pset 2 e 1364 01:00:39,790 --> 01:00:42,340 la nostra discussione, in un momento, di array. 1365 01:00:42,340 --> 01:00:43,773 Quindi qui abbiamo Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [RIPRODUZIONE VIDEO] 1367 01:00:44,126 --> 01:00:47,470 -Sia noto a tutti quanti che Ralph Parker è nominato 1368 01:00:47,470 --> 01:00:50,690 membro del Little Orphan Annie Circolo Segreto e il diritto di tutti 1369 01:00:50,690 --> 01:00:53,500 gli onori ei benefici che si verificano ad esso. 1370 01:00:53,500 --> 01:00:56,040 -Firmato, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Controfirmata, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 In inchiostro! 1373 01:01:00,150 --> 01:01:02,910 Onori e benefici, già all'età di nove anni. 1374 01:01:09,970 --> 01:01:10,730 Dai, andiamo avanti con lui. 1375 01:01:10,730 --> 01:01:15,000 Non ho bisogno di tutto ciò che il jazz sui contrabbandieri e pirati. 1376 01:01:15,000 --> 01:01:17,624 -Ascolta domani sera per concludere l'avventura di The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Ora è il momento per il messaggio segreto di Annie per voi membri 1379 01:01:23,380 --> 01:01:25,670 del Circolo Segreto. 1380 01:01:25,670 --> 01:01:30,260 Ricordate, i bambini, solo i membri del Circolo Segreto di Annie in grado di decodificare 1381 01:01:30,260 --> 01:01:31,660 Messaggio segreto di Annie. 1382 01:01:31,660 --> 01:01:36,230 Ricordate, Annie dipende da te. 1383 01:01:36,230 --> 01:01:38,720 Impostare le pin a B2. 1384 01:01:38,720 --> 01:01:41,040 Ecco il messaggio. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Sono nel mio incontro primo segreto. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre era in questa sera grande voce. 1389 01:01:51,700 --> 01:01:54,890 Potrei dire che il messaggio di questa sera è stato davvero importante. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Questo è un messaggio da Annie se stessa. 1392 01:01:58,590 --> 01:01:59,840 Ricordate, non dirlo a nessuno. 1393 01:02:04,570 --> 01:02:08,750 -90 Secondi dopo, io sono in camera solo nella casa dove un bambino di nove anni 1394 01:02:08,750 --> 01:02:12,980 poteva sedersi nel rispetto della privacy e decodifica. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. sono andato a quello successivo. 1396 01:02:17,130 --> 01:02:20,330 E. La prima parola è essere. 1397 01:02:20,330 --> 01:02:22,670 S. Veniva più facile ora. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, andiamo, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Devo andare. 1401 01:02:28,430 --> 01:02:30,350 -I'Ll subito verso il basso, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Accertarsi di. 1404 01:02:38,270 --> 01:02:40,000 Assicurarsi di che cosa? 1405 01:02:40,000 --> 01:02:42,105 Qual è stato Little Orphan Annie cercando di dire? 1406 01:02:42,105 --> 01:02:43,095 Assicurarsi di che cosa? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy ha avuto modo di andare. 1409 01:02:44,580 --> 01:02:45,570 Vi prego di venire fuori? 1410 01:02:45,570 --> 01:02:46,560 -Va bene, ma. 1411 01:02:46,560 --> 01:02:48,540 Vengo subito fuori. 1412 01:02:48,540 --> 01:02:50,580 -Mi è stato sempre vicino ora. 1413 01:02:50,580 --> 01:02:52,550 La tensione era terribile. 1414 01:02:52,550 --> 01:02:53,355 Che cosa è stato? 1415 01:02:53,355 --> 01:02:56,315 Il destino del pianeta può in bilico. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy deve andare. 1418 01:02:59,165 --> 01:03:02,310 -I'Ll subito fuori, per gridare forte. 1419 01:03:02,310 --> 01:03:04,000 -Accidenti, quasi. 1420 01:03:04,000 --> 01:03:05,180 Le mie dita volavano. 1421 01:03:05,180 --> 01:03:07,150 La mia mente era una trappola d'acciaio. 1422 01:03:07,150 --> 01:03:08,790 Ogni poro vibrato. 1423 01:03:08,790 --> 01:03:10,040 Era quasi chiaro. 1424 01:03:10,040 --> 01:03:13,400 Sì, sì, sì, sì. 1425 01:03:13,400 --> 01:03:18,960 -Assicurati di bere il tuo Ovomaltina. 1426 01:03:18,960 --> 01:03:20,210 Ovomaltina? 1427 01:03:24,010 --> 01:03:25,260 Uno spot scadente? 1428 01:03:28,200 --> 01:03:29,640 Figlio di una cagna. 1429 01:03:29,640 --> 01:03:33,340 [END RIPRODUZIONE VIDEO] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. MALAN: Così ci abbiamo crittografia. 1431 01:03:36,040 --> 01:03:39,670 Così come in un computer si può fare per l'attuazione o 1432 01:03:39,670 --> 01:03:40,950 rappresentare le cose come questa? 1433 01:03:40,950 --> 01:03:44,430 Bene, abbiamo bisogno di un modo di esprimere se stessi un po 'più flessibile rispetto 1434 01:03:44,430 --> 01:03:46,420 le variabili finora hanno permesso. 1435 01:03:46,420 --> 01:03:47,370 Abbiamo avuto int. 1436 01:03:47,370 --> 01:03:48,380 Abbiamo avuto caratteri. 1437 01:03:48,380 --> 01:03:50,790 Abbiamo avuto float e double e pochi altri. 1438 01:03:50,790 --> 01:03:55,050 Ma questi sono i singoli pezzi di memoria che in realtà non ci permettono di 1439 01:03:55,050 --> 01:03:58,010 esprimere le cose come le parole e le frasi e frasi. 1440 01:03:58,010 --> 01:04:00,200 In effetti, abbiamo chiamato tali stringhe cose. 1441 01:04:00,200 --> 01:04:03,650 Ma abbiamo promesso che questo è davvero solo una semplificazione nella CS50 1442 01:04:03,650 --> 01:04:07,020 libreria che stiamo intenzione di staccare. 1443 01:04:07,020 --> 01:04:08,970 >> E così cominciamo a farlo qui. 1444 01:04:08,970 --> 01:04:11,130 Lasciatemi andare avanti e aprire un file - 1445 01:04:11,130 --> 01:04:13,770 tutti questi file sono disponibili come al solito on-line - 1446 01:04:13,770 --> 01:04:19,120 array.c chiamato per risolvere un problema non correlato alle stringhe, ma che dipinge un 1447 01:04:19,120 --> 01:04:23,040 figura qui di come si potrebbe usare qualcosa chiamato un array. 1448 01:04:23,040 --> 01:04:25,530 Un array è un tipo di dati. 1449 01:04:25,530 --> 01:04:31,320 E 'un tipo di variabile, in qualche modo, che dispone di più tipi di dati più piccoli 1450 01:04:31,320 --> 01:04:34,150 all'interno di esso back to back to back to back. 1451 01:04:34,150 --> 01:04:37,700 Così, per esempio, se vogliamo scrivere un piccolo programma che ti dà il tuo 1452 01:04:37,700 --> 01:04:42,110 quiz media per un corso come 50 che ha due quiz, si potrebbe molto facilmente 1453 01:04:42,110 --> 01:04:45,170 scrivere questo programma - basato anche su alcuni dei materiali della scorsa settimana - 1454 01:04:45,170 --> 01:04:47,770 utilizzando GetInt e una coppia di variabili. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, ed è abbastanza semplice. 1456 01:04:51,920 --> 01:04:55,930 E 'forse da 10, 20 righe di codice, max, di attuare un programma che chiede il 1457 01:04:55,930 --> 01:05:01,170 utente per due punteggi di quiz e poi calcola la loro media con l'aggiunta di loro 1458 01:05:01,170 --> 01:05:03,850 insieme, dividendo per due, e quindi la stampa dei risultati. 1459 01:05:03,850 --> 01:05:06,380 Si potrebbe probabilmente fare abbastanza facilmente che ora, dopo 1460 01:05:06,380 --> 01:05:07,510 un certo numero di minuti. 1461 01:05:07,510 --> 01:05:11,005 >> Ma il problema è che supporre che il 50 aveva tre o quattro quiz. 1462 01:05:11,005 --> 01:05:13,510 Supponiamo di voler utilizzare lo stesso programma per una classe che aveva 1463 01:05:13,510 --> 01:05:14,850 quiz settimanale. 1464 01:05:14,850 --> 01:05:16,610 Pensate a una classe che ha quiz settimanale. 1465 01:05:16,610 --> 01:05:20,610 Se c'è come 16 o in modo da settimane in un semestre, ora si dispone di 16 variabili - 1466 01:05:20,610 --> 01:05:24,270 quiz1 int, int quiz2, quiz3 int, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Non appena si inizia a vedere questa ridondanza, il copia e incolla 1468 01:05:27,560 --> 01:05:31,390 del codice, si dovrebbe iniziare a farvi piacerebbe che ci fosse un modo migliore. 1469 01:05:31,390 --> 01:05:33,930 E per fortuna, a causa di array, che ci sia. 1470 01:05:33,930 --> 01:05:34,980 Allora, facciamo questo. 1471 01:05:34,980 --> 01:05:38,430 In primo luogo, permettetemi di presentarvi una cosa molto semplice che non abbiamo usato finora, 1472 01:05:38,430 --> 01:05:40,140 ma lo vedrete tanto in tanto nel codice. 1473 01:05:40,140 --> 01:05:42,360 Questo è ciò che generalmente chiamato una costante. 1474 01:05:42,360 --> 01:05:45,790 Quindi è una costante, nel senso che non è mai tale valore cambia. 1475 01:05:45,790 --> 01:05:49,210 La convenzione umana durante la creazione di una costante è quello di utilizzare tutto il capitale 1476 01:05:49,210 --> 01:05:51,940 lettere, solo in modo che si distingue sul serio nel codice. 1477 01:05:51,940 --> 01:05:55,960 E la parola chiave speciale che si utilizza è in C # define. 1478 01:05:55,960 --> 01:06:00,250 Quindi, se si dice # define, poi uno spazio, quindi la parola che si desidera utilizzare per 1479 01:06:00,250 --> 01:06:03,260 la costante di nome, e quindi il valore della costante. 1480 01:06:03,260 --> 01:06:06,180 Quindi avviso, questo è diverso da assegnare qualcosa a una variabile. 1481 01:06:06,180 --> 01:06:07,020 Non c'è segno di uguale. 1482 01:06:07,020 --> 01:06:08,240 Non c'è punto e virgola. 1483 01:06:08,240 --> 01:06:11,410 Questo è ciò che è noto come una direttiva del preprocessore, ma più in 1484 01:06:11,410 --> 01:06:12,210 un'altra volta. 1485 01:06:12,210 --> 01:06:18,540 >> Per ora, questo crea un valore immutabile chiamato QUIZ il cui effettivo 1486 01:06:18,540 --> 01:06:19,940 valore numerico è 2. 1487 01:06:19,940 --> 01:06:24,020 Quindi, ovunque compaia QUIZZES, quiz, quiz in questo file, che è 1488 01:06:24,020 --> 01:06:25,410 solo il numero 2. 1489 01:06:25,410 --> 01:06:28,100 Ora, se guardo principale ora, vediamo come funziona. 1490 01:06:28,100 --> 01:06:29,500 In un primo momento, sembra un po 'criptico. 1491 01:06:29,500 --> 01:06:31,340 Ma è tutta roba da una settimana. 1492 01:06:31,340 --> 01:06:32,710 Chiedi l'utente per i gradi. 1493 01:06:32,710 --> 01:06:33,630 Come possiamo fare questo? 1494 01:06:33,630 --> 01:06:35,470 Beh, in linea 22 - 1495 01:06:35,470 --> 01:06:37,210 questo è davvero la parte succosa - 1496 01:06:37,210 --> 01:06:40,960 Dichiaro un galleggiante, ma non solo un galleggiante unico. 1497 01:06:40,960 --> 01:06:44,620 Sto dichiarando, anzi, una serie di valori in virgola mobile. 1498 01:06:44,620 --> 01:06:49,100 Tale variabile sta per essere chiamato gradi, come implicito qui. 1499 01:06:49,100 --> 01:06:53,080 Ma l'unico pezzo di nuova sintassi allora sono queste parentesi quadre, il fatto 1500 01:06:53,080 --> 01:06:59,350 che ho detto voti float e poi parentesi aperta e poi un numero. 1501 01:06:59,350 --> 01:07:02,460 Notate, se questa è una costante, questa è proprio come abbiamo fatto questo. 1502 01:07:02,460 --> 01:07:06,890 Questo significa calcolatore ehi, dammi due galleggianti, e cerchiamo di chiamare collettivamente 1503 01:07:06,890 --> 01:07:08,220 loro gradi. 1504 01:07:08,220 --> 01:07:11,920 Questo è in contrasto con un processo molto più noioso come questo. 1505 01:07:11,920 --> 01:07:15,850 Float grade1, galleggiare grade2, e così via. 1506 01:07:15,850 --> 01:07:20,010 Quindi un array ci permette di attuare questa idea, ma molto meno disordinato, in 1507 01:07:20,010 --> 01:07:24,630 modo tale che si può scrivere una linea di codice invece di, diciamo, 16 per un 16 1508 01:07:24,630 --> 01:07:25,740 settimana semestre. 1509 01:07:25,740 --> 01:07:29,950 Quindi non volevo a livello di codice 2, perché se si pensa di questo ora 1510 01:07:29,950 --> 01:07:34,160 logicamente - supponiamo che il prossimo anno CS50 cambia di 3 quiz invece. 1511 01:07:34,160 --> 01:07:35,510 E ho avuto il numero 2 qui. 1512 01:07:35,510 --> 01:07:36,600 Ho avuto il numero 2 qui. 1513 01:07:36,600 --> 01:07:37,580 Ho avuto il numero 2 qui. 1514 01:07:37,580 --> 01:07:38,560 Ho avuto il numero 2 qui. 1515 01:07:38,560 --> 01:07:43,180 Diventa molto noioso e molto facile da vite e cambiare accidentalmente 1516 01:07:43,180 --> 01:07:47,690 un valore a 3 e perdere un altro valore di 2. 1517 01:07:47,690 --> 01:07:52,460 Quindi ho intenzione di astratto invece questa distanza e usare questa costante che, come il suo 1518 01:07:52,460 --> 01:07:54,120 nome stesso, non cambia mai. 1519 01:07:54,120 --> 01:07:57,710 E ora, non importa se abbiamo diversi quiz quest'anno o il prossimo, io 1520 01:07:57,710 --> 01:08:01,210 basta cambiare in un posto, qui in alto. 1521 01:08:01,210 --> 01:08:02,720 >> Ecco, questo è tutto costante. 1522 01:08:02,720 --> 01:08:08,680 Nel frattempo, la nuova funzionalità concettuale è quella di una matrice. 1523 01:08:08,680 --> 01:08:14,660 Così le parentesi quadre mi danno questo molti carri allegorici e mi consente di blocco 1524 01:08:14,660 --> 01:08:16,630 li chiamano gradi qui. 1525 01:08:16,630 --> 01:08:17,990 Così ora vediamo che cosa ho intenzione di fare. 1526 01:08:17,990 --> 01:08:20,359 Qui nella riga 24 è l'inizio di un ciclo. 1527 01:08:20,359 --> 01:08:22,260 Questo è davvero niente di speciale. 1528 01:08:22,260 --> 01:08:25,060 E 'solo con quiz al posto di un hard-coded numero. 1529 01:08:25,060 --> 01:08:27,790 Ma non c'è nulla di diverso ci intellettualmente dalla settimana scorsa. 1530 01:08:27,790 --> 01:08:29,040 Questo è solo printf. 1531 01:08:29,040 --> 01:08:35,490 So printf ("numero d quiz% di% d"), perché voglio solo stampare darmi quiz 1532 01:08:35,490 --> 01:08:38,050 numero uno dei due e poi due di due. 1533 01:08:38,050 --> 01:08:39,850 Quindi questa è puramente una cosa estetica. 1534 01:08:39,850 --> 01:08:42,500 Ma la parte interessante è ora in linea 27. 1535 01:08:42,500 --> 01:08:48,310 Per riempire una delle due segnaposto con virgola mobile 1536 01:08:48,310 --> 01:08:51,029 valore, di nuovo utilizzare le parentesi quadre. 1537 01:08:51,029 --> 01:08:55,620 In questo caso, sto usando io, perché questo ciclo for è iniziata con i pari 1538 01:08:55,620 --> 01:08:57,560 quale valore, a quanto pare? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Così la prima iterazione del ciclo, è come se mi 1541 01:09:01,350 --> 01:09:02,689 ha scritto questo nel codice. 1542 01:09:02,689 --> 01:09:05,580 Ma sulla seconda iterazione di questo ciclo, è come se mi 1543 01:09:05,580 --> 01:09:07,750 ha scritto questo nel mio codice. 1544 01:09:07,750 --> 01:09:10,750 Ma il fatto che sto usando una variabile è perfetto, perché, come dice il nome 1545 01:09:10,750 --> 01:09:14,300 suggerisce, è variando il suo valore ad ogni iterazione. 1546 01:09:14,300 --> 01:09:17,370 Così sto compilando questa matrice un punto alla volta. 1547 01:09:17,370 --> 01:09:18,910 Che cosa significa questo array assomiglia? 1548 01:09:18,910 --> 01:09:21,430 Beh, il motivo per cui ho disegnato questo rettangolo super semplice sullo schermo qui 1549 01:09:21,430 --> 01:09:23,350 prima era per questo motivo. 1550 01:09:23,350 --> 01:09:27,279 Un array è solo un pezzo di memoria seguito da un altro pezzo di memoria, 1551 01:09:27,279 --> 01:09:30,109 seguito da un altro pezzo di memoria, e così via. 1552 01:09:30,109 --> 01:09:35,260 Quindi, se la mia matrice è di dimensione 2, in questo caso qui, tutto quello che avrebbe fatto da 1553 01:09:35,260 --> 01:09:37,590 digitando il mio punteggio quiz, come qui. 1554 01:09:37,590 --> 01:09:39,430 Ho ottenuto 100 su questo. 1555 01:09:39,430 --> 01:09:42,020 E poi ho avuto un 99 su questo. 1556 01:09:42,020 --> 01:09:46,040 Allora questa memoria potrebbe anche non essere usato perché ho solo chiesto al 1557 01:09:46,040 --> 01:09:48,689 computer per un array di dimensione 2. 1558 01:09:48,689 --> 01:09:50,180 Queste piazze sono ancora lì. 1559 01:09:50,180 --> 01:09:50,340 Giusto? 1560 01:09:50,340 --> 01:09:52,500 Hai ancora due gigabyte di RAM, anche se sei solo 1561 01:09:52,500 --> 01:09:53,979 chiedendo due galleggianti. 1562 01:09:53,979 --> 01:09:58,710 Così l'idea che sta dietro gli array è che il computer richiede solo un pezzo di memoria 1563 01:09:58,710 --> 01:10:03,230 e ripartisce poi pezzi più piccoli back to back to back to back. 1564 01:10:03,230 --> 01:10:04,740 E così questo è tutto un array è. 1565 01:10:04,740 --> 01:10:09,080 Si tratta di un pezzo di memoria adiacente, all'interno della quale si possono mettere le cose. 1566 01:10:09,080 --> 01:10:12,400 >> Ora, questo accade per fare poi basta un po 'di aritmetica noioso. 1567 01:10:12,400 --> 01:10:16,170 Se scorrere verso il basso qui, questo è dove ho poi scorrere l'array. 1568 01:10:16,170 --> 01:10:19,410 Io vengo con la somma di tutti i valori della matrice. 1569 01:10:19,410 --> 01:10:22,390 E poi usare la funzione da queste parti per fare effettivamente il 1570 01:10:22,390 --> 01:10:23,940 somma divisa per quiz. 1571 01:10:23,940 --> 01:10:27,450 Ma permettetemi di salutare la mia mano in quella come una sorta di aritmetica sufficiente per ora. 1572 01:10:27,450 --> 01:10:30,010 Ma tutto quello che sta facendo per me, in ultima analisi, sta calcolando una media. 1573 01:10:30,010 --> 01:10:33,640 Quindi prima quiz più secondo quiz, diviso 2, e quindi la stampa 1574 01:10:33,640 --> 01:10:34,700 fuori come un int. 1575 01:10:34,700 --> 01:10:39,030 >> Ma andiamo ora transizione verso un esempio diverso chiamato stringa1, 1576 01:10:39,030 --> 01:10:42,370 che dipinge un quadro simile, ma con le stringhe. 1577 01:10:42,370 --> 01:10:45,550 Lasciatemi andare avanti e semplificare questo solo per un momento. 1578 01:10:45,550 --> 01:10:48,340 E perdona il rientro per ora. 1579 01:10:48,340 --> 01:10:52,280 Del bando nella riga 19 di questo esempio, ho una stringa dall'utente. 1580 01:10:52,280 --> 01:10:55,780 Ma notate quello che sto facendo in prossima linee 22 in poi. 1581 01:10:55,780 --> 01:11:00,260 In realtà sto iterando da i fino a - e questo è un nuovo trucco - 1582 01:11:00,260 --> 01:11:02,730 strlen, stringa di lunghezza. 1583 01:11:02,730 --> 01:11:07,010 Questa è una funzione che viene fornito con C che, se si passa una stringa, racconta 1584 01:11:07,010 --> 01:11:08,950 il numero di caratteri in quella stringa. 1585 01:11:08,950 --> 01:11:09,440 Questo è tutto. 1586 01:11:09,440 --> 01:11:12,520 Il fatto che è strlen invece di lunghezza della stringa è solo perché è 1587 01:11:12,520 --> 01:11:13,040 più succinta. 1588 01:11:13,040 --> 01:11:17,100 30 anni fa, la gente amava scrivere le cose nel modo più succinto possibile. 1589 01:11:17,100 --> 01:11:19,080 Così abbiamo mantenuto tale convenzione qui. 1590 01:11:19,080 --> 01:11:21,730 i + + significa solo incrementare i in ogni iterazione. 1591 01:11:21,730 --> 01:11:24,310 E ora notare questo, che è davvero interessante. 1592 01:11:24,310 --> 01:11:28,730 Quindi, alla riga 24, dico computer, dammi un personaggio, otto 1593 01:11:28,730 --> 01:11:30,770 bit, e lo chiamano c. 1594 01:11:30,770 --> 01:11:35,370 Ma che cosa è questo sul lato destro dicendo? 1595 01:11:35,370 --> 01:11:38,150 In inglese, che cosa rappresenta? 1596 01:11:38,150 --> 01:11:40,070 [Incomprensibile] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. MALAN: Esattamente. 1598 01:11:40,490 --> 01:11:42,390 Dammi il primo carattere della matrice. 1599 01:11:42,390 --> 01:11:45,400 O, più generalmente, dammi l'i-esimo carattere nella matrice. 1600 01:11:45,400 --> 01:11:48,230 E rendo conto che è importante ora che, come gli informatici, siamo in realtà 1601 01:11:48,230 --> 01:11:49,330 contare da 0. 1602 01:11:49,330 --> 01:11:51,290 Tu non hanno il potere ora per iniziare a fare questo. 1603 01:11:51,290 --> 01:11:54,580 Ora ti devi comportare in linea con le aspettative del computer e 1604 01:11:54,580 --> 01:11:58,010 contare da zero, perché [0] sta per essere il primo 1605 01:11:58,010 --> 01:11:59,670 carattere in una stringa. 1606 01:11:59,670 --> 01:12:01,320 [1] sta per essere il secondo. 1607 01:12:01,320 --> 01:12:03,610 [2] sarà il terzo, e così via. 1608 01:12:03,610 --> 01:12:08,840 Quindi questo programma, se lo compila - questo è, ancora una volta, stringa1. 1609 01:12:08,840 --> 01:12:11,040 >> Quindi, fare stringa1. 1610 01:12:11,040 --> 01:12:16,730 E ora corro stringa1 nella mia finestra di terminale. 1611 01:12:16,730 --> 01:12:19,180 E 'in attesa di input, così ho intenzione di scrivere, per esempio, David. 1612 01:12:19,180 --> 01:12:20,080 Invio. 1613 01:12:20,080 --> 01:12:23,350 E ora la stampa DAVID tutto su linee diverse, perché 1614 01:12:23,350 --> 01:12:24,430 notare quello che sto facendo. 1615 01:12:24,430 --> 01:12:27,510 Sto stampando un carattere alla volta. 1616 01:12:27,510 --> 01:12:29,100 Ora, noi non entreremo nei dettagli oggi su questo. 1617 01:12:29,100 --> 01:12:31,610 Ma ho cancellato poco fa questo controllo qui. 1618 01:12:31,610 --> 01:12:36,310 Si scopre che se l'utente si comporta male, contraddittorio, o semplicemente 1619 01:12:36,310 --> 01:12:41,780 confuso, si può effettivamente non riescono a dare una stringa di una certa lunghezza. 1620 01:12:41,780 --> 01:12:43,640 Se si preme il tasto sbagliato sulla tastiera, si potrebbe dare 1621 01:12:43,640 --> 01:12:44,390 nessuna stringa a tutti. 1622 01:12:44,390 --> 01:12:47,790 Oppure, se si è dannoso, si potrebbe tentare di incollare merita una gigabyte di un 1623 01:12:47,790 --> 01:12:49,380 saggio per riempire questa stringa. 1624 01:12:49,380 --> 01:12:52,060 E se il computer esaurisce la memoria, si scopre che stiamo andando 1625 01:12:52,060 --> 01:12:54,310 per tornare questo valore speciale chiamato null. 1626 01:12:54,310 --> 01:12:57,550 Quindi, per ora, è sufficiente sapere che c'è questo valore speciale chiamato nulla che 1627 01:12:57,550 --> 01:13:01,000 ci permetterà di controllare quando siamo fuori della memoria, tra le altre cose. 1628 01:13:01,000 --> 01:13:07,330 >> Ma se apro adesso stringa2, si noti una differenza qui. 1629 01:13:07,330 --> 01:13:09,760 Si noti una differenza qui con stringa2. 1630 01:13:09,760 --> 01:13:13,260 Con stringa2, questo ciclo for è un po 'diverso. 1631 01:13:13,260 --> 01:13:16,350 Mi permette di cancellare i valori null in modo che si possa parlare di quelli un'altra volta. 1632 01:13:16,350 --> 01:13:18,460 Ma cosa c'è di diverso il ciclo for questa volta? 1633 01:13:21,580 --> 01:13:23,160 E posso tornare all'esempio precedente. 1634 01:13:23,160 --> 01:13:24,800 Ecco, questo è la versione due. 1635 01:13:24,800 --> 01:13:27,020 Questa è la versione uno. 1636 01:13:27,020 --> 01:13:31,935 Uno, due, uno due. 1637 01:13:35,030 --> 01:13:38,240 Quindi la chiamata strlen è dove? 1638 01:13:38,240 --> 01:13:40,420 E 'nella prima parte del ciclo for. 1639 01:13:40,420 --> 01:13:43,060 Ogni pensiero sul motivo per cui sto facendo questo? 1640 01:13:43,060 --> 01:13:43,690 Gia '. 1641 01:13:43,690 --> 01:13:46,010 [Incomprensibile] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. MALAN: Quindi non chiamare la funzione ogni volta. 1643 01:13:47,630 --> 01:13:48,040 Esattamente. 1644 01:13:48,040 --> 01:13:50,350 Ricordiamo da cicli for che sono super semplice una volta che si ordina di 1645 01:13:50,350 --> 01:13:52,180 capire che questo è l'inizializzazione, l' 1646 01:13:52,180 --> 01:13:53,330 condizione, e l'aggiornamento. 1647 01:13:53,330 --> 01:13:55,430 Il problema è che la condizione si verifica su ogni 1648 01:13:55,430 --> 01:13:56,600 iterazione del ciclo. 1649 01:13:56,600 --> 01:13:59,930 E così, in questo esempio qui, ciò che è male per il fatto 1650 01:13:59,930 --> 01:14:03,500 che questa è la mia condizione? 1651 01:14:03,500 --> 01:14:05,920 Stai chiamando strlen ancora e ancora e ancora. 1652 01:14:05,920 --> 01:14:08,990 Ma una volta che ho digitato DAVID, la lunghezza di tale stringa è cinque. 1653 01:14:08,990 --> 01:14:11,560 E non cambierà ad ogni iterazione del ciclo perché il 1654 01:14:11,560 --> 01:14:15,560 stringa è ancora D-A-V-I-D. Quindi questo è un accenno a quello che sta per diventare un 1655 01:14:15,560 --> 01:14:19,650 idea sempre più importante conosciuta come una decisione di progettazione, in cui - solo che non 1656 01:14:19,650 --> 01:14:21,640 rendere il computer a fare lavoro inutile. 1657 01:14:21,640 --> 01:14:25,630 >> Ora, come in anteprima di pset 2, pset 2 in edizione standard è 1658 01:14:25,630 --> 01:14:28,850 andando a sfidare di implementare effettivamente un certo numero di cifre, un po 'di 1659 01:14:28,850 --> 01:14:32,650 numero di algoritmi di crittografia, in modo che è possibile crittografare e decrittografare 1660 01:14:32,650 --> 01:14:35,530 messaggi segreti, molto simile al Ralphie lì decodificato. 1661 01:14:35,530 --> 01:14:38,720 Nell'edizione hacker di pset 2, abbiamo intenzione di andare un po 'oltre. 1662 01:14:38,720 --> 01:14:42,010 Stiamo andando a portata di mano è un file da un sistema informatico che contiene un vero 1663 01:14:42,010 --> 01:14:45,690 intero gruppo di nomi utente e password criptate reali, e la sfida 1664 01:14:45,690 --> 01:14:49,110 per l'edizione pirata sta per essere quello di rompere le password e la figura 1665 01:14:49,110 --> 01:14:53,060 cosa crittografia o quale segreto è stato utilizzato per in realtà 1666 01:14:53,060 --> 01:14:55,080 generare le password. 1667 01:14:55,080 --> 01:14:58,360 E abbiamo intenzione di farlo utilizzando una nuova funzionalità di C che io darò 1668 01:14:58,360 --> 01:15:02,200 è solo una demo di, noto come argomenti della riga di comando. 1669 01:15:02,200 --> 01:15:05,930 >> Così si scopre, come alcuni di voi avranno visto in sezione o nei libri di testo, 1670 01:15:05,930 --> 01:15:09,850 principale non sempre deve essere vuoto tra parentesi. 1671 01:15:09,850 --> 01:15:14,060 Si scopre che principale può anche essere scritto in questo modo, con due argomenti, 1672 01:15:14,060 --> 01:15:19,690 argc e argv, dove argc è il numero di parole che si digita dopo 1673 01:15:19,690 --> 01:15:21,940 il nome del programma sulla riga di comando. 1674 01:15:21,940 --> 01:15:24,550 E argv sono le parole reali. 1675 01:15:24,550 --> 01:15:29,470 E come le parentesi quadre ci suggeriscono, argv è apparentemente un array. 1676 01:15:29,470 --> 01:15:33,720 E 'intenzione di essere una stringa dopo una stringa dopo una stringa in memoria. 1677 01:15:33,720 --> 01:15:36,170 Quindi quello che sta andando ad essere in grado di fare, a partire da pset 2, è 1678 01:15:36,170 --> 01:15:37,310 qualcosa di simile. 1679 01:15:37,310 --> 01:15:42,450 Se faccio argv1, che è un esempio torneremo a il Lunedi, ed eseguire 1680 01:15:42,450 --> 01:15:45,180 si, si noti che non sembra di fare nulla ancora. 1681 01:15:45,180 --> 01:15:47,050 Essa si limita a stampare il suo nome. 1682 01:15:47,050 --> 01:15:53,220 Ma se io dico addio di classe, si noti che il programma scorre apparentemente 1683 01:15:53,220 --> 01:15:57,030 su ciascuna delle parole che sono state digitate al prompt. 1684 01:15:57,030 --> 01:16:02,050 E i mezzi con cui si avrà accesso alle parole che l'utente ha 1685 01:16:02,050 --> 01:16:06,780 digitato al prompt è cambiando principale, a partire da questo fine settimana, da int 1686 01:16:06,780 --> 01:16:10,710 main () a int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 E così nascerà argomenti della riga di comando. 1688 01:16:13,700 --> 01:16:17,210 E una volta che si ottiene veramente sofisticata di questo, sarete in grado di scrivere 1689 01:16:17,210 --> 01:16:21,370 programmi davvero trippy, come questa qui, che va al di là 1690 01:16:21,370 --> 01:16:25,520 alcune delle funzionalità che abbiamo fatto fino ad ora, ma tutti abbastanza potente. 1691 01:16:25,520 --> 01:16:27,330 >> Così lasceremo questo con questo sullo schermo. 1692 01:16:27,330 --> 01:16:29,160 E ci vedremo il Lunedi.