1 00:00:00,000 --> 00:00:02,670 >> [MUSIC THEME] 2 00:00:02,670 --> 00:00:11,834 3 00:00:11,834 --> 00:00:13,365 >> SPEAKER 1: Ciao a tutti. 4 00:00:13,365 --> 00:00:14,365 Bentornato alla sezione. 5 00:00:14,365 --> 00:00:15,700 6 00:00:15,700 --> 00:00:18,700 Bella giornata fuori-- ed è per questo, io sono certo, ci sono solo quattro di voi qui 7 00:00:18,700 --> 00:00:21,180 e non il nostro solito pacco. 8 00:00:21,180 --> 00:00:22,670 Sono stato male in questo fine settimana. 9 00:00:22,670 --> 00:00:24,294 Quindi non ho Starburst per voi ragazzi. 10 00:00:24,294 --> 00:00:26,400 E posso iniziare a tossire terribilmente tutto questo. 11 00:00:26,400 --> 00:00:27,790 Quindi, solo portare con me. 12 00:00:27,790 --> 00:00:30,624 Ho intenzione di provare davvero e ottenere attraverso questo primo, 13 00:00:30,624 --> 00:00:32,290 però, prima ho un attacco di tosse. 14 00:00:32,290 --> 00:00:33,410 15 00:00:33,410 --> 00:00:37,390 Ma solo essere facile su di me un poco bit-- questo è tutto quello che chiedo. 16 00:00:37,390 --> 00:00:39,370 17 00:00:39,370 --> 00:00:44,289 >> Quindi il nostro ordine del giorno per oggi-- solo un reminder-- il quiz è la prossima settimana. 18 00:00:44,289 --> 00:00:46,830 Ti ho detto la settimana scorsa in modo che non sarebbe prendere alla sprovvista. 19 00:00:46,830 --> 00:00:47,954 Quindi ti sto ricordando di nuovo. 20 00:00:47,954 --> 00:00:49,180 La prossima settimana il quiz. 21 00:00:49,180 --> 00:00:52,730 A tal fine, la prossima settimana di sezione sarà molto più 22 00:00:52,730 --> 00:00:55,180 di-- cercherò di lavorare in qualche recensione. 23 00:00:55,180 --> 00:00:58,130 Quindi, se voi ragazzi potrebbe darmi una mano con l'invio di me 24 00:00:58,130 --> 00:01:00,990 cose che sei a tuo agio con, che siete preoccupati, 25 00:01:00,990 --> 00:01:03,530 argomenti che vorreste per me a coprire, sarebbe fantastico. 26 00:01:03,530 --> 00:01:05,740 Così posso cercare di lavorare nella nostra sezione la prossima settimana 27 00:01:05,740 --> 00:01:11,540 o inviarle materiale extra o di preparazione che non si potrebbe ottenere altrove. 28 00:01:11,540 --> 00:01:12,150 >> Yeah! 29 00:01:12,150 --> 00:01:13,520 Sempre più persone stanno arrivando! 30 00:01:13,520 --> 00:01:17,320 Ho pensato, l'ho fatto male lo scorso settimana, che nessuno vuole tornare? 31 00:01:17,320 --> 00:01:18,065 Ho paura. 32 00:01:18,065 --> 00:01:18,892 33 00:01:18,892 --> 00:01:21,100 Così le altre tre cose che stiamo per andare oltre 34 00:01:21,100 --> 00:01:24,850 sono reindirizzamento, file I / O, e poi puntatori e memoria dinamica. 35 00:01:24,850 --> 00:01:29,160 Sono sicuro che siete tutti super eccitati pointers-- argomento preferito di tutti, 36 00:01:29,160 --> 00:01:31,310 così semplice da capire. 37 00:01:31,310 --> 00:01:33,130 Sono sicuro che voi ragazzi tutto hai, vero? 38 00:01:33,130 --> 00:01:39,510 >> Quindi, prima le cose, redirection-- questo è fondamentalmente solo un modo 39 00:01:39,510 --> 00:01:42,920 per controllare come si inserisce le cose nel vostro programma, 40 00:01:42,920 --> 00:01:44,606 come voi le cose di uscita dal programma. 41 00:01:44,606 --> 00:01:46,980 Le principali vie che voi ragazzi sono stati interagendo con esso 42 00:01:46,980 --> 00:01:51,650 è solo attraverso fuori norma con la schermata di stampa qui. 43 00:01:51,650 --> 00:01:55,940 Ma ci sono modi per pipe-- come vediamo qui 44 00:01:55,940 --> 00:01:58,980 è uno della nostra specie words-- di tubo che le informazioni 45 00:01:58,980 --> 00:02:02,850 o che i dati in un file da un file. 46 00:02:02,850 --> 00:02:05,820 E 'solo modi diversi di fare le cose nel vostro programma 47 00:02:05,820 --> 00:02:10,681 e fuori del vostro programma, invece di appena li stampa su questa schermata 48 00:02:10,681 --> 00:02:12,430 o inserendo cose dalla riga di comando. 49 00:02:12,430 --> 00:02:13,760 50 00:02:13,760 --> 00:02:18,030 >> Così prima è poco maggiore di accento circonflesso. 51 00:02:18,030 --> 00:02:22,085 Così output-- viene stampato solo l'uscita di un file invece dello schermo. 52 00:02:22,085 --> 00:02:23,620 53 00:02:23,620 --> 00:02:29,500 Quindi, se si ha qualcosa che stampato "Ciao, mondo!" allo schermo, 54 00:02:29,500 --> 00:02:32,400 se lo metti al posto a output.text, che 55 00:02:32,400 --> 00:02:35,220 crea il file chiamato output.text. 56 00:02:35,220 --> 00:02:38,550 E quando lo si apre, sarà dire "Ciao, mondo!" in là. 57 00:02:38,550 --> 00:02:41,410 Questo può essere super utile se si dispone di un sacco di errori 58 00:02:41,410 --> 00:02:43,430 in realtà, come si vede in questo uno. 59 00:02:43,430 --> 00:02:46,810 Se lo fai due accento circonflesso, sarà stampare i messaggi di errore. 60 00:02:46,810 --> 00:02:52,090 >> Quindi, se hai un problema con compilazione, ha un sacco di errori 61 00:02:52,090 --> 00:02:56,770 e il gioco è impantanarsi nel tentativo per scorrere nella riga di comando 62 00:02:56,770 --> 00:02:59,110 attraverso tutti loro, è possibile basta stampare su un file, 63 00:02:59,110 --> 00:03:02,130 aprire il file in modo che si può scorrere più facilmente. 64 00:03:02,130 --> 00:03:05,160 Ho utilizzato che un molto quando ero il debug 65 00:03:05,160 --> 00:03:07,970 i miei 181 p-set per l'apprendimento della macchina. 66 00:03:07,970 --> 00:03:10,000 Così può essere super utile in seguito. 67 00:03:10,000 --> 00:03:18,370 E 'anche utile se si dispone di un programma che forse sta generando una libreria 68 00:03:18,370 --> 00:03:20,430 o la generazione di un insieme di stringhe, e si 69 00:03:20,430 --> 00:03:22,846 devono essere in grado di vedere che li sta generando correttamente. 70 00:03:22,846 --> 00:03:23,860 71 00:03:23,860 --> 00:03:25,160 Questo è il modo per farlo. 72 00:03:25,160 --> 00:03:28,280 >> Quindi, se li stampa su un file, possono più facilmente esaminarle, giusto? 73 00:03:28,280 --> 00:03:30,930 Versus cercando di scorrere tramite la linea di comando. 74 00:03:30,930 --> 00:03:32,740 75 00:03:32,740 --> 00:03:35,820 E poi una cosa da notare è che solo con maggiore 76 00:03:35,820 --> 00:03:40,090 di accento circonflesso, se si sta scrivendo a un file che già exists-- 77 00:03:40,090 --> 00:03:44,990 così come se abbiamo fatto questo il primo tempo, abbiamo messo a output.text, 78 00:03:44,990 --> 00:03:49,970 e poi abbiamo avuto un secondo programma che stampate questo come programma di due 79 00:03:49,970 --> 00:03:54,250 e ha fatto un maggiore rispetto per output.text, esso sovrascriverà che-- così 80 00:03:54,250 --> 00:03:56,715 sovrascrivere quello che è stato mai in quel file per cominciare. 81 00:03:56,715 --> 00:03:57,720 82 00:03:57,720 --> 00:04:00,750 >> Quindi, se si desidera aggiungere in un file, come si vede qui, 83 00:04:00,750 --> 00:04:04,779 basta fare due più grande di segni. 84 00:04:04,779 --> 00:04:05,820 E si aggiungerà ad esso. 85 00:04:05,820 --> 00:04:06,750 Non si sovrascrive. 86 00:04:06,750 --> 00:04:09,770 Quindi, se avete bisogno di eseguire più programmi e il tipo di mantenere 87 00:04:09,770 --> 00:04:13,170 traccia di ciò tutti sono tornare a voi in un file, 88 00:04:13,170 --> 00:04:14,190 questo è un modo per farlo. 89 00:04:14,190 --> 00:04:17,231 Se non si cura ciò che è nel vostro file ed è permesso di essere sovrascritto, 90 00:04:17,231 --> 00:04:19,204 si può semplicemente utilizzare un unico superiore. 91 00:04:19,204 --> 00:04:20,600 Questo fa senso per tutti? 92 00:04:20,600 --> 00:04:23,205 93 00:04:23,205 --> 00:04:31,140 >> PUBBLICO: Come dot ridurre drasticamente ciao maggiore di testo di output puntino, come due volte, 94 00:04:31,140 --> 00:04:34,030 sarà solo mostrare solo in uscita dot testo una seconda tempo-- 95 00:04:34,030 --> 00:04:34,810 >> SPEAKER 1: Giusto. 96 00:04:34,810 --> 00:04:40,450 Quindi, sarebbe fondamentalmente solo completamente sovrascrivere quello che era lì per cominciare. 97 00:04:40,450 --> 00:04:44,260 Se questo file Qui, la output.text già 98 00:04:44,260 --> 00:04:48,230 esiste, in pratica tutto ciò che si chiama che ancora una volta con un unico grande 99 00:04:48,230 --> 00:04:51,920 che si può solo pensare di esso in quanto, come ha sostituito il file. 100 00:04:51,920 --> 00:04:54,824 Come quando si sta salvando una parola documento e non Salva con nome, 101 00:04:54,824 --> 00:04:57,365 e si mantiene lo stesso nome, e sovrascrive completamente it-- 102 00:04:57,365 --> 00:04:58,680 questo è lo stesso genere di cose. 103 00:04:58,680 --> 00:05:00,380 104 00:05:00,380 --> 00:05:03,550 Qualcuno ha qualche domande su solo l'output in un file? 105 00:05:03,550 --> 00:05:05,051 106 00:05:05,051 --> 00:05:05,550 Impressionante. 107 00:05:05,550 --> 00:05:11,440 >> Così, ovviamente, se si inverte il freccia direzione, si può fare di ingresso. 108 00:05:11,440 --> 00:05:13,090 109 00:05:13,090 --> 00:05:19,960 Così, quando voi ragazzi avevate come Cesare o Visioneer 110 00:05:19,960 --> 00:05:23,195 e si doveva inserire qualcosa, si ha un argomento della riga di comando 111 00:05:23,195 --> 00:05:24,960 che in realtà inserirlo. 112 00:05:24,960 --> 00:05:27,410 Questo è un altro modo per farlo. 113 00:05:27,410 --> 00:05:30,520 Così, invece di aspettare per un prompt dei comandi, 114 00:05:30,520 --> 00:05:33,800 come quando hai chiesto per il vostro messaggio di Cesare o di Visioneer, 115 00:05:33,800 --> 00:05:36,490 se si ha un file di testo che aveva il tuo messaggio, 116 00:05:36,490 --> 00:05:38,280 si può solo scrivere in questo. 117 00:05:38,280 --> 00:05:44,930 >> Quindi, se questo fosse come punto tagliare Cesare 3 meno di freccia testo di input, che 118 00:05:44,930 --> 00:05:47,240 è il messaggio, che funzionerebbe bene. 119 00:05:47,240 --> 00:05:51,310 120 00:05:51,310 --> 00:05:54,020 Quando il programma di Cesare realtà chiesto per l'input da parte dell'utente, 121 00:05:54,020 --> 00:05:57,360 sarebbe già, perché hai digitato in questo file. 122 00:05:57,360 --> 00:05:58,830 Questo è solo un altro modo. 123 00:05:58,830 --> 00:06:02,445 Solo una inversione di output-- basta inserire i vostri dati. 124 00:06:02,445 --> 00:06:04,570 125 00:06:04,570 --> 00:06:06,680 >> E poi l'ultimo è il tubo. 126 00:06:06,680 --> 00:06:07,780 Quindi di questo piuttosto fresco. 127 00:06:07,780 --> 00:06:09,890 Perché permette di prendere l'uscita di un 128 00:06:09,890 --> 00:06:13,695 programma e metterlo come input per un altro programma. 129 00:06:13,695 --> 00:06:15,250 130 00:06:15,250 --> 00:06:18,630 Non so se qualcuno di voi giocato con il decifrare 131 00:06:18,630 --> 00:06:20,590 che CS50 potrebbe avere dato, ma sarebbe 132 00:06:20,590 --> 00:06:27,380 permettono di prendere qualche campione file, digitare nella tua crittografia, 133 00:06:27,380 --> 00:06:30,350 e poi da lì digitare che nel tuo decrittazione 134 00:06:30,350 --> 00:06:32,470 per assicurarsi che si è scoperto lo stesso. 135 00:06:32,470 --> 00:06:34,050 Quindi è un po 'come ciclo a tre vie. 136 00:06:34,050 --> 00:06:38,400 137 00:06:38,400 --> 00:06:39,423 Andare per esso. 138 00:06:39,423 --> 00:06:41,785 >> PUBBLICO: Se un programma ha più ingressi, 139 00:06:41,785 --> 00:06:47,646 c'è un modo per dirgli quale ingresso utilizzare il file di testo o dell'uscita per? 140 00:06:47,646 --> 00:06:49,325 >> SPEAKER 1: Ha più ingressi. 141 00:06:49,325 --> 00:06:52,190 142 00:06:52,190 --> 00:07:00,430 Qualunque sia depositare la input-- quando è chiedendo input che prima volta, è 143 00:07:00,430 --> 00:07:03,240 intenzione di assumere, credo, che sia andando a tubo l'intero file. 144 00:07:03,240 --> 00:07:03,979 145 00:07:03,979 --> 00:07:07,145 Quindi, se si dispone di più ingressi, sei sta per essere piping in più file. 146 00:07:07,145 --> 00:07:08,190 147 00:07:08,190 --> 00:07:12,390 Quindi, se stai chiedendo per i messaggi tre volte nel codice, 148 00:07:12,390 --> 00:07:15,230 si sta andando ad essere messa in tre file differenti. 149 00:07:15,230 --> 00:07:15,980 E diventa pazzo. 150 00:07:15,980 --> 00:07:18,188 E non si deve avere a preoccuparsi che in questo momento. 151 00:07:18,188 --> 00:07:19,150 Ma questa è l'idea. 152 00:07:19,150 --> 00:07:20,680 153 00:07:20,680 --> 00:07:26,822 >> Quindi sì, il tubo è solo l'uscita di un programma usa ingresso nell'altro. 154 00:07:26,822 --> 00:07:27,665 Tutto bene lì? 155 00:07:27,665 --> 00:07:28,565 156 00:07:28,565 --> 00:07:29,065 Freddo. 157 00:07:29,065 --> 00:07:30,170 158 00:07:30,170 --> 00:07:30,932 Ok. 159 00:07:30,932 --> 00:07:32,890 Probabilmente non sarà necessario di fare troppo con esso. 160 00:07:32,890 --> 00:07:35,670 Ma è necessario comprendere modi è possibile utilizzare questo. 161 00:07:35,670 --> 00:07:38,910 E ci sono alcuni casi che si potrebbe desiderare di utilizzarlo. 162 00:07:38,910 --> 00:07:44,590 >> Così File I / O-- So quello che sei saying-- siamo abituati alla lettura da 163 00:07:44,590 --> 00:07:50,500 e scrivendo al nostro schermo lì, che è standard e standard output. 164 00:07:50,500 --> 00:07:54,370 Ed è quello che voi ragazzi siete stati facendo dall'inizio di classe qui. 165 00:07:54,370 --> 00:07:58,220 Ma si può anche leggere e scrivere file, che tutti i file di I / O-- così file di input, 166 00:07:58,220 --> 00:07:59,850 uscita è tutto ciò che rappresenta. 167 00:07:59,850 --> 00:08:00,930 168 00:08:00,930 --> 00:08:04,360 Quindi, questo significa che è possibile memorizzare i dati di ora. 169 00:08:04,360 --> 00:08:08,460 >> Quando si solo è necessario stamparlo su schermo, è praticamente andato, giusto? 170 00:08:08,460 --> 00:08:12,507 Non appena si effettua "Ciao mondo "ed eseguire" Ciao mondo " 171 00:08:12,507 --> 00:08:14,090 la stampa "Ciao mondo" sullo schermo. 172 00:08:14,090 --> 00:08:16,370 Ma non si può davvero fare qualsiasi cosa con esso da lì. 173 00:08:16,370 --> 00:08:18,950 Se si memorizza in un testo file, poi improvvisamente 174 00:08:18,950 --> 00:08:22,789 si dispone di questi dati, che si è permesso di manipolare o metterlo in un file, 175 00:08:22,789 --> 00:08:24,080 o metterlo in un programma più tardi. 176 00:08:24,080 --> 00:08:26,370 177 00:08:26,370 --> 00:08:29,290 Uno dei motivi perché facciamo questo è solo 178 00:08:29,290 --> 00:08:31,560 come un modo per memorizzare i dati per un uso successivo. 179 00:08:31,560 --> 00:08:34,790 180 00:08:34,790 --> 00:08:37,279 >> Ho un paio di passi qui solo a piedi attraverso di serie 181 00:08:37,279 --> 00:08:39,450 I / O. Nella fase uno, necessario creare un riferimento 182 00:08:39,450 --> 00:08:43,480 al file con tutte tappi file stella. 183 00:08:43,480 --> 00:08:45,740 Così che crea un puntatore a un file. 184 00:08:45,740 --> 00:08:48,080 185 00:08:48,080 --> 00:08:49,650 Allora si desidera aprirlo. 186 00:08:49,650 --> 00:08:52,940 E tu dici, letteralmente, solo il file è uguale a fopen. 187 00:08:52,940 --> 00:08:57,400 E questo sta per restituire un puntatore al file appena aperto. 188 00:08:57,400 --> 00:08:59,610 189 00:08:59,610 --> 00:09:01,460 Ho visto un paio di voi ragazzi nelle ore di ufficio. 190 00:09:01,460 --> 00:09:07,400 >> Ma una delle cose è puntatori remember-- 191 00:09:07,400 --> 00:09:10,409 può essere qualche indirizzo o per nulla, giusto? 192 00:09:10,409 --> 00:09:12,700 Se mai avuto un caso in cui qualcosa può restituire null, 193 00:09:12,700 --> 00:09:14,990 che cosa dobbiamo fare prima abbiamo mai usiamo? 194 00:09:14,990 --> 00:09:16,220 195 00:09:16,220 --> 00:09:19,000 Abbiamo bisogno di verificare se è nullo o no, giusto? 196 00:09:19,000 --> 00:09:23,600 Poiché alcuni di voi hanno avuto il problema per cui qualunque oggetto 197 00:09:23,600 --> 00:09:26,110 veniva restituito in breakout è stato nullo. 198 00:09:26,110 --> 00:09:28,170 Si è tentato di eseguire qualche funzione su di esso. 199 00:09:28,170 --> 00:09:29,770 E il sito del computer in errore. 200 00:09:29,770 --> 00:09:30,725 Giusto? 201 00:09:30,725 --> 00:09:33,640 Scommetto che un paio di voi può aver avuto quel problema. 202 00:09:33,640 --> 00:09:38,890 >> Quindi, con fopen, fopen sarà o restituire un puntatore al file, 203 00:09:38,890 --> 00:09:41,200 o se qualcosa va storto, sta andando a restituire null. 204 00:09:41,200 --> 00:09:45,980 Quindi è sempre necessario controllare che non è tornato nullo 205 00:09:45,980 --> 00:09:47,880 prima di tentare di fare qualsiasi altra cosa. 206 00:09:47,880 --> 00:09:49,110 207 00:09:49,110 --> 00:09:51,974 Questo è come un paradigma di serie che si sta andando ad avere bisogno qui. 208 00:09:51,974 --> 00:09:54,390 Se c'è mai una possibilità che qualcosa potrebbe restituire null, 209 00:09:54,390 --> 00:09:56,590 Controllare per assicurarsi che non prima di procedere. 210 00:09:56,590 --> 00:09:58,911 In caso contrario, si sta andando per ottenere belle colpe del sito. 211 00:09:58,911 --> 00:10:00,410 E a nessuno piace trattare con quelli. 212 00:10:00,410 --> 00:10:03,180 213 00:10:03,180 --> 00:10:06,410 >> Quindi, come si vede qui, il primo argomento è solo il percorso del file. 214 00:10:06,410 --> 00:10:09,380 Se questo file non esiste, sta andando a creare quel file. 215 00:10:09,380 --> 00:10:10,713 Ed è solo andare a essere vuoto. 216 00:10:10,713 --> 00:10:10,789 217 00:10:10,789 --> 00:10:13,080 E poi il secondo argomento è la modalità che si desidera. 218 00:10:13,080 --> 00:10:14,610 Vogliamo leggere da questo file? 219 00:10:14,610 --> 00:10:15,560 Vuoi scrivere da esso? 220 00:10:15,560 --> 00:10:16,476 Vuoi aggiungere? 221 00:10:16,476 --> 00:10:17,600 222 00:10:17,600 --> 00:10:20,670 Quindi, in realtà quello che ho appena said-- se il file non esiste 223 00:10:20,670 --> 00:10:23,400 e si sta cercando di leggere da si, sta andando a generare un errore. 224 00:10:23,400 --> 00:10:26,890 Se il file nome-- come se file.text non esiste ancora 225 00:10:26,890 --> 00:10:29,250 e si desidera scrivere ad esso, si creerà 226 00:10:29,250 --> 00:10:33,110 un file vuoto chiamato file.text per voi. 227 00:10:33,110 --> 00:10:36,612 E se si desidera aggiungere, si dovrebbe fare la stessa cosa. 228 00:10:36,612 --> 00:10:38,081 Questo fa senso? 229 00:10:38,081 --> 00:10:40,580 Se stai cercando di leggere da un file che ancora non esiste, 230 00:10:40,580 --> 00:10:41,590 che sarà genera un errore. 231 00:10:41,590 --> 00:10:44,340 In caso contrario, verrà creato il file per fare ciò che si vuole ad esso. 232 00:10:44,340 --> 00:10:45,970 233 00:10:45,970 --> 00:10:46,470 Freddo. 234 00:10:46,470 --> 00:10:47,510 235 00:10:47,510 --> 00:10:48,880 Ora possiamo leggere dal file. 236 00:10:48,880 --> 00:10:52,570 E questo è solo un po 'andare attraverso le diverse funzioni 237 00:10:52,570 --> 00:10:58,980 che abbiamo per il file I / O. Questa volontà essere necessario pset di questa settimana, 238 00:10:58,980 --> 00:11:00,505 se non ricordo male. 239 00:11:00,505 --> 00:11:02,880 Sì, assolutamente sarà necessaria pset di questa settimana. 240 00:11:02,880 --> 00:11:04,260 241 00:11:04,260 --> 00:11:07,010 Così fgetc restituisce il carattere successivo. 242 00:11:07,010 --> 00:11:08,350 243 00:11:08,350 --> 00:11:10,300 fgets restituisce solo una riga di testo. 244 00:11:10,300 --> 00:11:11,790 245 00:11:11,790 --> 00:11:14,610 Ritornerà nulla fino a una nuova linea, e si romperà. 246 00:11:14,610 --> 00:11:15,950 247 00:11:15,950 --> 00:11:18,700 Così fread legge un certo numero di byte e li luoghi 248 00:11:18,700 --> 00:11:20,700 in un array, che è qualcosa che si potrebbe 249 00:11:20,700 --> 00:11:25,485 vuole fare con re-size-- potrebbe essere utile. 250 00:11:25,485 --> 00:11:26,550 251 00:11:26,550 --> 00:11:29,290 >> Quante persone hanno letto le specifiche pset, a proposito? 252 00:11:29,290 --> 00:11:30,980 253 00:11:30,980 --> 00:11:32,261 Ok. 254 00:11:32,261 --> 00:11:32,760 [Incomprensibile] 255 00:11:32,760 --> 00:11:35,380 256 00:11:35,380 --> 00:11:36,580 >> SPEAKER 1: OK. 257 00:11:36,580 --> 00:11:37,530 Bene. 258 00:11:37,530 --> 00:11:41,940 Sicuramente leggere che-- è un pset divertente. 259 00:11:41,940 --> 00:11:51,320 Si arriva a recuperare una memoria cancellata card-- davvero emozionante quando funziona. 260 00:11:51,320 --> 00:11:54,100 Ma sicuramente, iniziare a leggere questo. 261 00:11:54,100 --> 00:11:56,280 Vieni a parlare con me se avere domande su di esso. 262 00:11:56,280 --> 00:11:59,290 >> OK, quindi come dicevo, fread legge un certo numero di byte. 263 00:11:59,290 --> 00:12:01,340 264 00:12:01,340 --> 00:12:03,590 Questo è un numero arbitrario che si sta andando a impostare. 265 00:12:03,590 --> 00:12:05,990 266 00:12:05,990 --> 00:12:08,260 E poi fseek solo mosse ad una certa posizione. 267 00:12:08,260 --> 00:12:11,150 Quindi forse non vi interessa circa i prossimi 10 byte. 268 00:12:11,150 --> 00:12:12,880 Hai voglia di andare avanti. 269 00:12:12,880 --> 00:12:14,030 Non ti importa di quelli. 270 00:12:14,030 --> 00:12:16,280 Si desidera leggere dal byte 11. 271 00:12:16,280 --> 00:12:18,252 fseek permette di fare questo. 272 00:12:18,252 --> 00:12:20,710 Quindi ti permette di essere selettivi su ciò che stai leggendo. 273 00:12:20,710 --> 00:12:25,880 Perché fgetc, fgets, e fread lettura da un certo posto nel file. 274 00:12:25,880 --> 00:12:27,260 275 00:12:27,260 --> 00:12:35,090 >> Un modo di pensare a questo è se questo è il nostro file, quando si apre, 276 00:12:35,090 --> 00:12:41,140 si ha questa posizione nel file di che parte dall'inizio. 277 00:12:41,140 --> 00:12:45,040 Ogni volta che si chiama fgetc, fgetf, o fread, 278 00:12:45,040 --> 00:12:48,875 che sta per iniziare da questo marcatore di posizione. 279 00:12:48,875 --> 00:12:51,340 280 00:12:51,340 --> 00:12:55,245 Diciamo che si desidera solo per leggere questo pezzo di memoria qui. 281 00:12:55,245 --> 00:12:56,300 282 00:12:56,300 --> 00:12:57,960 Non si può semplicemente chiamare. 283 00:12:57,960 --> 00:13:02,430 Dovete cercare qui e poi leggere da lì 284 00:13:02,430 --> 00:13:06,540 o leggere, ottiene, o getc, a seconda di ciò che si desidera. 285 00:13:06,540 --> 00:13:09,310 Quindi cercare solo si permette di saltare porzioni di memoria. 286 00:13:09,310 --> 00:13:11,590 E questo è l'unico modo è possibile saltare le cose 287 00:13:11,590 --> 00:13:14,012 senza leggerli nel buffer. 288 00:13:14,012 --> 00:13:15,470 Questo fa senso per tutti? 289 00:13:15,470 --> 00:13:21,110 290 00:13:21,110 --> 00:13:24,780 >> Ovviamente, c'è un sacco di qui-- parallelo 291 00:13:24,780 --> 00:13:27,780 il nostro reindirizzamento uscita, o ingresso, di aver letto e scrivere. 292 00:13:27,780 --> 00:13:31,800 Così fputc scrive solo un carattere nel file. 293 00:13:31,800 --> 00:13:33,655 fputs scrive una riga. 294 00:13:33,655 --> 00:13:35,030 295 00:13:35,030 --> 00:13:37,420 Fprintf stampa un output formattato. 296 00:13:37,420 --> 00:13:41,190 Quindi, se si dispone di schede, o spazio, o roba del genere. 297 00:13:41,190 --> 00:13:44,180 E poi fwrite scrive un po ' array di byte in un file. 298 00:13:44,180 --> 00:13:48,860 Quindi questo è allo stesso modo fwrite e fread sono analoghi 299 00:13:48,860 --> 00:13:57,550 fgets opposites--, fputs, e poi un sacco fputc e fgetc-- 300 00:13:57,550 --> 00:14:00,710 di pazzi, cose veloci. 301 00:14:00,710 --> 00:14:05,300 >> Solo tipo di mantenere questo handy-- avrete momenti diversi 302 00:14:05,300 --> 00:14:08,680 dove forse si desidera solo un carattere alla volta. 303 00:14:08,680 --> 00:14:09,890 Forse si vuole una linea intera. 304 00:14:09,890 --> 00:14:14,320 Con il vostro pset-- dizionario che è a due p-set, 305 00:14:14,320 --> 00:14:19,690 Io credo, vi diamo un intero dizionario in un formato di testo 306 00:14:19,690 --> 00:14:22,252 che ha ogni parola separati da una linea. 307 00:14:22,252 --> 00:14:24,210 Quindi, se si voleva leggere in una parola alla volta, 308 00:14:24,210 --> 00:14:31,769 quello che si potrebbe usare se stai leggendo e sono tutti separati su nuove linee, 309 00:14:31,769 --> 00:14:33,310 e si desidera solo una parola alla volta? 310 00:14:33,310 --> 00:14:35,320 311 00:14:35,320 --> 00:14:36,040 >> PUBBLICO: fgets 312 00:14:36,040 --> 00:14:36,748 >> SPEAKER 1: Giusto. 313 00:14:36,748 --> 00:14:39,960 Fgets-- perché restituisce qualunque sia su una riga. 314 00:14:39,960 --> 00:14:42,750 E se ogni parola è la sua propria linea, possiamo usare fgets. 315 00:14:42,750 --> 00:14:44,511 316 00:14:44,511 --> 00:14:45,010 Freddo. 317 00:14:45,010 --> 00:14:47,290 Questo fa senso, tutti? 318 00:14:47,290 --> 00:14:48,020 Cool? 319 00:14:48,020 --> 00:14:50,020 Sì, stiamo per arrivare a la parte più divertente con i puntatori 320 00:14:50,020 --> 00:14:51,728 molto presto, in cui si arrivare a fare un po 'di matematica. 321 00:14:51,728 --> 00:14:52,776 E sarà grande. 322 00:14:52,776 --> 00:14:55,690 323 00:14:55,690 --> 00:14:57,740 >> Ultimo step-- chiudere il file. 324 00:14:57,740 --> 00:15:01,090 Con così tante cose qui, uno dei nostri paradigmi 325 00:15:01,090 --> 00:15:03,550 è se può ritornare nulla, verificare la presenza di nulla. 326 00:15:03,550 --> 00:15:06,160 Se si apre qualcosa, è meglio chiuderlo. 327 00:15:06,160 --> 00:15:10,419 OK, quindi non finito fino a quando sei fatto a meno che non hai chiuso. 328 00:15:10,419 --> 00:15:12,585 Un po 'come non è finita fino a quando la signora grassa canta. 329 00:15:12,585 --> 00:15:14,130 E 'come chiudere il file. 330 00:15:14,130 --> 00:15:16,860 331 00:15:16,860 --> 00:15:19,190 Come si dice qui, solo per ribadire, sempre 332 00:15:19,190 --> 00:15:21,750 aprire il file prima di sei la lettura o la scrittura di esso. 333 00:15:21,750 --> 00:15:24,450 E sempre chiuderlo se hai aperto. 334 00:15:24,450 --> 00:15:25,460 Bene? 335 00:15:25,460 --> 00:15:25,960 Freddo. 336 00:15:25,960 --> 00:15:26,835 >> Quindi, ecco un esempio. 337 00:15:26,835 --> 00:15:29,250 338 00:15:29,250 --> 00:15:34,330 Così tiny-- Non so se si ragazzi possono vedere molto bene. 339 00:15:34,330 --> 00:15:36,805 Se solo potessimo aumentare la luminosità in qualche modo. 340 00:15:36,805 --> 00:15:40,430 341 00:15:40,430 --> 00:15:45,030 Mi permetta di fare questo in realtà se posso. 342 00:15:45,030 --> 00:15:48,020 343 00:15:48,020 --> 00:15:51,470 OK, voi ragazzi non si può davvero vedere che a tutti, si può? 344 00:15:51,470 --> 00:15:52,905 OK, stiamo andando a fare questo, allora. 345 00:15:52,905 --> 00:16:35,094 346 00:16:35,094 --> 00:16:35,594 [Incomprensibile] 347 00:16:35,594 --> 00:16:56,670 348 00:16:56,670 --> 00:16:58,605 >> Presumo che ciò è molto meglio vedere. 349 00:16:58,605 --> 00:17:17,330 350 00:17:17,330 --> 00:17:19,455 Chiunque può vedere dove la mia il mouse è andato è la domanda? 351 00:17:19,455 --> 00:17:22,837 Ah, eccolo è-- cosa lotta! 352 00:17:22,837 --> 00:17:48,910 353 00:17:48,910 --> 00:17:49,520 >> Ok. 354 00:17:49,520 --> 00:17:53,845 In sostanza, voi ragazzi dovrebbero avere tipo di un'idea di ciò che questo sta facendo. 355 00:17:53,845 --> 00:17:56,740 356 00:17:56,740 --> 00:17:57,600 Non è perfetto. 357 00:17:57,600 --> 00:17:58,851 358 00:17:58,851 --> 00:18:02,425 Ma io preferirei spiego che spendere più tempo a cercare di formattarlo correttamente. 359 00:18:02,425 --> 00:18:03,610 360 00:18:03,610 --> 00:18:07,280 In sostanza, come vedete qui, si comincia con file aperto. 361 00:18:07,280 --> 00:18:09,620 E abbiamo un po ' file di database che siamo 362 00:18:09,620 --> 00:18:12,300 l'apertura che dice che è i nostri studenti. 363 00:18:12,300 --> 00:18:14,020 E abbiamo intenzione di scrivere. 364 00:18:14,020 --> 00:18:15,060 365 00:18:15,060 --> 00:18:17,720 Così, naturalmente, restituire null. 366 00:18:17,720 --> 00:18:19,650 Quindi dobbiamo controllare per nulla. 367 00:18:19,650 --> 00:18:22,930 E poi se non è nullo, passiamo attraverso. 368 00:18:22,930 --> 00:18:25,660 E come vedete, noi siamo ciclo di qui. 369 00:18:25,660 --> 00:18:26,960 Ci sono studenti. 370 00:18:26,960 --> 00:18:30,520 Gli studenti hash è definito come tre. 371 00:18:30,520 --> 00:18:34,060 E quello che stiamo facendo è che siamo stampa su file, giusto? 372 00:18:34,060 --> 00:18:36,975 Allora, cosa stiamo stampando al nostro file? 373 00:18:36,975 --> 00:18:47,040 374 00:18:47,040 --> 00:18:48,906 >> PUBBLICO: I punteggi che sono nella matrice? 375 00:18:48,906 --> 00:18:49,680 >> SPEAKER 1: Sì. 376 00:18:49,680 --> 00:18:50,980 I punteggi che si trovano in il array-- esattamente. 377 00:18:50,980 --> 00:18:53,050 Quindi apriamo questo file di database, che 378 00:18:53,050 --> 00:18:56,040 Presumo sia una sorta di database di gradi. 379 00:18:56,040 --> 00:19:01,100 E siamo solo stampando la punteggi di ogni studente a quel file. 380 00:19:01,100 --> 00:19:02,140 Cool? 381 00:19:02,140 --> 00:19:02,640 Buona. 382 00:19:02,640 --> 00:19:03,811 383 00:19:03,811 --> 00:19:04,310 Impressionante. 384 00:19:04,310 --> 00:19:05,100 Ok. 385 00:19:05,100 --> 00:19:06,950 Torniamo a-- 386 00:19:06,950 --> 00:19:08,646 >> PUBBLICO: Ho una domanda veloce. 387 00:19:08,646 --> 00:19:11,570 E 'la printf non nel ciclo for? 388 00:19:11,570 --> 00:19:12,870 Questo è solo in se ciclo? 389 00:19:12,870 --> 00:19:14,370 SPEAKER 1: No, è nel ciclo for. 390 00:19:14,370 --> 00:19:16,150 391 00:19:16,150 --> 00:19:18,810 Non riesco a vedere il mio mouse molto bene qui. 392 00:19:18,810 --> 00:19:21,359 Così sto lottando per formato corretto. 393 00:19:21,359 --> 00:19:22,525 Questo supporto dovrebbe essere sparito. 394 00:19:22,525 --> 00:19:23,610 395 00:19:23,610 --> 00:19:25,130 Dovrebbe essere qui. 396 00:19:25,130 --> 00:19:26,605 Questo è ciò che è in vostro ciclo for. 397 00:19:26,605 --> 00:20:10,680 398 00:20:10,680 --> 00:20:11,180 Là. 399 00:20:11,180 --> 00:20:12,160 Ora è abbastanza. 400 00:20:12,160 --> 00:20:16,720 Ecco, questo è come dovrebbe essere-- eccezione per l'ultima staffa che ho respinto. 401 00:20:16,720 --> 00:20:17,220 Ok. 402 00:20:17,220 --> 00:20:19,491 Questo fa senso per tutti? 403 00:20:19,491 --> 00:20:19,990 Ok. 404 00:20:19,990 --> 00:20:23,750 Stiamo per andare avanti per la prossima cosa then-- 405 00:20:23,750 --> 00:20:26,180 che, in realtà, si sta andando ad avere bisogno di vedere il codice. 406 00:20:26,180 --> 00:20:28,370 Così sto solo andando a copia che oltre al momento. 407 00:20:28,370 --> 00:20:31,500 408 00:20:31,500 --> 00:20:32,000 Ok. 409 00:20:32,000 --> 00:20:35,110 Quindi ho intenzione di mostrare voi ragazzi questo codice. 410 00:20:35,110 --> 00:20:38,240 E voglio che tu a cercare di capire di che cosa si dovrebbe fare. 411 00:20:38,240 --> 00:20:49,740 412 00:20:49,740 --> 00:20:52,480 >> Quindi, dato che-- prendere un minuto o giù di lì. 413 00:20:52,480 --> 00:20:54,440 Cercare di capire cosa sta succedendo qui. 414 00:20:54,440 --> 00:21:58,840 415 00:21:58,840 --> 00:21:59,570 >> Tutte le idee? 416 00:21:59,570 --> 00:22:08,180 417 00:22:08,180 --> 00:22:12,470 >> Noi sappiamo di avere almeno due argomenti nella riga di comando, giusto? 418 00:22:12,470 --> 00:22:16,270 Presumo uno dei quali sta per essere che [incomprensibile] del nostro programma è 419 00:22:16,270 --> 00:22:17,530 e poi un'altra cosa. 420 00:22:17,530 --> 00:22:19,980 Perché se [incomprensibile] è meno di due, abbiamo urlare contro di loro. 421 00:22:19,980 --> 00:22:21,140 Giusto? 422 00:22:21,140 --> 00:22:25,300 E dal loro utilizzo, sembra che che sta per essere una sorta di file. 423 00:22:25,300 --> 00:22:26,260 Siamo tutti d'accordo a questo? 424 00:22:26,260 --> 00:22:29,110 425 00:22:29,110 --> 00:22:31,570 Così ora, qual è il ciclo facendo? 426 00:22:31,570 --> 00:22:32,570 Che cosa sta passando? 427 00:22:32,570 --> 00:22:35,000 428 00:22:35,000 --> 00:22:36,449 >> PUBBLICO: Tutti i file. 429 00:22:36,449 --> 00:22:37,240 SPEAKER 1: Esattamente. 430 00:22:37,240 --> 00:22:39,650 Sta andando attraverso tutto il i file che abbiamo in ingresso ci. 431 00:22:39,650 --> 00:22:40,720 432 00:22:40,720 --> 00:22:46,040 Quindi, per ogni file, è aprendo qualche stringa lì. 433 00:22:46,040 --> 00:22:47,560 E 'aprendo il file. 434 00:22:47,560 --> 00:22:48,060 Giusto? 435 00:22:48,060 --> 00:22:49,140 436 00:22:49,140 --> 00:22:52,380 Ed è di lettura. 437 00:22:52,380 --> 00:22:53,420 438 00:22:53,420 --> 00:22:55,540 Naturalmente, controllando se è nullo. 439 00:22:55,540 --> 00:22:57,220 E poi è la stampa. 440 00:22:57,220 --> 00:23:01,460 Se è nulla, è solo che ci dice che questo non è un file che esiste. 441 00:23:01,460 --> 00:23:04,290 Perchè ricorda, con leggere il nostro file deve esistere. 442 00:23:04,290 --> 00:23:04,810 Giusto? 443 00:23:04,810 --> 00:23:06,870 Con scrittura e append, si può farla franca. 444 00:23:06,870 --> 00:23:08,970 Ma con la lettura, il nostro file deve esistere. 445 00:23:08,970 --> 00:23:10,430 446 00:23:10,430 --> 00:23:13,330 >> E poi, se esiste, cosa ci facciamo qui? 447 00:23:13,330 --> 00:23:14,810 448 00:23:14,810 --> 00:23:15,780 Diciamo solo iniziare qui. 449 00:23:15,780 --> 00:23:18,815 Di cosa si tratta fare-- questo primo carattere. 450 00:23:18,815 --> 00:23:20,960 451 00:23:20,960 --> 00:23:21,790 Che cosa fa? 452 00:23:21,790 --> 00:23:24,100 Si alza un carattere, giusto? 453 00:23:24,100 --> 00:23:25,400 Così che cosa sta facendo questo? 454 00:23:25,400 --> 00:23:26,775 Si sta facendo il primo carattere. 455 00:23:26,775 --> 00:23:28,860 456 00:23:28,860 --> 00:23:30,200 Qualcuno sa EOF? 457 00:23:30,200 --> 00:23:31,170 >> PUBBLICO: Fine del file? 458 00:23:31,170 --> 00:23:32,680 >> SPEAKER 1: Fine di file-- esattamente. 459 00:23:32,680 --> 00:23:35,310 Così sta andando a passare attraverso l'intero file, giusto? 460 00:23:35,310 --> 00:23:36,710 461 00:23:36,710 --> 00:23:40,780 E poi sta andando da aggiornare ottenere ogni carattere successivo. 462 00:23:40,780 --> 00:23:41,565 Giusto? 463 00:23:41,565 --> 00:23:43,636 E che cosa ci fa? 464 00:23:43,636 --> 00:23:44,760 PUBBLICO: Mettere che dentro-- 465 00:23:44,760 --> 00:23:46,741 466 00:23:46,741 --> 00:23:49,170 >> SPEAKER 1: stampe putchar per il vostro screensaver. 467 00:23:49,170 --> 00:23:50,867 468 00:23:50,867 --> 00:23:51,950 [Incomprensibile] il carattere. 469 00:23:51,950 --> 00:23:54,300 E poi quando [incomprensibile] questo chiude il file. 470 00:23:54,300 --> 00:23:57,370 >> PUBBLICO: Non ti bisogno di un [? altro? ?] 471 00:23:57,370 --> 00:23:59,005 >> SPEAKER 1: Non necessariamente. 472 00:23:59,005 --> 00:24:01,480 Voglio dire, è una specie di implicita in questo. 473 00:24:01,480 --> 00:24:06,780 Poiché questo restituisce, però, a patto in cui ciò non prendere questo, che stai bene. 474 00:24:06,780 --> 00:24:07,940 475 00:24:07,940 --> 00:24:10,250 Voglio dire, è probabilmente un bene pratica per fare un altro. 476 00:24:10,250 --> 00:24:15,755 Ma l'altro non è sempre necessario in particolare 477 00:24:15,755 --> 00:24:17,610 se avete qualcosa come un ritorno, che 478 00:24:17,610 --> 00:24:20,640 significa che in questo caso se cattura esso, il programma sta per finire 479 00:24:20,640 --> 00:24:21,850 e che sarà mai arrivare a questo. 480 00:24:21,850 --> 00:24:23,030 481 00:24:23,030 --> 00:24:29,190 E 'più per il caso in cui si è non necessariamente anche qualcosa. 482 00:24:29,190 --> 00:24:31,370 Perché se questo non è stato ritorno nulla, 483 00:24:31,370 --> 00:24:34,430 vorrebbe dire che se ciò fosse vero, il resto di questo sarebbe ancora eseguito. 484 00:24:34,430 --> 00:24:36,138 E in quel caso, si vorrebbe un falso. 485 00:24:36,138 --> 00:24:38,240 Se è di ritorno, e fine del programma, 486 00:24:38,240 --> 00:24:41,960 l'altro non è necessario tutto il tempo, a seconda del contesto. 487 00:24:41,960 --> 00:24:43,084 488 00:24:43,084 --> 00:24:44,375 Jacob, hai avuto una domanda? 489 00:24:44,375 --> 00:24:46,100 PUBBLICO: Sì. 490 00:24:46,100 --> 00:24:49,300 Così fa fgetc ottenere il carattere successivo? 491 00:24:49,300 --> 00:24:50,734 Come aumentare il personaggio? 492 00:24:50,734 --> 00:24:51,400 SPEAKER 1: Sì. 493 00:24:51,400 --> 00:24:52,774 Così fgetc ottiene il carattere successivo. 494 00:24:52,774 --> 00:24:54,140 495 00:24:54,140 --> 00:24:56,866 Si può pensare ad esso come il C ++ in un certo senso. 496 00:24:56,866 --> 00:24:58,350 >> PUBBLICO: Che cosa era EOF? 497 00:24:58,350 --> 00:25:00,877 >> SPEAKER 1: EOF è la fine del file. 498 00:25:00,877 --> 00:25:03,960 E 'solo un indicatore che consente di sapere che sei alla fine del file. 499 00:25:03,960 --> 00:25:06,742 Quindi questo sta andando per la stampa al vostro standard output. 500 00:25:06,742 --> 00:25:08,950 E poi sta andando a chiudere il file quando è fatto. 501 00:25:08,950 --> 00:25:10,700 E poi andiamo a il file successivo, giusto? 502 00:25:10,700 --> 00:25:12,660 Dunque, nel complesso, che cosa fa questo programma? 503 00:25:12,660 --> 00:25:15,402 504 00:25:15,402 --> 00:25:16,090 >> [Incomprensibile] 505 00:25:16,090 --> 00:25:16,900 >> SPEAKER 1: Sì. 506 00:25:16,900 --> 00:25:18,770 Essa si limita a stampare fuori tutto quello che c'è. 507 00:25:18,770 --> 00:25:23,270 Quindi, CAT, se avete mai usato voi ragazzi e poi il nome di qualche file-- 508 00:25:23,270 --> 00:25:26,240 Non so se qualcuno di voi ha mai fatto sul vostro terminale. 509 00:25:26,240 --> 00:25:29,630 Ma se mai utilizza la Comando CAT-- C-A-T-- 510 00:25:29,630 --> 00:25:31,880 e quindi tutto ciò che di file hai there-- esso 511 00:25:31,880 --> 00:25:37,260 stampa fuori per il vostro terminale, che può essere super utile per alcune cose. 512 00:25:37,260 --> 00:25:38,746 Io lo uso molto. 513 00:25:38,746 --> 00:25:40,120 Questo fa senso per tutti? 514 00:25:40,120 --> 00:25:41,480 515 00:25:41,480 --> 00:25:42,100 Cool? 516 00:25:42,100 --> 00:25:46,530 >> OK, il vostro compito now-- sia da soli o con le persone intorno a you-- 517 00:25:46,530 --> 00:25:54,930 è quello di scrivere un semplice programma che vi basta scrivere "Ciao, mondo!" 518 00:25:54,930 --> 00:25:56,255 in un file. 519 00:25:56,255 --> 00:26:00,215 >> [Incomprensibile] 520 00:26:00,215 --> 00:26:56,210 521 00:26:56,210 --> 00:26:57,040 >> [Incomprensibile] 522 00:26:57,040 --> 00:26:59,248 >> SPEAKER 1: ero come, ha fatto Lo faccio male la settimana scorsa? 523 00:26:59,248 --> 00:27:00,201 524 00:27:00,201 --> 00:27:01,492 Non pensavo che fosse così male. 525 00:27:01,492 --> 00:27:02,479 526 00:27:02,479 --> 00:27:03,520 Sono contento che siete tutti qui. 527 00:27:03,520 --> 00:27:04,655 E mi fa davvero felice. 528 00:27:04,655 --> 00:27:07,565 529 00:27:07,565 --> 00:27:10,160 Sono una ragazza di piaceri semplici. 530 00:27:10,160 --> 00:27:11,688 A me piace quando la mia sezione frequenta. 531 00:27:11,688 --> 00:27:13,830 532 00:27:13,830 --> 00:27:18,270 Così sto solo ottenere questo è cominciato per voi ragazzi in modo che siamo in grado di codificare insieme. 533 00:27:18,270 --> 00:27:22,290 Non mi piace mettere chiunque su il posto a meno che non si vuole essere. 534 00:27:22,290 --> 00:27:26,486 535 00:27:26,486 --> 00:27:30,086 >> Destinatari: per il quiz, fare dobbiamo scrivere un programma? 536 00:27:30,086 --> 00:27:33,260 >> SPEAKER 1: È possibile che venga richiesto di scrivere semplici programmi a mano. 537 00:27:33,260 --> 00:27:35,940 538 00:27:35,940 --> 00:27:36,590 Sì. 539 00:27:36,590 --> 00:27:38,510 >> PUBBLICO: Il quiz è la prossima settimana, giusto? 540 00:27:38,510 --> 00:27:40,108 >> SPEAKER 1: Il quiz è Mercoledì prossimo. 541 00:27:40,108 --> 00:27:40,855 542 00:27:40,855 --> 00:27:43,730 Questo significa che c'è una bella [? CSE?] classificazione partito in seguito, che 543 00:27:43,730 --> 00:27:50,390 significa che avrai i tuoi punteggi schiena che notte-- a che ora? 544 00:27:50,390 --> 00:27:50,890 Chi lo sa? 545 00:27:50,890 --> 00:27:51,973 Ma sarà quella notte. 546 00:27:51,973 --> 00:28:02,020 547 00:28:02,020 --> 00:28:02,855 >> Bene. 548 00:28:02,855 --> 00:28:04,250 Come vogliamo iniziare questo? 549 00:28:04,250 --> 00:28:07,964 550 00:28:07,964 --> 00:28:09,630 Ti darò un hint-- inizia con questo. 551 00:28:09,630 --> 00:28:11,455 >> PUBBLICO: Dovete aprire un file. 552 00:28:11,455 --> 00:28:12,250 >> SPEAKER 1: Sì. 553 00:28:12,250 --> 00:28:14,060 Allora, cosa si desidera chiamare questo? 554 00:28:14,060 --> 00:28:16,150 Avete voglia di chiamarlo "file"? 555 00:28:16,150 --> 00:28:17,480 Facciamo in modo facile. 556 00:28:17,480 --> 00:28:26,752 Quindi fopen-- qual è la nostra prova di uscita sta per essere? 557 00:28:26,752 --> 00:28:36,130 Chiamatela "Ciao." 558 00:28:36,130 --> 00:28:37,810 E qual è il nostro modo? 559 00:28:37,810 --> 00:28:39,764 560 00:28:39,764 --> 00:28:41,055 Cosa stiamo facendo a questo file? 561 00:28:41,055 --> 00:28:42,676 562 00:28:42,676 --> 00:28:43,500 >> PUBBLICO: Leggi. 563 00:28:43,500 --> 00:28:44,401 564 00:28:44,401 --> 00:28:44,900 Scrivere. 565 00:28:44,900 --> 00:28:46,191 SPEAKER 1: Stiamo scrivendo a esso. 566 00:28:46,191 --> 00:28:47,360 567 00:28:47,360 --> 00:28:47,860 Incantevole. 568 00:28:47,860 --> 00:28:50,330 569 00:28:50,330 --> 00:28:52,860 OK, quindi abbiamo questo file. 570 00:28:52,860 --> 00:28:54,920 571 00:28:54,920 --> 00:28:56,212 Che cosa dobbiamo fare? 572 00:28:56,212 --> 00:28:57,420 PUBBLICO: Controllare se è nullo. 573 00:28:57,420 --> 00:28:59,820 SPEAKER 1: Verificare se è esattamente null--. 574 00:28:59,820 --> 00:29:01,980 Questo è quello che mi piace sentire. 575 00:29:01,980 --> 00:29:05,930 Questo dovrebbe essere automatica, in particolare più o meno da questo punto in poi. 576 00:29:05,930 --> 00:29:07,530 577 00:29:07,530 --> 00:29:10,950 Se si inizia a andare in segfault, probabilmente non controllare per nulla da qualche parte. 578 00:29:10,950 --> 00:29:12,480 Nove volte su dieci, che è sarà il vostro errore. 579 00:29:12,480 --> 00:29:15,400 Quindi, se si può solo ottenere nel abitudine, controllare sempre se è nullo, 580 00:29:15,400 --> 00:29:18,150 la tua vita sarà bello e easy-- o più facile. 581 00:29:18,150 --> 00:29:19,480 >> Quindi, controllare per vedere se è nullo. 582 00:29:19,480 --> 00:29:21,200 583 00:29:21,200 --> 00:29:24,820 Quindi, se non è nullo, che è ciò che il botto è uguale 584 00:29:24,820 --> 00:29:26,784 means-- null-- non è valida. 585 00:29:26,784 --> 00:29:27,700 Che cosa vogliamo fare? 586 00:29:27,700 --> 00:29:29,750 587 00:29:29,750 --> 00:29:31,570 Vogliamo solo la stampa a quel file, giusto? 588 00:29:31,570 --> 00:29:32,923 Così che cosa stiamo andando da usare? 589 00:29:32,923 --> 00:29:34,092 >> PUBBLICO: fprintf 590 00:29:34,092 --> 00:29:36,800 >> SPEAKER 1: Fprintf-- bella. 591 00:29:36,800 --> 00:29:38,150 592 00:29:38,150 --> 00:29:44,000 E fprintf prende due arguments-- dove sta andando e cosa vogliamo stampare. 593 00:29:44,000 --> 00:29:45,820 Allora qual è il primo? 594 00:29:45,820 --> 00:29:46,570 Dove sta andando? 595 00:29:46,570 --> 00:29:47,490 >> PUBBLICO: File. 596 00:29:47,490 --> 00:29:48,785 >> SPEAKER 1: Sta andando in un file. 597 00:29:48,785 --> 00:29:49,784 598 00:29:49,784 --> 00:29:50,950 E cosa vogliamo stampata? 599 00:29:50,950 --> 00:29:52,900 600 00:29:52,900 --> 00:29:58,065 "Ciao, mondo!" 601 00:29:58,065 --> 00:29:58,565 Bene. 602 00:29:58,565 --> 00:30:03,670 Abbiamo un ultimo cosa-- un altro grande paradigma qui. 603 00:30:03,670 --> 00:30:04,479 604 00:30:04,479 --> 00:30:05,145 PUBBLICO: Chiudi. 605 00:30:05,145 --> 00:30:05,853 SPEAKER 1: Chiudere. 606 00:30:05,853 --> 00:30:09,990 607 00:30:09,990 --> 00:30:10,540 Ecco fatto. 608 00:30:10,540 --> 00:30:13,384 >> PUBBLICO: E 'questo accada se il file è nullo? 609 00:30:13,384 --> 00:30:15,050 SPEAKER 1: No, questo è se non è nullo. 610 00:30:15,050 --> 00:30:16,881 PUBBLICO: Oh, se è not-- OK. 611 00:30:16,881 --> 00:30:21,728 612 00:30:21,728 --> 00:30:25,410 Per la fopen e poi la due argomenti che vanno all'interno, 613 00:30:25,410 --> 00:30:27,655 che cosa fa il primo argomento significa di nuovo? 614 00:30:27,655 --> 00:30:30,392 >> SPEAKER 1: L'argomento è proprio come il nome del file 615 00:30:30,392 --> 00:30:31,350 che si desidera andare. 616 00:30:31,350 --> 00:30:36,020 Così, dopo questo viene eseguito, si farebbe avere qualche file chiamato "ciao" 617 00:30:36,020 --> 00:30:38,320 che aveva "Ciao, mondo" al suo interno. 618 00:30:38,320 --> 00:30:38,820 Questo è tutto. 619 00:30:38,820 --> 00:30:39,500 Basta il nome. 620 00:30:39,500 --> 00:30:42,685 621 00:30:42,685 --> 00:30:48,650 >> PUBBLICO: E dal momento che è la scrittura, la file non deve esistere già. 622 00:30:48,650 --> 00:30:49,675 E 'questo quello che hai detto? 623 00:30:49,675 --> 00:30:50,410 >> SPEAKER 1: Giusto. 624 00:30:50,410 --> 00:30:50,910 Esattamente. 625 00:30:50,910 --> 00:30:53,110 626 00:30:53,110 --> 00:30:55,839 Se "Ciao" come file non esiste ancora, è 627 00:30:55,839 --> 00:30:58,380 andando a creare un file chiamato Ciao "e scrivere per voi. 628 00:30:58,380 --> 00:30:59,631 629 00:30:59,631 --> 00:31:03,610 >> PUBBLICO: Quando stai dicendo il programma ha scritto al file, 630 00:31:03,610 --> 00:31:08,075 perché scrivi "file" invece di il nome del file e fprintf-- 631 00:31:08,075 --> 00:31:13,600 >> SPEAKER 1: Perché in questo caso, abbiamo che grande file-- tutti in stelle caps--, 632 00:31:13,600 --> 00:31:14,260 file. 633 00:31:14,260 --> 00:31:17,370 Quindi è un puntatore al file che si sta parlando. 634 00:31:17,370 --> 00:31:19,930 Questo è il modo in cui abbiamo appena riferiamo ad essa. 635 00:31:19,930 --> 00:31:24,850 Quindi, in questo caso, può pensare di aha file--, 636 00:31:24,850 --> 00:31:31,271 possiamo usare questo-- di file qui si riferisce alla apertura di "Ciao" 637 00:31:31,271 --> 00:31:32,145 e lasciandolo scrivere. 638 00:31:32,145 --> 00:31:34,728 >> PUBBLICO: Potremmo mettere un "Ciao" invece [? di soli file] f? 639 00:31:34,728 --> 00:31:40,160 SPEAKER 1: No, perché "Ciao" ha bisogno di essere aperti e scrivibile. 640 00:31:40,160 --> 00:31:41,820 641 00:31:41,820 --> 00:31:45,980 File qui è come un designatore che dice OK, abbiamo 642 00:31:45,980 --> 00:31:49,190 avere questo hello-- file-- che stiamo guardando. 643 00:31:49,190 --> 00:31:50,680 È stato aperto. 644 00:31:50,680 --> 00:31:52,140 E ci accingiamo a scrivere. 645 00:31:52,140 --> 00:31:55,130 Se si basta usare "Ciao", che è incapsulato in essa. 646 00:31:55,130 --> 00:31:56,846 Così sta andando fuori di testa. 647 00:31:56,846 --> 00:31:58,590 648 00:31:58,590 --> 00:32:00,300 Voglio dire, si potrebbe avere la chiamò. 649 00:32:00,300 --> 00:32:03,960 Avresti potuto fare di file, stella, "Ciao", è uguale a quella. 650 00:32:03,960 --> 00:32:07,840 Ma il punto è che si bisogno di un puntatore a file stella per 651 00:32:07,840 --> 00:32:09,281 essere in grado di utilizzare queste funzioni. 652 00:32:09,281 --> 00:32:11,280 PUBBLICO: Puoi fare di file, stella, il file, "Ciao" 653 00:32:11,280 --> 00:32:13,113 o non si deve mettere file di stelle, il file da esso? 654 00:32:13,113 --> 00:32:16,330 SPEAKER 1: Si potrebbe fare del file, stella, "Ciao." 655 00:32:16,330 --> 00:32:19,790 È possibile modificare questo per qualunque sia il nome che vuoi. 656 00:32:19,790 --> 00:32:22,114 E 'del tutto arbitraria ciò che quel nome è. 657 00:32:22,114 --> 00:32:23,179 658 00:32:23,179 --> 00:32:24,220 È possibile assegnare un nome qualsiasi cosa. 659 00:32:24,220 --> 00:32:25,501 660 00:32:25,501 --> 00:32:28,020 Nome che gli spaghetti volare, se si voleva. 661 00:32:28,020 --> 00:32:29,690 >> PUBBLICO: Che cosa è il "w" tra virgolette per? 662 00:32:29,690 --> 00:32:31,540 >> SPEAKER 1: La "w" è solo il modo. 663 00:32:31,540 --> 00:32:33,170 Quindi stiamo scrivendo a questo file. 664 00:32:33,170 --> 00:32:34,410 665 00:32:34,410 --> 00:32:35,320 Tutto bene? 666 00:32:35,320 --> 00:32:36,227 Chiaro? 667 00:32:36,227 --> 00:32:36,981 Sì. 668 00:32:36,981 --> 00:32:40,365 >> Pubblico: Così, quando si scrive questo FILE, da dove troviamo poi quel file? 669 00:32:40,365 --> 00:32:43,820 >> SPEAKER 1: Sarà nello stesso directory che sei attualmente in. 670 00:32:43,820 --> 00:32:45,650 671 00:32:45,650 --> 00:32:48,880 Se siete in tre e pset si esegue questo, all'interno del vostro pset 672 00:32:48,880 --> 00:32:52,600 tre la cartella sarà questo file chiamato "Ciao." 673 00:32:52,600 --> 00:32:53,160 Cool? 674 00:32:53,160 --> 00:32:53,757 Tutto bene? 675 00:32:53,757 --> 00:32:55,840 Mi sento come se fossi tutto ottenerlo, il che è fantastico. 676 00:32:55,840 --> 00:32:57,290 677 00:32:57,290 --> 00:32:57,790 Ok. 678 00:32:57,790 --> 00:33:05,960 Ma torniamo al mio show-- diapositiva Mi piace quando le cose funzionano. 679 00:33:05,960 --> 00:33:08,674 OK, pointers-- Sei ragazzi eccitati? 680 00:33:08,674 --> 00:33:09,465 I puntatori sono grandi. 681 00:33:09,465 --> 00:33:11,581 682 00:33:11,581 --> 00:33:13,580 Prendono un po ' per avvolgere la testa intorno. 683 00:33:13,580 --> 00:33:15,288 Questo è il mio secondo anno puntatori di insegnamento. 684 00:33:15,288 --> 00:33:16,850 E penso che ho finalmente capito. 685 00:33:16,850 --> 00:33:18,650 Quindi, se si lotta, va bene. 686 00:33:18,650 --> 00:33:19,940 687 00:33:19,940 --> 00:33:24,070 Come ho detto prima, disegnare immagini aiuta molto con le cose in CS, 688 00:33:24,070 --> 00:33:27,400 quanto credo che le persone tendono pensare oh, siamo in un computer. 689 00:33:27,400 --> 00:33:28,399 Dovremmo solo codice. 690 00:33:28,399 --> 00:33:30,190 Immagini No-- disegno sarà davvero aiutare. 691 00:33:30,190 --> 00:33:32,773 E io davvero vi incoraggio a attingere al tuo fianco kindergartner 692 00:33:32,773 --> 00:33:35,010 e far emergere pastelli o marcatori e pareggio. 693 00:33:35,010 --> 00:33:36,110 Perché vi aiuterà. 694 00:33:36,110 --> 00:33:39,380 E se mi vedi in orario d'ufficio, ho sarà portare in giro pile di carta 695 00:33:39,380 --> 00:33:41,580 con le penne disegno le cose. 696 00:33:41,580 --> 00:33:44,370 >> Quindi, soprattutto con pointers-- disegnare. 697 00:33:44,370 --> 00:33:47,970 E sono sicuro che stiamo realmente andando a essere disegnare alcune foto anche qui. 698 00:33:47,970 --> 00:33:51,270 >> Quindi voi ragazzi tutti avuto modo di vedere Binky, questa cosa claymation fresco. 699 00:33:51,270 --> 00:33:54,720 E pensiamo che sia davvero divertente quando esplode in un mucchio di pezzi. 700 00:33:54,720 --> 00:33:56,280 701 00:33:56,280 --> 00:33:57,755 E 'un po' di sollievo comico per la classe. 702 00:33:57,755 --> 00:34:02,140 703 00:34:02,140 --> 00:34:05,900 C [incomprensibile] questa grande capacità essere in grado di controllare la memoria. 704 00:34:05,900 --> 00:34:10,090 Ed è una delle cose che in realtà lo rende un linguaggio così potente. 705 00:34:10,090 --> 00:34:13,469 Ma con un grande potere derivano grande responsabilità. 706 00:34:13,469 --> 00:34:16,230 E le cose folli possono accadere se non stai attento. 707 00:34:16,230 --> 00:34:18,560 Così, quando si sta utilizzando puntatori, si vuole fare 708 00:34:18,560 --> 00:34:21,440 Assicuratevi di capire veramente esattamente quello che stai facendo. 709 00:34:21,440 --> 00:34:25,530 Speriamo che il prossimo po 'di il tempo ci aiuterà a capire veramente 710 00:34:25,530 --> 00:34:27,850 puntatori, come utilizzarli, e come manipolarli. 711 00:34:27,850 --> 00:34:29,170 712 00:34:29,170 --> 00:34:33,460 >> Così memory-- sono sicuro che abbiamo visto questo diagramma prima. 713 00:34:33,460 --> 00:34:38,540 Quindi, questo è solo un semplice diagramma di come le cose potrebbero essere memorizzati memoria. 714 00:34:38,540 --> 00:34:43,145 In modo da avere in pratica questi enormi array di blocchi di un byte 715 00:34:43,145 --> 00:34:46,000 è quello che abbiamo qui-- leggera incrementato di uno ogni volta. 716 00:34:46,000 --> 00:34:51,810 Questo è in esadecimale [incomprensibile] così isolati otto bit. 717 00:34:51,810 --> 00:34:55,510 E ogni blocco è associato con qualche indirizzo esadecimale. 718 00:34:55,510 --> 00:34:58,750 Quindi, se avete mai visto la 0x, questo è solo annotare 719 00:34:58,750 --> 00:35:00,670 che si tratta di un indirizzo esadecimale. 720 00:35:00,670 --> 00:35:03,970 È possibile assumere questo significa qualche indirizzo in memoria. 721 00:35:03,970 --> 00:35:06,935 Stiamo parlando di indirizzi di memoria ogni volta che vedete esadecimale. 722 00:35:06,935 --> 00:35:10,420 723 00:35:10,420 --> 00:35:14,630 >> Abbiamo interi sono variabili, galleggianti sono variabili che memorizzano. 724 00:35:14,630 --> 00:35:16,260 Così int negozio int. 725 00:35:16,260 --> 00:35:17,430 Galleggianti negozio galleggianti. 726 00:35:17,430 --> 00:35:20,260 Così abbiamo anche puntatori che gli indirizzi di memoria negozio. 727 00:35:20,260 --> 00:35:21,660 Questo è una sorta di mappatura. 728 00:35:21,660 --> 00:35:24,240 I puntatori sono esclusivamente per gli indirizzi di memoria. 729 00:35:24,240 --> 00:35:25,780 730 00:35:25,780 --> 00:35:27,292 Ecco, questo è come il tuo tipo lì. 731 00:35:27,292 --> 00:35:29,550 732 00:35:29,550 --> 00:35:34,470 Il vostro apparecchio è a 32 bit, il che significa che il vostro indirizzo di memoria è di quattro byte. 733 00:35:34,470 --> 00:35:37,830 Quindi, qualsiasi puntatore che avete sta anche andando a essere quattro byte. 734 00:35:37,830 --> 00:35:43,200 Oppure se si tratta di quattro byte, la memoria è di quattro byte. 735 00:35:43,200 --> 00:35:44,790 Puntatori memoria negozio. 736 00:35:44,790 --> 00:35:46,430 Pertanto, sono quattro byte. 737 00:35:46,430 --> 00:35:48,460 Cool-- voglio solo rafforzare tale. 738 00:35:48,460 --> 00:35:50,120 739 00:35:50,120 --> 00:35:52,220 >> Si dovrebbe ottenere questo fumetto ora. 740 00:35:52,220 --> 00:35:55,040 Non so quanti di voi sono fan xkcd, ma mi piace xkcd. 741 00:35:55,040 --> 00:35:55,780 È ottimo. 742 00:35:55,780 --> 00:35:57,290 743 00:35:57,290 --> 00:35:57,790 >> Bene. 744 00:35:57,790 --> 00:36:01,640 Quindi la creazione di pointers-- come ho detto, è praticamente proprio come qualsiasi altra cosa. 745 00:36:01,640 --> 00:36:02,930 Si dispone di un tipo. 746 00:36:02,930 --> 00:36:04,050 Hai un nome. 747 00:36:04,050 --> 00:36:04,810 Giusto? 748 00:36:04,810 --> 00:36:10,410 Questo è ciò che abbiamo lì. [? Hex?] Stella significa che è un puntatore, 749 00:36:10,410 --> 00:36:12,250 e quindi tutto ciò che si desidera chiamare. 750 00:36:12,250 --> 00:36:15,770 Così il tipo rappresenta ciò che è possibile memorizzare. 751 00:36:15,770 --> 00:36:16,850 752 00:36:16,850 --> 00:36:17,990 Bene? 753 00:36:17,990 --> 00:36:24,350 Allo stesso modo che se lo facciamo int, sappiamo che stiamo memorizzare un int lì. 754 00:36:24,350 --> 00:36:25,990 755 00:36:25,990 --> 00:36:30,280 Con un puntatore, esso in possesso di un indirizzo di memoria. 756 00:36:30,280 --> 00:36:34,240 Ma che cosa vuol dire è che-- ecco dove un disegno sta per venire in aiuto. 757 00:36:34,240 --> 00:36:36,170 758 00:36:36,170 --> 00:36:45,980 Quindi, in questo caso, abbiamo alcuni value-- diciamo quattro. 759 00:36:45,980 --> 00:36:49,306 Quattro è in un indirizzo. 760 00:36:49,306 --> 00:36:49,805 Ok? 761 00:36:49,805 --> 00:36:51,550 762 00:36:51,550 --> 00:36:56,170 >> Questo primo qui significa che si tratta di un puntatore 2x. 763 00:36:56,170 --> 00:36:56,740 Giusto? 764 00:36:56,740 --> 00:36:57,628 E 'un po' di puntatore x. 765 00:36:57,628 --> 00:36:58,852 766 00:36:58,852 --> 00:37:00,940 x può essere qualcosa, qualunque cosa. 767 00:37:00,940 --> 00:37:01,960 768 00:37:01,960 --> 00:37:05,130 Qualunque sia x è-- dire x è quattro. 769 00:37:05,130 --> 00:37:07,280 Sta andando a memorizzare il indirizzo di memoria qui. 770 00:37:07,280 --> 00:37:12,260 Così int, stella, X-- questo è qualche altro slot in memory-- 771 00:37:12,260 --> 00:37:13,590 che sa di cosa si tratta. 772 00:37:13,590 --> 00:37:15,430 Ma sta andando a memorizzare un indirizzo qui. 773 00:37:15,430 --> 00:37:27,040 Quindi questo sarebbe like-- in questo caso, Qualsiasi cosa, 774 00:37:27,040 --> 00:37:32,630 è conservato a 0x1-- tutto ciò che è memorizzato presso l'indirizzo che il nostro puntatore detiene, 775 00:37:32,630 --> 00:37:35,280 deve abbinare con quello che abbiamo indicato. 776 00:37:35,280 --> 00:37:40,330 Così a 0x1, in questo caso, questo è x. 777 00:37:40,330 --> 00:37:42,500 778 00:37:42,500 --> 00:37:49,340 Questo può mai essere solo un int mentre stiamo usando questo. 779 00:37:49,340 --> 00:37:52,950 >> Allo stesso modo, se abbiamo altro 1A, a prescindere 780 00:37:52,950 --> 00:37:59,130 indirizzo è memorizzato con un y ha essere una stessa cosa char-- con z. 781 00:37:59,130 --> 00:38:05,840 Allo stesso modo, ogni volta che cercare di fare inTX è uguale a 0,4, 782 00:38:05,840 --> 00:38:09,275 sta andando a urlare contro di voi e di essere come no, hai detto che volevi un int. 783 00:38:09,275 --> 00:38:10,525 Questo dovrebbe essere un int. 784 00:38:10,525 --> 00:38:11,900 Smettere di cercare di renderlo un galleggiante. 785 00:38:11,900 --> 00:38:14,150 >> Quindi lasciare che le cose siano ciò che vogliono essere. 786 00:38:14,150 --> 00:38:15,159 787 00:38:15,159 --> 00:38:16,200 Lasciate che le cose si siano. 788 00:38:16,200 --> 00:38:19,380 789 00:38:19,380 --> 00:38:23,450 Così grande cosa è solo qualunque tipo di puntatore 790 00:38:23,450 --> 00:38:26,101 è, questo è l'unico cosa che è possibile memorizzare lì. 791 00:38:26,101 --> 00:38:26,600 Ok? 792 00:38:26,600 --> 00:38:27,910 793 00:38:27,910 --> 00:38:31,160 Con la pratica, come con la scorsa settimana, tutto 794 00:38:31,160 --> 00:38:32,817 sembra davvero di tipo astratto. 795 00:38:32,817 --> 00:38:34,150 Stiamo andando a fare un pò di pratica. 796 00:38:34,150 --> 00:38:36,760 Dovrebbe avere più senso. 797 00:38:36,760 --> 00:38:44,580 >> Così riferimento e dereferencing-- è molto importante per ottenere questi diritti. 798 00:38:44,580 --> 00:38:46,630 Devo ancora aggiornare di tanto in tanto. 799 00:38:46,630 --> 00:38:48,450 E io sono come attesa, quale voglio? 800 00:38:48,450 --> 00:38:56,080 Così la e commerciale sarà effettivamente dare il riferimento o l'indirizzo di. 801 00:38:56,080 --> 00:39:00,100 Quindi restituisce l'indirizzo cui memoria variabile viene memorizzato. 802 00:39:00,100 --> 00:39:01,170 803 00:39:01,170 --> 00:39:07,020 Così sta andando per tornare realmente a voi un esadecimale, mentre dereferencing esso 804 00:39:07,020 --> 00:39:10,641 è in realtà intenzione di darvi i dati che sono memorizzati lì. 805 00:39:10,641 --> 00:39:11,140 Ok? 806 00:39:11,140 --> 00:39:12,680 807 00:39:12,680 --> 00:39:16,060 Quindi stiamo andando a guardare un esempio veramente veloce, o addirittura accanto. 808 00:39:16,060 --> 00:39:18,050 809 00:39:18,050 --> 00:39:19,150 >> Ok. 810 00:39:19,150 --> 00:39:21,790 Quindi dobbiamo pensare davvero attentamente su questo. 811 00:39:21,790 --> 00:39:23,860 Quindi qui abbiamo qualche intero x. 812 00:39:23,860 --> 00:39:26,485 Io vado a cercare di attirare questo fuori al meglio delle mie capacità. 813 00:39:26,485 --> 00:39:30,230 814 00:39:30,230 --> 00:39:32,410 Quindi stiamo andando ad avere questo slot x. 815 00:39:32,410 --> 00:39:35,850 816 00:39:35,850 --> 00:39:37,315 Ed è la memorizzazione di cinque. 817 00:39:37,315 --> 00:39:38,640 818 00:39:38,640 --> 00:39:40,090 Il suo indirizzo è 0x4. 819 00:39:40,090 --> 00:39:41,920 820 00:39:41,920 --> 00:39:43,160 Cool? 821 00:39:43,160 --> 00:39:44,100 Tutto bene. 822 00:39:44,100 --> 00:39:45,470 >> Così ora abbiamo questo puntatore. 823 00:39:45,470 --> 00:39:46,916 824 00:39:46,916 --> 00:39:47,990 E 'stato qui. 825 00:39:47,990 --> 00:39:52,130 826 00:39:52,130 --> 00:39:57,560 E la e commerciale ci dà l'indirizzo di qualcosa. 827 00:39:57,560 --> 00:40:00,780 Quindi, in questo caso, è l'indirizzo di x. 828 00:40:00,780 --> 00:40:01,875 Qual è l'indirizzo di x? 829 00:40:01,875 --> 00:40:05,660 830 00:40:05,660 --> 00:40:12,590 04-- e questo puntatore è a 0x08. 831 00:40:12,590 --> 00:40:14,490 832 00:40:14,490 --> 00:40:14,990 Cool? 833 00:40:14,990 --> 00:40:16,570 834 00:40:16,570 --> 00:40:21,570 Così si può pensare a questo puntatore, 04, poco fa qui. 835 00:40:21,570 --> 00:40:22,840 836 00:40:22,840 --> 00:40:25,740 E si chiamano puntatori perché come si ottiene più in questo, 837 00:40:25,740 --> 00:40:28,450 si sta andando a vedere che punta a cose. 838 00:40:28,450 --> 00:40:31,470 E un blocco che punta ad un altro blocco renderà molto più senso. 839 00:40:31,470 --> 00:40:32,760 840 00:40:32,760 --> 00:40:33,890 Così qui sono due. 841 00:40:33,890 --> 00:40:38,230 E poi abbiamo un po ' copia, che è 0x0C Cosa--. 842 00:40:38,230 --> 00:40:41,290 843 00:40:41,290 --> 00:40:43,420 E sta andando a dereference il nostro puntatore. 844 00:40:43,420 --> 00:40:46,790 >> Quindi quello che sta dicendo è OK, ecco il nostro puntatore. 845 00:40:46,790 --> 00:40:53,090 Il valore che memorizza è 0x04, e che cosa che sta dicendo è andare a questo indirizzo 846 00:40:53,090 --> 00:40:54,300 e dimmi che cosa c'è dentro. 847 00:40:54,300 --> 00:40:55,520 848 00:40:55,520 --> 00:40:57,710 Ecco, questo è efficace cosa questa freccia sta facendo. 849 00:40:57,710 --> 00:40:58,750 850 00:40:58,750 --> 00:41:01,280 Si può pensare a questo come la vostra stella. 851 00:41:01,280 --> 00:41:05,410 Quindi OK, quando lo facciamo stelle, significa seguire. 852 00:41:05,410 --> 00:41:06,810 Vai a questo indirizzo. 853 00:41:06,810 --> 00:41:11,430 E questo è fondamentalmente solo in seguito questa freccia a questo pezzo di memoria. 854 00:41:11,430 --> 00:41:15,380 E ci darà ciò che è in essa, che è 5. 855 00:41:15,380 --> 00:41:18,840 E 'il motivo per cui la nostra copia è pari a 5. 856 00:41:18,840 --> 00:41:20,120 Questo fa senso? 857 00:41:20,120 --> 00:41:22,769 C'è qualcuno che mi ha bisogno di passare attraverso di nuovo, o più lentamente? 858 00:41:22,769 --> 00:41:24,560 Vuoi che me ne vada attraverso di essa ancora una volta? 859 00:41:24,560 --> 00:41:25,060 Ok. 860 00:41:25,060 --> 00:41:27,549 861 00:41:27,549 --> 00:41:28,840 Stiamo andando a ridisegnare di nuovo. 862 00:41:28,840 --> 00:41:31,930 863 00:41:31,930 --> 00:41:37,205 Quando si parte, siamo tutti d'accordo che abbiamo qualche pezzo di memoria che è una variabile 864 00:41:37,205 --> 00:41:40,890 x che ci siamo posti pari a 5. 865 00:41:40,890 --> 00:41:42,910 Noi non controlliamo dove si trova in memoria. 866 00:41:42,910 --> 00:41:45,520 Quindi questo punto è solo arbitrariamente assegnato. 867 00:41:45,520 --> 00:41:47,770 868 00:41:47,770 --> 00:41:48,731 Buona lì? 869 00:41:48,731 --> 00:41:49,230 Ok. 870 00:41:49,230 --> 00:41:50,420 871 00:41:50,420 --> 00:41:53,330 Poi abbiamo inizializzare un puntatore a un int. 872 00:41:53,330 --> 00:41:56,900 È per questo che è consentito per puntare a x perché abbiamo un int qui. 873 00:41:56,900 --> 00:42:00,840 Abbiamo un altro pezzo di memoria perché questo puntatore 874 00:42:00,840 --> 00:42:03,485 è una variabile, proprio come qualsiasi altra cosa. 875 00:42:03,485 --> 00:42:06,615 È assegnato arbitrariamente spazio nella memoria. 876 00:42:06,615 --> 00:42:07,630 877 00:42:07,630 --> 00:42:10,830 E che memorizza l'indirizzo di x. 878 00:42:10,830 --> 00:42:13,200 E commerciale si intende l'indirizzo di x. 879 00:42:13,200 --> 00:42:14,575 Allora, qual è l'indirizzo di x? 880 00:42:14,575 --> 00:42:19,179 881 00:42:19,179 --> 00:42:20,614 >> PUBBLICO: E 'zero-- 882 00:42:20,614 --> 00:42:21,280 SPEAKER 1: 0x04. 883 00:42:21,280 --> 00:42:24,350 884 00:42:24,350 --> 00:42:25,940 Così then-- ultimo. 885 00:42:25,940 --> 00:42:30,650 Abbiamo ancora qualche copy-- solo un'altra variabile. 886 00:42:30,650 --> 00:42:32,520 Quindi cerchiamo di assegnare qualche posto arbitraria. 887 00:42:32,520 --> 00:42:35,260 888 00:42:35,260 --> 00:42:38,080 E noi dereference il nostro puntatore. 889 00:42:38,080 --> 00:42:42,490 La stella significa andare al indirizzo memorizzato nel mio puntatore. 890 00:42:42,490 --> 00:42:44,480 Dimmi cosa c'è. 891 00:42:44,480 --> 00:42:47,290 Quindi l'indirizzo memorizzato nel nostro puntatore è 0x04. 892 00:42:47,290 --> 00:42:49,070 893 00:42:49,070 --> 00:42:51,310 Quindi andiamo a questo indirizzo. 894 00:42:51,310 --> 00:42:52,402 895 00:42:52,402 --> 00:42:54,590 Si punta a quell'indirizzo. 896 00:42:54,590 --> 00:42:57,481 Cosa c'è dentro questo blocco di memoria? 897 00:42:57,481 --> 00:42:57,980 E 'un cinque. 898 00:42:57,980 --> 00:42:59,210 899 00:42:59,210 --> 00:43:01,650 Ecco, questo è quello che si assegna la nostra copia. 900 00:43:01,650 --> 00:43:03,430 901 00:43:03,430 --> 00:43:04,860 Tutto bene? 902 00:43:04,860 --> 00:43:05,360 Freddo. 903 00:43:05,360 --> 00:43:07,010 904 00:43:07,010 --> 00:43:08,330 Immagini Again--. 905 00:43:08,330 --> 00:43:19,750 906 00:43:19,750 --> 00:43:25,200 >> Così il monitoraggio dei valori qui-- Sono intenzione di lasciare che voi ragazzi pensate di questo. 907 00:43:25,200 --> 00:43:26,550 908 00:43:26,550 --> 00:43:27,750 Siamo in grado di disegnare un altro quadro. 909 00:43:27,750 --> 00:43:31,260 Ma voglio che tu provi e la ragione attraverso questo da solo per un minuto. 910 00:43:31,260 --> 00:44:01,430 911 00:44:01,430 --> 00:44:04,149 >> Dal momento che non hanno dato noi un indirizzo di esempio, 912 00:44:04,149 --> 00:44:06,940 Sto solo andando a fare X-- commerciale che dovrebbe contribuire a guidare a casa. 913 00:44:06,940 --> 00:44:07,950 Ampersand significa indirizzo. 914 00:44:07,950 --> 00:44:09,540 915 00:44:09,540 --> 00:44:12,360 >> Così nel primo, tutti andare con la prima linea. 916 00:44:12,360 --> 00:44:15,690 Alcuni di five-- un insieme x Slot casuale nella memoria. 917 00:44:15,690 --> 00:44:17,660 918 00:44:17,660 --> 00:44:23,200 Int puntatore stella è uguale all'indirizzo di x, giusto? 919 00:44:23,200 --> 00:44:28,180 Int puntatore stella crea questo blocco, chiama puntatore, 920 00:44:28,180 --> 00:44:30,650 e assegna l'indirizzo di x. 921 00:44:30,650 --> 00:44:32,750 922 00:44:32,750 --> 00:44:34,230 Sono terribile e commerciali. 923 00:44:34,230 --> 00:44:36,460 924 00:44:36,460 --> 00:44:40,550 >> Ora quello che stiamo facendo è che diciamo OK, dereferenziare nostro puntatore. 925 00:44:40,550 --> 00:44:42,760 Quindi andiamo bene, ciò che è in nostro puntatore? 926 00:44:42,760 --> 00:44:44,820 E 'commerciale x. 927 00:44:44,820 --> 00:44:49,400 Vai a ampersand x e riassegnare esso. 928 00:44:49,400 --> 00:44:51,620 929 00:44:51,620 --> 00:44:57,480 >> Così ora, commerciale x sta per essere 35. 930 00:44:57,480 --> 00:45:01,540 931 00:45:01,540 --> 00:45:05,174 Quindi, in pratica, quando si è dereferenziazione, si va OK. 932 00:45:05,174 --> 00:45:07,090 Si sta andando ad essere il disegno immagini di questo tipo. 933 00:45:07,090 --> 00:45:09,423 Si sta andando ad essere il disegno le frecce su dove si trova. 934 00:45:09,423 --> 00:45:16,030 Quindi, andare a questo slot nella memoria e sia dammi quel valore di nuovo, o modificarla. 935 00:45:16,030 --> 00:45:21,620 In questo caso, perché siamo a questo valore, stiamo assegnando ad essere 35. 936 00:45:21,620 --> 00:45:24,700 Considerando che l'ultima uno, se ci fate caso, abbiamo 937 00:45:24,700 --> 00:45:27,680 sono stati l'assegnazione di quello che era qui a qualcosa d'altro. 938 00:45:27,680 --> 00:45:30,450 939 00:45:30,450 --> 00:45:32,245 >> Così hanno questa tabella impressionante. 940 00:45:32,245 --> 00:45:35,000 941 00:45:35,000 --> 00:45:36,890 Non è poi così male. 942 00:45:36,890 --> 00:45:37,970 Voi ragazzi lavora su di esso. 943 00:45:37,970 --> 00:45:39,640 Ho intenzione di disegnare sul bordo. 944 00:45:39,640 --> 00:45:41,306 Stiamo per compilarlo insieme, OK? 945 00:45:41,306 --> 00:45:42,290 946 00:45:42,290 --> 00:45:45,530 Così afferrare un foglio di carta, afferrare un partner, iniziare a lavorare. 947 00:45:45,530 --> 00:45:53,897 948 00:45:53,897 --> 00:45:55,605 Ho intenzione di ottenere un grande pezzo di gesso. 949 00:45:55,605 --> 00:45:56,624 950 00:45:56,624 --> 00:45:58,150 Perché sarà molto. 951 00:45:58,150 --> 00:45:59,410 952 00:45:59,410 --> 00:45:59,910 Ok. 953 00:45:59,910 --> 00:48:08,567 954 00:48:08,567 --> 00:48:09,150 PROFESSORE: OK. 955 00:48:09,150 --> 00:48:11,599 956 00:48:11,599 --> 00:48:12,890 Cominciamo con la prima riga. 957 00:48:12,890 --> 00:48:14,070 958 00:48:14,070 --> 00:48:16,970 Inizieremo lì, poi voi ragazzi può forse lavorare con un po 'di più. 959 00:48:16,970 --> 00:48:17,870 Ok. 960 00:48:17,870 --> 00:48:19,810 a è uguale a volte b c così che cosa è un? 961 00:48:19,810 --> 00:48:21,420 962 00:48:21,420 --> 00:48:23,260 Non è una domanda trabocchetto, te lo prometto. 963 00:48:23,260 --> 00:48:24,440 >> STUDENTE: 4 volte 5. 964 00:48:24,440 --> 00:48:25,420 >> IL PROFESSORE: 4 volte 5. 965 00:48:25,420 --> 00:48:25,920 20. 966 00:48:25,920 --> 00:48:26,730 Così che cosa è b? 967 00:48:26,730 --> 00:48:27,921 968 00:48:27,921 --> 00:48:28,420 STUDENTE: 4. 969 00:48:28,420 --> 00:48:30,204 970 00:48:30,204 --> 00:48:31,043 >> PROFESSORE: E c? 971 00:48:31,043 --> 00:48:31,542 STUDENTE: 5. 972 00:48:31,542 --> 00:48:32,083 PROFESSORE: 5. 973 00:48:32,083 --> 00:48:35,960 E poi questo è solo andare a essere Ampersand a, b e commerciale, 974 00:48:35,960 --> 00:48:38,575 commerciale c, giusto? 975 00:48:38,575 --> 00:48:39,728 976 00:48:39,728 --> 00:48:40,596 Non male. 977 00:48:40,596 --> 00:48:42,081 E 'abbastanza semplice. 978 00:48:42,081 --> 00:48:42,580 Ok. 979 00:48:42,580 --> 00:48:44,300 Quindi il prossimo. 980 00:48:44,300 --> 00:48:48,725 A è uguale a volte c, nel caso in cui chiunque non conosceva quella. 981 00:48:48,725 --> 00:48:49,812 982 00:48:49,812 --> 00:48:53,300 È tutto familiare con i tempi uguale? 983 00:48:53,300 --> 00:49:00,105 OK, tutto questo means-- questo scorciatoia per un uguale volte e c. 984 00:49:00,105 --> 00:49:04,840 È anche possibile fare con la divisione, con aggiunta, con sottrazione. 985 00:49:04,840 --> 00:49:12,130 Si può fare un pari, o una più uguale c mezzi a è uguale a più c, un meno uguale 986 00:49:12,130 --> 00:49:15,190 c sarebbe uguale a un meno c. 987 00:49:15,190 --> 00:49:16,690 E 'solo zucchero sintattico. 988 00:49:16,690 --> 00:49:19,380 989 00:49:19,380 --> 00:49:24,140 >> Quindi, in questo caso, a è uguale a a volte c noi che cosa darebbe? 990 00:49:24,140 --> 00:49:25,910 991 00:49:25,910 --> 00:49:28,186 Anche in questo caso, non è una domanda trabocchetto. 992 00:49:28,186 --> 00:49:28,965 >> STUDENTE: 100. 993 00:49:28,965 --> 00:49:29,300 >> PROFESSORE: 100. 994 00:49:29,300 --> 00:49:30,383 Non qualsiasi altra cosa cambia? 995 00:49:30,383 --> 00:49:31,790 996 00:49:31,790 --> 00:49:32,290 No. 997 00:49:32,290 --> 00:49:37,380 998 00:49:37,380 --> 00:49:39,850 Forse io finalmente meglio i miei e commerciali. 999 00:49:39,850 --> 00:49:42,047 >> STUDENTE: OK, mi dispiace, come sei arrivato a 100? 1000 00:49:42,047 --> 00:49:42,630 PROFESSORE: OK. 1001 00:49:42,630 --> 00:49:46,594 Quindi a è uguale ad una volte c, quindi una volte c. 1002 00:49:46,594 --> 00:49:48,510 STUDENTE: Oh, si sta utilizzando una per il previous-- 1003 00:49:48,510 --> 00:49:49,135 IL PROFESSORE: Sì. 1004 00:49:49,135 --> 00:49:51,450 Quindi questi sono i nostri valori più recenti. 1005 00:49:51,450 --> 00:49:53,990 Si tratta di ciò che si dovrebbe essere utilizzando come ci muoviamo verso il basso, OK. 1006 00:49:53,990 --> 00:49:57,290 1007 00:49:57,290 --> 00:50:01,520 Quindi, b è l'unica cosa che cambia, giusto? 1008 00:50:01,520 --> 00:50:02,910 Quindi cerchiamo di riempire tutto il resto. 1009 00:50:02,910 --> 00:50:09,110 1010 00:50:09,110 --> 00:50:11,330 B. Che cosa è b sta per essere? 1011 00:50:11,330 --> 00:50:13,020 1012 00:50:13,020 --> 00:50:14,140 Essere o non essere. 1013 00:50:14,140 --> 00:50:18,680 1014 00:50:18,680 --> 00:50:20,240 Così che cosa sta facendo questo? 1015 00:50:20,240 --> 00:50:21,605 Qual è la stella pa fare? 1016 00:50:21,605 --> 00:50:23,280 1017 00:50:23,280 --> 00:50:25,350 >> STUDENTE: Codice per la posizione di pa. 1018 00:50:25,350 --> 00:50:26,390 1019 00:50:26,390 --> 00:50:27,480 >> STUDENTE: No, non proprio. 1020 00:50:27,480 --> 00:50:29,470 Quindi questo è un riferimento d. 1021 00:50:29,470 --> 00:50:31,580 >> STUDENTE: Quindi b è il valore di mano di pa. 1022 00:50:31,580 --> 00:50:37,340 >> PROFESSORE: Sì, così è pa l'indirizzo di una, giusto? 1023 00:50:37,340 --> 00:50:42,430 Quindi sta dicendo vai a dove a è immagazzinati e dargli quel valore. 1024 00:50:42,430 --> 00:50:43,884 Così che cosa è b? 1025 00:50:43,884 --> 00:50:44,425 STUDENTE: 100. 1026 00:50:44,425 --> 00:50:46,534 PROFESSORE: 100. 1027 00:50:46,534 --> 00:50:47,450 Perfetto. 1028 00:50:47,450 --> 00:50:49,879 OK, in modo da pc è quello che sta cambiando. 1029 00:50:49,879 --> 00:50:51,170 Tutto il resto rimane lo stesso. 1030 00:50:51,170 --> 00:50:57,160 1031 00:50:57,160 --> 00:50:58,620 Che cosa è PC sarà? 1032 00:50:58,620 --> 00:51:00,770 1033 00:51:00,770 --> 00:51:01,580 Assegnazione semplice. 1034 00:51:01,580 --> 00:51:03,520 1035 00:51:03,520 --> 00:51:05,990 Pc è uguale a pa, e ciò che è pa? 1036 00:51:05,990 --> 00:51:07,049 >> STUDENTE: Ampersand a. 1037 00:51:07,049 --> 00:51:07,840 PROFESSORE: Perfect. 1038 00:51:07,840 --> 00:51:09,490 1039 00:51:09,490 --> 00:51:10,740 Ora stiamo ottenendo interessanti. 1040 00:51:10,740 --> 00:51:12,310 1041 00:51:12,310 --> 00:51:15,230 OK, rompiamo questo uno giù. 1042 00:51:15,230 --> 00:51:21,110 In primo luogo, ciò che è volte b c, perché questo è la parte più semplice di questo, giusto? 1043 00:51:21,110 --> 00:51:22,360 Volte B c è-- 1044 00:51:22,360 --> 00:51:23,320 >> STUDENTE: 500. 1045 00:51:23,320 --> 00:51:28,880 >> PROFESSORE: Sì, così che cosa sta facendo questo, 1046 00:51:28,880 --> 00:51:33,705 Se si tratta di stelle pb, cosa sta cambiando? 1047 00:51:33,705 --> 00:51:35,320 1048 00:51:35,320 --> 00:51:37,242 >> STUDENTE: Cosa c'è in the-- 1049 00:51:37,242 --> 00:51:38,200 PROFESSORE: Cosa c'è in b? 1050 00:51:38,200 --> 00:51:41,340 STUDENTE: Che cosa è nello spazio che pb sta puntando. 1051 00:51:41,340 --> 00:51:43,406 PROFESSORE: E pb sta puntando a-- 1052 00:51:43,406 --> 00:51:43,905 STUDENTE: B. 1053 00:51:43,905 --> 00:51:46,740 IL PROFESSORE: B. Quindi l'unico cosa che cambia è b, a destra. 1054 00:51:46,740 --> 00:51:50,800 Così b volte c, 500. 1055 00:51:50,800 --> 00:51:52,367 Ecco, questo è quello che cambia oggi. 1056 00:51:52,367 --> 00:51:59,091 1057 00:51:59,091 --> 00:51:59,590 Freddo. 1058 00:51:59,590 --> 00:52:00,340 1059 00:52:00,340 --> 00:52:00,840 Incantevole. 1060 00:52:00,840 --> 00:52:01,905 Voi ragazzi stanno facendo grandi. 1061 00:52:01,905 --> 00:52:03,650 1062 00:52:03,650 --> 00:52:06,740 Va bene, rompendo questo verso il basso. 1063 00:52:06,740 --> 00:52:08,050 1064 00:52:08,050 --> 00:52:09,630 C sta cambiando, giusto? 1065 00:52:09,630 --> 00:52:11,530 Così siamo in grado di riempire tutto il resto. 1066 00:52:11,530 --> 00:52:12,540 1067 00:52:12,540 --> 00:52:13,205 Vediamo. 1068 00:52:13,205 --> 00:52:19,125 1069 00:52:19,125 --> 00:52:19,625 Ok. 1070 00:52:19,625 --> 00:52:21,420 1071 00:52:21,420 --> 00:52:24,740 Sappiamo che c sta per essere il prodotto di due numeri, giusto? 1072 00:52:24,740 --> 00:52:26,290 1073 00:52:26,290 --> 00:52:27,980 Quali sono i due numeri, però? 1074 00:52:27,980 --> 00:52:28,970 >> STUDENTE: A e C? 1075 00:52:28,970 --> 00:52:31,930 >> IL PROFESSORE: Allora a è proprio per il primo. 1076 00:52:31,930 --> 00:52:34,385 Quindi stiamo D riferimento p di una, giusto? 1077 00:52:34,385 --> 00:52:35,390 1078 00:52:35,390 --> 00:52:42,870 P di una punta a una, così sappiamo che questo sta per essere 100 volte che cosa? 1079 00:52:42,870 --> 00:52:46,232 Volte quello che fa il punto pc a? 1080 00:52:46,232 --> 00:52:47,410 1081 00:52:47,410 --> 00:52:48,740 Punti di a. 1082 00:52:48,740 --> 00:52:55,038 Quindi 100 volte 100 è 10.000. 1083 00:52:55,038 --> 00:52:56,170 Fa questo ha un senso? 1084 00:52:56,170 --> 00:52:57,640 1085 00:52:57,640 --> 00:52:58,200 Freddo. 1086 00:52:58,200 --> 00:53:00,500 Tratto iniziale, ragazzi, ultima riga. 1087 00:53:00,500 --> 00:53:01,190 Ok. 1088 00:53:01,190 --> 00:53:02,160 Che cosa sta cambiando qui? 1089 00:53:02,160 --> 00:53:05,640 1090 00:53:05,640 --> 00:53:06,935 >> STUDENTE: A. 1091 00:53:06,935 --> 00:53:09,435 IL PROFESSORE: A. Perfetto, così tutto il resto può restare lo stesso. 1092 00:53:09,435 --> 00:53:16,210 1093 00:53:16,210 --> 00:53:16,710 Ok. 1094 00:53:16,710 --> 00:53:17,970 E che è un? 1095 00:53:17,970 --> 00:53:23,610 1096 00:53:23,610 --> 00:53:26,060 Quindi è un momento che cosa? 1097 00:53:26,060 --> 00:53:27,120 Si tratta di stelle pb. 1098 00:53:27,120 --> 00:53:29,750 1099 00:53:29,750 --> 00:53:34,490 Così stelle pb significa qui è pb, punti pb a b. 1100 00:53:34,490 --> 00:53:35,370 >> STUDENTE: 500. 1101 00:53:35,370 --> 00:53:36,230 >> PROFESSORE: 500. 1102 00:53:36,230 --> 00:53:39,236 Così abbiamo 500 volte 100. 1103 00:53:39,236 --> 00:53:41,758 Questo è 50.000. 1104 00:53:41,758 --> 00:53:43,216 Meno male! 1105 00:53:43,216 --> 00:53:45,646 Guardate che. 1106 00:53:45,646 --> 00:53:47,982 >> STUDENTE: Perché abbiamo l'& C per la last-- 1107 00:53:47,982 --> 00:53:48,690 PROFESSORE: Mi dispiace. 1108 00:53:48,690 --> 00:53:50,080 STUDENTE: Oh, OK. 1109 00:53:50,080 --> 00:53:51,600 IL PROFESSORE: Il mio male. 1110 00:53:51,600 --> 00:53:52,890 Un sacco di scrittura. 1111 00:53:52,890 --> 00:53:53,917 1112 00:53:53,917 --> 00:53:54,500 Tutto bene? 1113 00:53:54,500 --> 00:53:55,630 1114 00:53:55,630 --> 00:53:56,660 Non male, vero? 1115 00:53:56,660 --> 00:53:58,490 Appena prende un po ' mentre al lavoro attraverso. 1116 00:53:58,490 --> 00:54:01,080 Se si scomposizione, capire ciò che ogni parte 1117 00:54:01,080 --> 00:54:03,197 si riferisce a-- come con tutto ciò che è, 1118 00:54:03,197 --> 00:54:05,780 yes-- scomposizione al piccolo problemi e poi si ricombinano, 1119 00:54:05,780 --> 00:54:07,345 e si può fare un po 'di roba impressionante. 1120 00:54:07,345 --> 00:54:08,970 Ci sono le risposte, ma abbiamo fatto. 1121 00:54:08,970 --> 00:54:10,324 1122 00:54:10,324 --> 00:54:11,115 L'aritmetica dei puntatori. 1123 00:54:11,115 --> 00:54:13,961 1124 00:54:13,961 --> 00:54:14,460 Ah. 1125 00:54:14,460 --> 00:54:15,510 Le mie mani sono tutti gessoso. 1126 00:54:15,510 --> 00:54:17,970 Quindi, aggiungendo o sottraendo int regola il puntatore 1127 00:54:17,970 --> 00:54:21,890 dalla dimensione del tipo di puntatore. 1128 00:54:21,890 --> 00:54:22,940 1129 00:54:22,940 --> 00:54:28,390 Ricordate come ogni tipo ha una dimensione diversa? 1130 00:54:28,390 --> 00:54:34,890 Così come un doppio o un lungo lungo a dire otto e int fa quattro ma char è uno. 1131 00:54:34,890 --> 00:54:38,360 >> Allora, cosa si vuole fare è-- una cosa da ricordare 1132 00:54:38,360 --> 00:54:44,080 è solo che quanto il vostro valore del puntatore cambia in realtà 1133 00:54:44,080 --> 00:54:46,550 dipenderà dal tipo di puntatore è. 1134 00:54:46,550 --> 00:54:50,820 1135 00:54:50,820 --> 00:54:51,820 Tutti bene con questo? 1136 00:54:51,820 --> 00:54:52,760 Posso cancellarlo? 1137 00:54:52,760 --> 00:54:53,440 Siamo bravi? 1138 00:54:53,440 --> 00:54:53,940 Impressionante. 1139 00:54:53,940 --> 00:55:01,020 1140 00:55:01,020 --> 00:55:07,501 >> Quindi, se abbiamo un po 'di puntatore che-- questo sta per essere-- sono 1141 00:55:07,501 --> 00:55:08,834 ce l'avrebbe fatta un puntatore a int. 1142 00:55:08,834 --> 00:55:10,610 1143 00:55:10,610 --> 00:55:12,760 Memorizza questo. 1144 00:55:12,760 --> 00:55:14,210 1145 00:55:14,210 --> 00:55:20,170 Se si dovesse dire puntatore più uno, che cosa sta andando a fare 1146 00:55:20,170 --> 00:55:23,420 si sta andando ad aggiornare per la dimensione di un int 1147 00:55:23,420 --> 00:55:25,950 perché questo è il tipo di puntatore è. 1148 00:55:25,950 --> 00:55:28,260 >> Con C, tutto è molto rigorosa e regolamentato. 1149 00:55:28,260 --> 00:55:29,440 1150 00:55:29,440 --> 00:55:35,260 Il puntatore int sta per aggiornare da la quantità di spazio int prenderebbe. 1151 00:55:35,260 --> 00:55:36,260 Un int è di quattro byte. 1152 00:55:36,260 --> 00:55:37,650 1153 00:55:37,650 --> 00:55:39,060 >> Così che cosa sarebbe questo trasformarsi in? 1154 00:55:39,060 --> 00:55:40,876 1155 00:55:40,876 --> 00:55:44,390 Stai solo l'aggiunta di quattro su questo. 1156 00:55:44,390 --> 00:55:50,040 Ora il puntatore sarebbe essere-- OK. 1157 00:55:50,040 --> 00:55:51,820 1158 00:55:51,820 --> 00:55:55,380 >> Quindi, se si trattava di un char e abbiamo fatto puntatore più uno, quello che sarebbe ora? 1159 00:55:55,380 --> 00:56:00,300 1160 00:56:00,300 --> 00:56:03,330 Se started-- fingendo noi started-- in questo momento è 0x08. 1161 00:56:03,330 --> 00:56:04,850 1162 00:56:04,850 --> 00:56:10,850 Passiamo ora dire che questo è stato un char puntatore, e abbiamo aggiunto uno. 1163 00:56:10,850 --> 00:56:11,850 Cosa cambierebbe per? 1164 00:56:11,850 --> 00:56:14,989 1165 00:56:14,989 --> 00:56:16,030 Il numero di byte è un char? 1166 00:56:16,030 --> 00:56:16,680 >> PUBBLICO: One. 1167 00:56:16,680 --> 00:56:17,304 >> SPEAKER 1: One. 1168 00:56:17,304 --> 00:56:18,309 PUBBLICO: Così 0x09. 1169 00:56:18,309 --> 00:56:19,600 SPEAKER 1: Quindi sarebbe nove. 1170 00:56:19,600 --> 00:56:22,571 1171 00:56:22,571 --> 00:56:23,820 Quindi, solo qualcosa da ricordare. 1172 00:56:23,820 --> 00:56:28,340 Proprio quando si aggiunge uno, non è l'aggiunta di uno a meno che non si tratta di un char. 1173 00:56:28,340 --> 00:56:34,190 E 'l'aggiunta di quanti byte del tipo che è, 1174 00:56:34,190 --> 00:56:36,960 ed è per questo che abbiamo questa equazione qui. 1175 00:56:36,960 --> 00:56:40,190 Quindi è int volte la dimensione del tipo di puntatore. 1176 00:56:40,190 --> 00:56:42,850 1177 00:56:42,850 --> 00:56:44,730 >> Così abbiamo l'esempio qui. 1178 00:56:44,730 --> 00:56:47,250 1179 00:56:47,250 --> 00:56:54,430 y è stato assegnato a tale valore, 0x4, quando abbiamo fatto y più uguale a uno. 1180 00:56:54,430 --> 00:56:56,830 Che cosa è in esso, ciò che è in x, non cambia. 1181 00:56:56,830 --> 00:56:58,610 Ciò che cambia è ciò che è in y. 1182 00:56:58,610 --> 00:57:04,980 L'indirizzo memorizzato in y aggiornato da quattro perché ci sono quattro byte in un int 1183 00:57:04,980 --> 00:57:06,097 ed è un puntatore a int. 1184 00:57:06,097 --> 00:57:07,290 1185 00:57:07,290 --> 00:57:07,790 >> Bene. 1186 00:57:07,790 --> 00:57:09,123 Così ora abbiamo un altro esercizio. 1187 00:57:09,123 --> 00:57:11,140 1188 00:57:11,140 --> 00:57:13,500 Quindi la domanda è che cosa stampare. 1189 00:57:13,500 --> 00:57:36,710 1190 00:57:36,710 --> 00:57:37,650 Tutte le idee? 1191 00:57:37,650 --> 00:57:41,690 1192 00:57:41,690 --> 00:57:43,699 >> PUBBLICO: Il numero di caratteri felice gatto? 1193 00:57:43,699 --> 00:57:44,490 SPEAKER 1: Esattamente. 1194 00:57:44,490 --> 00:57:45,531 Così come con la stringa. 1195 00:57:45,531 --> 00:57:47,302 1196 00:57:47,302 --> 00:57:48,260 Ricevono tutti che? 1197 00:57:48,260 --> 00:57:49,509 Vogliamo camminare attraverso di essa? 1198 00:57:49,509 --> 00:57:50,300 1199 00:57:50,300 --> 00:57:52,010 >> Sì, OK. 1200 00:57:52,010 --> 00:57:57,385 Quindi ciò che abbiamo qui-- I come questo molto di più. 1201 00:57:57,385 --> 00:57:59,340 Non ho a [Incomprensibile] ridicolmente. 1202 00:57:59,340 --> 00:58:01,690 >> Così abbiamo la nostra stringa qui, gatto felice. 1203 00:58:01,690 --> 00:58:02,950 Incantevole. 1204 00:58:02,950 --> 00:58:05,080 Abbiamo qualche contatore che stiamo tenere traccia di. 1205 00:58:05,080 --> 00:58:11,430 Così abbiamo un po 'di puntatore char * che proprio è posto uguale a str. 1206 00:58:11,430 --> 00:58:14,320 Quello che sta facendo è la sua l'assegnazione di un po 'di puntatore 1207 00:58:14,320 --> 00:58:16,380 all'inizio della stringa. 1208 00:58:16,380 --> 00:58:19,840 Perché sono sicuro che, come è stato accennato in conferenza, 1209 00:58:19,840 --> 00:58:22,290 vi abbiamo dato ragazzi questo tipo di dati denominato stringa. 1210 00:58:22,290 --> 00:58:29,070 >> Ma in realtà le stringhe sono solo una serie di-- come char *. 1211 00:58:29,070 --> 00:58:32,330 E 'un puntatore a un gruppo di personaggi che sono contigue in memoria. 1212 00:58:32,330 --> 00:58:33,680 1213 00:58:33,680 --> 00:58:36,280 Quindi, questo imposta solo che pari a qualsiasi stringa è 1214 00:58:36,280 --> 00:58:38,980 identificato da dove il suo primo carattere è. 1215 00:58:38,980 --> 00:58:42,710 Quindi questo è solo l'impostazione un certo punto uguale all'inizio della stringa. 1216 00:58:42,710 --> 00:58:44,130 Tutto bene lì? 1217 00:58:44,130 --> 00:58:44,960 Freddo. 1218 00:58:44,960 --> 00:58:49,840 >> Quindi questo è il nostro dereferencing puntatore. 1219 00:58:49,840 --> 00:58:53,760 Quindi è in realtà andando a ci danno un certo valore in qui, 1220 00:58:53,760 --> 00:58:55,610 nella nostra stringa che stiamo parlando. 1221 00:58:55,610 --> 00:58:58,342 E stiamo dicendo più a lungo non è nullo di terminazione. 1222 00:58:58,342 --> 00:59:00,550 Quindi, andare avanti fino ad arrivare alla fine della stringa. 1223 00:59:00,550 --> 00:59:02,180 1224 00:59:02,180 --> 00:59:04,190 Aggiornare il puntatore di uno. 1225 00:59:04,190 --> 00:59:09,250 Quindi r, sarà effettivamente aggiornare da una ogni volta perché questo è un char, 1226 00:59:09,250 --> 00:59:09,820 il char *. 1227 00:59:09,820 --> 00:59:10,930 1228 00:59:10,930 --> 00:59:12,340 >> Così sta andando a passare attraverso. 1229 00:59:12,340 --> 00:59:13,290 E 'intenzione di aggiornare. 1230 00:59:13,290 --> 00:59:16,705 Così la prima volta che questo viene eseguito, che sta per essere qui alle h. 1231 00:59:16,705 --> 00:59:17,590 E 'intenzione di aggiornare. 1232 00:59:17,590 --> 00:59:18,185 >> Sarà un a. 1233 00:59:18,185 --> 00:59:21,310 Sarà un p, y, e così via e così via. 1234 00:59:21,310 --> 00:59:22,300 Ci aggiorneremo contatore. 1235 00:59:22,300 --> 00:59:26,160 Quando si raggiunge la fine, stampa fino a che punto si è ottenuto. 1236 00:59:26,160 --> 00:59:27,550 1237 00:59:27,550 --> 00:59:28,050 Sì. 1238 00:59:28,050 --> 00:59:31,475 >> PUBBLICO: Così Conta lo spazio come quello, giusto? 1239 00:59:31,475 --> 00:59:31,974 Ok. 1240 00:59:31,974 --> 00:59:34,294 1241 00:59:34,294 --> 00:59:35,222 >> SPEAKER 1: Pensare così. 1242 00:59:35,222 --> 00:59:36,830 È un interrogo 1243 00:59:36,830 --> 00:59:37,746 >> PUBBLICO: [incomprensibile]. 1244 00:59:37,746 --> 00:59:37,968 1245 00:59:37,968 --> 00:59:38,884 >> SPEAKER 1: Non preoccuparti. 1246 00:59:38,884 --> 00:59:39,720 1247 00:59:39,720 --> 00:59:42,736 Questo lo faccio. 1248 00:59:42,736 --> 00:59:47,710 Va bene, quindi una cosa che capire è che con una matrice, 1249 00:59:47,710 --> 00:59:51,736 è anche possibile trattarlo come un puntatore perché gli array sono solo 1250 00:59:51,736 --> 00:59:52,860 continue macchie di memoria. 1251 00:59:52,860 --> 00:59:53,970 1252 00:59:53,970 --> 00:59:56,380 >> Così si può trattare allo stesso modo. 1253 00:59:56,380 --> 00:59:59,000 È possibile manipolare con i puntatori, troppo. 1254 00:59:59,000 --> 01:00:04,770 Così, invece di fare, in questo caso, la cosa analoga 1255 01:00:04,770 --> 01:00:07,490 sarebbe di matrice 0 è uguale a 1. 1256 01:00:07,490 --> 01:00:08,760 1257 01:00:08,760 --> 01:00:15,210 >> Ma nello stesso modo in cui una stringa è determinata 1258 01:00:15,210 --> 01:00:18,740 entro l'inizio di dove il suo primo carattere è, 1259 01:00:18,740 --> 01:00:22,270 un array è determinata dalla in cui il primo elemento è. 1260 01:00:22,270 --> 01:00:25,120 Perché sappiamo, siamo garantito, che questi 1261 01:00:25,120 --> 01:00:27,985 stanno per essere continua blocchi di memoria. 1262 01:00:27,985 --> 01:00:29,360 Questo è ciò che ci permette di fare questo. 1263 01:00:29,360 --> 01:00:31,193 Sappiamo che sono in continuo blocchi di memoria. 1264 01:00:31,193 --> 01:00:32,230 1265 01:00:32,230 --> 01:00:36,500 >> Quindi, in questo caso, dereferenziando semplicemente array, che ci dice, 1266 01:00:36,500 --> 01:00:40,800 OK, andare all'inizio di l'array, che è qui. 1267 01:00:40,800 --> 01:00:42,640 Quindi, è possibile impostarlo uguale a uno. 1268 01:00:42,640 --> 01:00:48,610 E in questo caso, qualunque sia la matrice tipo è, quando si aggiorna ad uno, 1269 01:00:48,610 --> 01:00:50,830 è proprio come l'aggiornamento al successivo punto di indice. 1270 01:00:50,830 --> 01:00:52,760 1271 01:00:52,760 --> 01:00:56,360 Si può farlo perché si sapere cosa c'è nella tua matrice. 1272 01:00:56,360 --> 01:00:59,770 Così si sa quanto a aggiornare il puntatore, 1273 01:00:59,770 --> 01:01:02,925 quale indirizzo di aggiornarlo a così che ci sei lo slot successivo. 1274 01:01:02,925 --> 01:01:04,740 1275 01:01:04,740 --> 01:01:09,400 >> Quindi, questo è solo un modo diverso della scrittura di matrice 0 è uguale a 1, 1276 01:01:09,400 --> 01:01:15,114 1 campo è uguale a 2, matrice Staffa 2 è uguale a 3. 1277 01:01:15,114 --> 01:01:16,780 E 'solo un altro modo di pensarci. 1278 01:01:16,780 --> 01:01:19,600 Perché sono in continuo blocchi in memoria, 1279 01:01:19,600 --> 01:01:21,830 è possibile fare riferimento a loro o dalla matrice notation-- 1280 01:01:21,830 --> 01:01:24,390 che personalmente trovare easier-- ma forse 1281 01:01:24,390 --> 01:01:27,347 è necessario manipolarlo rigorosamente indirizzi di memoria. 1282 01:01:27,347 --> 01:01:28,930 E questo è il modo in cui l'hai fatto. 1283 01:01:28,930 --> 01:01:30,630 1284 01:01:30,630 --> 01:01:32,630 Tipo di più come un cosa bella che si possa fare 1285 01:01:32,630 --> 01:01:35,213 contro forse non qualcosa che ti in realtà andando a implementare. 1286 01:01:35,213 --> 01:01:36,960 1287 01:01:36,960 --> 01:01:38,630 >> Io lo uso nel 61. 1288 01:01:38,630 --> 01:01:41,710 Voi ragazzi, probabilmente non è necessario di preoccuparsi troppo. 1289 01:01:41,710 --> 01:01:43,693 Ma se siete interessati, prendere 61 l'anno prossimo. 1290 01:01:43,693 --> 01:01:45,269 1291 01:01:45,269 --> 01:01:46,560 Siamo i ragazzi in casa tratto. 1292 01:01:46,560 --> 01:01:47,510 Lo so, è lungo. 1293 01:01:47,510 --> 01:01:50,570 1294 01:01:50,570 --> 01:01:58,880 Memoria dinamica Allocation-- così sappiamo che uno 1295 01:01:58,880 --> 01:02:01,790 delle cose quando abbiamo parlato durante la nostra prima sezione insieme, 1296 01:02:01,790 --> 01:02:04,560 abbiamo guardato uno swap funzione di dove era 1297 01:02:04,560 --> 01:02:08,010 al di fuori del campo di applicazione della nostra funzione principale. 1298 01:02:08,010 --> 01:02:14,370 E stavamo passando in questi valori che erano effettivamente copie. 1299 01:02:14,370 --> 01:02:20,570 >> E una volta finito di swap esecuzione, è appena lasciato una pila. 1300 01:02:20,570 --> 01:02:22,830 Ricordate, abbiamo un impilare cornice per swap. 1301 01:02:22,830 --> 01:02:26,070 Lascia e quelli I valori vanno con esso. 1302 01:02:26,070 --> 01:02:27,050 E se ne erano andati. 1303 01:02:27,050 --> 01:02:28,615 Non abbiamo potuto fare niente con loro e ci è dispiaciuto 1304 01:02:28,615 --> 01:02:29,989 perché non siamo in grado di scambiare i nostri valori. 1305 01:02:29,989 --> 01:02:31,070 1306 01:02:31,070 --> 01:02:36,560 >> Ma con C, come ho già detto, è hanno un sacco di potere sulla memoria. 1307 01:02:36,560 --> 01:02:43,310 Che cosa si può fare è che si può allocare le cose sul mucchio qui 1308 01:02:43,310 --> 01:02:46,830 che ci rimarrà fino al dite loro altrimenti. 1309 01:02:46,830 --> 01:02:48,280 >> Sono come i bambini buoni. 1310 01:02:48,280 --> 01:02:49,150 Rimangono lì. 1311 01:02:49,150 --> 01:02:50,270 Essi non lasciano. 1312 01:02:50,270 --> 01:02:52,750 Rimarranno lì fino a sei come, OK, si può andare via. 1313 01:02:52,750 --> 01:02:55,920 >> Mentre le cose in pila, who-- sono come bambini cattivi. 1314 01:02:55,920 --> 01:02:59,160 Faranno solo scappare quando vuoi di essere lì e poi se ne sono andati. 1315 01:02:59,160 --> 01:03:00,160 Non è possibile farli tornare. 1316 01:03:00,160 --> 01:03:01,350 1317 01:03:01,350 --> 01:03:07,187 >> Così il mucchio è-- che andremo a parlare di malloc e libero, che 1318 01:03:07,187 --> 01:03:08,895 Sono sicuro che voi ragazzi sentito parlare in conferenza. 1319 01:03:08,895 --> 01:03:10,270 1320 01:03:10,270 --> 01:03:14,210 E questo è fondamentalmente un modo di avere dati molto persistenti. 1321 01:03:14,210 --> 01:03:18,920 In modo da poter conservare i dati intorno come il tempo che vuoi. 1322 01:03:18,920 --> 01:03:19,546 Mhm. 1323 01:03:19,546 --> 01:03:21,475 >> PUBBLICO: Si può definire heap e stack? 1324 01:03:21,475 --> 01:03:24,030 Sono come posti per mettere le cose? 1325 01:03:24,030 --> 01:03:26,630 >> SPEAKER 1: Quindi sono fondamentalmente solo-- sono 1326 01:03:26,630 --> 01:03:29,530 il modo ci riferiamo solo alla memoria. 1327 01:03:29,530 --> 01:03:37,300 Così heap è solo luoghi in cui memoria viene allocata in modo dinamico, 1328 01:03:37,300 --> 01:03:40,960 considerando pila si riferisce più di impilare i frame 1329 01:03:40,960 --> 01:03:45,950 che sono più centrale per la funzioni che sono effettivamente in esecuzione. 1330 01:03:45,950 --> 01:03:47,200 Non è davvero il controllo. 1331 01:03:47,200 --> 01:03:50,690 >> La grande differenza, si ha il controllo sopra il mucchio, se si desidera. 1332 01:03:50,690 --> 01:03:52,710 Hai meno controllo sulla pila. 1333 01:03:52,710 --> 01:03:55,030 Lo stack dipende dalla funzioni che sono in esecuzione, 1334 01:03:55,030 --> 01:03:58,320 e l'ordine in cui sono correre, e come le cose vengono restituiti. 1335 01:03:58,320 --> 01:04:01,290 Considerando che, con l'heap, come vedremo, si può dire, 1336 01:04:01,290 --> 01:04:06,639 OK, voglio che questo valore sia intorno finché non ti avvertirò in caso contrario. 1337 01:04:06,639 --> 01:04:08,180 Non ti è permesso di sbarazzarsi di esso. 1338 01:04:08,180 --> 01:04:09,300 Non ti è permesso di ignorare esso. 1339 01:04:09,300 --> 01:04:11,675 Hai intenzione di tenerlo in giro per tutto il tempo che ti dico. 1340 01:04:11,675 --> 01:04:15,780 Si arriva a essere il capo nel mucchio, mentre il stack-- forse se 1341 01:04:15,780 --> 01:04:18,080 come finagle la tua strada si può essere il capo. 1342 01:04:18,080 --> 01:04:19,340 Ma non del tutto. 1343 01:04:19,340 --> 01:04:20,480 1344 01:04:20,480 --> 01:04:22,070 Ed è davvero solo la memoria. 1345 01:04:22,070 --> 01:04:24,260 E 'solo modi diversi di riferirsi alla memoria. 1346 01:04:24,260 --> 01:04:25,800 1347 01:04:25,800 --> 01:04:26,400 >> Freddo. 1348 01:04:26,400 --> 01:04:28,630 Quindi, con questo, come controllare la vostra memoria. 1349 01:04:28,630 --> 01:04:32,070 E 'con malloc, che avete intenzione di arrivare a utilizzare. 1350 01:04:32,070 --> 01:04:37,100 Quindi è solo a breve per l'allocazione della memoria. 1351 01:04:37,100 --> 01:04:38,459 Questo è tutto ciò che è. 1352 01:04:38,459 --> 01:04:41,250 C'è un sacco di altre fresco funzioni che hanno alloc alla fine, 1353 01:04:41,250 --> 01:04:42,750 e si distinguono per cose diverse. 1354 01:04:42,750 --> 01:04:43,550 1355 01:04:43,550 --> 01:04:49,050 >> Così, quando hai bisogno di stoccaggio che deve per sopravvivere la funzione corrente in modo 1356 01:04:49,050 --> 01:04:51,010 che quando il vostro attuale funzione fugge, 1357 01:04:51,010 --> 01:04:55,774 avete ancora i dati che si ottenuto da esso, si desidera utilizzare malloc. 1358 01:04:55,774 --> 01:04:57,190 Che sarà inizializzare sul mucchio. 1359 01:04:57,190 --> 01:05:00,140 E come ho detto e continuo a dicendo, ti tieni lì 1360 01:05:00,140 --> 01:05:03,050 fino a quando gli si dice altrimenti, che è la cosa importante. 1361 01:05:03,050 --> 01:05:08,450 >> Quindi una cosa da notare, e che è tipicamente molto importante, 1362 01:05:08,450 --> 01:05:13,620 è che questo sizeof è super utile da usare 1363 01:05:13,620 --> 01:05:16,440 perché a seconda del tipo di macchina che si sta eseguendo, 1364 01:05:16,440 --> 01:05:22,470 esso può avere quantità variabili di memoria che richiede. 1365 01:05:22,470 --> 01:05:26,870 Così si vuole sempre di usare la dimensione di così che non sei dipendente dalla macchina, 1366 01:05:26,870 --> 01:05:30,300 in modo che il codice sarà eseguito su qualsiasi macchina. 1367 01:05:30,300 --> 01:05:32,360 >> E questo è solo una parte di scrivere buon codice. 1368 01:05:32,360 --> 01:05:34,610 Se funziona su una macchina, ma non tutti gli altri, 1369 01:05:34,610 --> 01:05:36,440 quanto sia utile è stato il tuo programma? 1370 01:05:36,440 --> 01:05:38,420 Così si vuole sempre di assicurarsi e utilizzare sizeof. 1371 01:05:38,420 --> 01:05:41,306 >> PUBBLICO: Quindi è che, come il dimensione di 10 pollici [incomprensibile]? 1372 01:05:41,306 --> 01:05:43,698 >> SPEAKER 1: Questa è la dimensione di 10 int. 1373 01:05:43,698 --> 01:05:44,197 sì. 1374 01:05:44,197 --> 01:05:45,360 1375 01:05:45,360 --> 01:05:48,830 Così dimensione di int tornerà quanto si fa a prendere int. 1376 01:05:48,830 --> 01:05:51,530 O le dimensioni del carattere, come tanto fa una sola ripresa char. 1377 01:05:51,530 --> 01:05:54,150 E poi quanti blocchi di che cosa vuoi? 1378 01:05:54,150 --> 01:05:57,590 >> Quindi, in questo caso, vogliamo qualcosa che siamo in grado di memorizzare 10 int a. 1379 01:05:57,590 --> 01:06:00,240 E funzionerà a prescindere di macchina, che è cool. 1380 01:06:00,240 --> 01:06:01,720 1381 01:06:01,720 --> 01:06:04,846 Quindi, il numero di byte sarà che effettivamente dare? 1382 01:06:04,846 --> 01:06:06,190 Rapido calcolo. 1383 01:06:06,190 --> 01:06:06,787 >> PUBBLICO: 40. 1384 01:06:06,787 --> 01:06:07,370 SPEAKER 1: 40. 1385 01:06:07,370 --> 01:06:07,869 Esattamente. 1386 01:06:07,869 --> 01:06:09,520 1387 01:06:09,520 --> 01:06:12,030 Così un altro grande cosa. 1388 01:06:12,030 --> 01:06:14,840 Puntatore o malloc possono restituire null. 1389 01:06:14,840 --> 01:06:17,910 >> Quindi, di nuovo, controllare sempre vedere se restituito un valore nullo 1390 01:06:17,910 --> 01:06:19,620 prima si cerca di fare qualsiasi cosa con esso. 1391 01:06:19,620 --> 01:06:23,430 1392 01:06:23,430 --> 01:06:27,350 Se si tenta di risolvere il riferimento questo puntatore ora, 1393 01:06:27,350 --> 01:06:29,720 è solo andare a segmentation fault perché sei andato e provato 1394 01:06:29,720 --> 01:06:31,730 toccare nulla quando non si dovrebbe avere. 1395 01:06:31,730 --> 01:06:34,000 Quindi controllate sempre nullo. 1396 01:06:34,000 --> 01:06:36,075 Anche in questo caso, tutto quello che puoi fare. 1397 01:06:36,075 --> 01:06:38,300 1398 01:06:38,300 --> 01:06:39,720 >> Potrebbe restituire null. 1399 01:06:39,720 --> 01:06:42,740 Si tornerà null se sei uno di spazio, o per qualsiasi motivo 1400 01:06:42,740 --> 01:06:44,350 ha funzionato in qualche memoria bug. 1401 01:06:44,350 --> 01:06:45,890 1402 01:06:45,890 --> 01:06:47,510 A volte restituisce proprio nulla. 1403 01:06:47,510 --> 01:06:48,990 Quindi resta che verificare la presenza di esso. 1404 01:06:48,990 --> 01:06:51,050 Questo è tutto ciò diapositiva sta dicendo. 1405 01:06:51,050 --> 01:06:53,366 1406 01:06:53,366 --> 01:06:55,240 E poi quello che abbiamo qui è una chiamata a liberare. 1407 01:06:55,240 --> 01:07:00,550 Quindi, nello stesso modo che se si aprire un file è necessario chiudere un file, 1408 01:07:00,550 --> 01:07:04,340 se la memoria malloc, si si deve liberare quella memoria. 1409 01:07:04,340 --> 01:07:06,530 E voi ragazzi ottenere di fare cose davvero interessanti. 1410 01:07:06,530 --> 01:07:09,624 >> E c'è un programma è possibile eseguire per vedere se siete mai perdite di memoria. 1411 01:07:09,624 --> 01:07:11,040 Ma tu non vuoi perdere la memoria. 1412 01:07:11,040 --> 01:07:11,820 E 'davvero male. 1413 01:07:11,820 --> 01:07:13,191 1414 01:07:13,191 --> 01:07:15,020 A soli incasinare le cose. 1415 01:07:15,020 --> 01:07:20,939 >> E 'brutta da fare, proprio come la programmazione saggio per l'efficienza della progettazione. 1416 01:07:20,939 --> 01:07:22,980 Ma è anche solo un po ' del male per il computer. 1417 01:07:22,980 --> 01:07:26,780 Quindi, solo le cose gratis quando li malloc. 1418 01:07:26,780 --> 01:07:28,190 1419 01:07:28,190 --> 01:07:30,210 >> Voi ragazzi trovare anche le simmetrie qui. 1420 01:07:30,210 --> 01:07:31,180 Super semplice. 1421 01:07:31,180 --> 01:07:33,010 Proprio libero e poi qualunque sia il puntatore, 1422 01:07:33,010 --> 01:07:34,843 qualunque sia il nome il puntatore è, e 1423 01:07:34,843 --> 01:07:36,710 si prenderà cura di liberare per voi. 1424 01:07:36,710 --> 01:07:38,200 1425 01:07:38,200 --> 01:07:38,700 Freddo. 1426 01:07:38,700 --> 01:07:40,410 1427 01:07:40,410 --> 01:07:42,530 >> Poi abbiamo questo. 1428 01:07:42,530 --> 01:07:44,770 Quindi stiamo solo andando a camminare attraverso questo programma. 1429 01:07:44,770 --> 01:07:46,560 E poi voi ragazzi è fatto. 1430 01:07:46,560 --> 01:07:50,240 >> Così [incomprensibile] appena principale. 1431 01:07:50,240 --> 01:07:51,690 Così abbiamo un po 'di puntatore int *. 1432 01:07:51,690 --> 01:07:53,648 Quindi abbiamo un puntatore che sta andando a tenere int. 1433 01:07:53,648 --> 01:07:54,500 1434 01:07:54,500 --> 01:07:56,170 E quanti int sta andando a tenere? 1435 01:07:56,170 --> 01:07:57,400 1436 01:07:57,400 --> 01:07:58,170 Solo uno. 1437 01:07:58,170 --> 01:07:59,400 1438 01:07:59,400 --> 01:08:01,100 Dimensioni di un int. 1439 01:08:01,100 --> 01:08:03,900 >> Noi controlliamo se puntatore è nullo perché 1440 01:08:03,900 --> 01:08:06,130 è, vogliamo dire non fare nulla. 1441 01:08:06,130 --> 01:08:07,065 E 'male. 1442 01:08:07,065 --> 01:08:08,130 1443 01:08:08,130 --> 01:08:12,130 Così il risultato della stampa qualche errore di memoria, il più delle volte ritorno 1, 1444 01:08:12,130 --> 01:08:14,260 come voi ragazzi sono abituati. 1445 01:08:14,260 --> 01:08:17,390 >> E poi abbiamo qui, ci dereference il nostro puntatore. 1446 01:08:17,390 --> 01:08:22,840 Quindi questo significa che andremo a memorizzare qualcosa nella posizione dato a noi. 1447 01:08:22,840 --> 01:08:24,350 1448 01:08:24,350 --> 01:08:30,830 Int * pointer, o malloc, restituisce il indirizzo di dove mettere da parte questo 1449 01:08:30,830 --> 01:08:31,750 memoria per voi. 1450 01:08:31,750 --> 01:08:32,830 1451 01:08:32,830 --> 01:08:34,800 Quindi è fondamentalmente dandovi like-- se 1452 01:08:34,800 --> 01:08:38,149 pensare a un gruppo di case in un quartiere 1453 01:08:38,149 --> 01:08:40,640 che si desidera inserire i mobili in, malloc 1454 01:08:40,640 --> 01:08:43,850 è come OK, si ottiene per andare a casa tre. 1455 01:08:43,850 --> 01:08:45,800 E ti dà la indirizzo di casa a tre. 1456 01:08:45,800 --> 01:08:48,775 >> Quindi, questo proprio ora, questo puntatore negozi di un indirizzo, 1457 01:08:48,775 --> 01:08:50,149 memorizza l'indirizzo della vostra casa. 1458 01:08:50,149 --> 01:08:51,470 1459 01:08:51,470 --> 01:08:54,640 * mezzi PTR, OK, io sono a casa mia. 1460 01:08:54,640 --> 01:08:55,326 Freddo. 1461 01:08:55,326 --> 01:08:56,580 Ho bisogno di qualche intero. 1462 01:08:56,580 --> 01:08:59,229 >> Quindi stai chiedendo a qualcuno per darvi mobili ora. 1463 01:08:59,229 --> 01:09:00,430 Così si ottiene un po 'int. 1464 01:09:00,430 --> 01:09:05,100 E si mette in il puntatore dove sta indicando. 1465 01:09:05,100 --> 01:09:08,670 >> E poi è solo stampe fuori, hai inserito ovunque. 1466 01:09:08,670 --> 01:09:11,060 E ancora, il riferimento. 1467 01:09:11,060 --> 01:09:15,649 Quindi, questo è come si è andato a questo INDIRIZZO E hai visto quello che c'era. 1468 01:09:15,649 --> 01:09:17,120 1469 01:09:17,120 --> 01:09:17,630 Cool? 1470 01:09:17,630 --> 01:09:20,174 >> E poi, naturalmente, liberiamo il nostro puntatore. 1471 01:09:20,174 --> 01:09:21,590 Non dimenticare di liberare il puntatore. 1472 01:09:21,590 --> 01:09:22,933 Non dimenticare di controllare nulla. 1473 01:09:22,933 --> 01:09:24,349 Non dimenticare di liberare il puntatore. 1474 01:09:24,349 --> 01:09:27,270 Ci sono due cose che si ricordi da questo, o che si dovrebbe ricordare. 1475 01:09:27,270 --> 01:09:27,770 Sì. 1476 01:09:27,770 --> 01:09:31,590 PUBBLICO: roba [incomprensibile] così, il char * s. 1477 01:09:31,590 --> 01:09:33,760 Come mai non ci siamo mai liberi quelli? 1478 01:09:33,760 --> 01:09:34,529 >> SPEAKER 1: Hm? 1479 01:09:34,529 --> 01:09:36,450 >> PUBBLICO: Sono quelli come stringhe? 1480 01:09:36,450 --> 01:09:39,160 Hai detto che le stringhe sono proprio come char * s, giusto? 1481 01:09:39,160 --> 01:09:41,200 Allora perché non ci liberiamo stringhe? 1482 01:09:41,200 --> 01:09:43,204 >> SPEAKER 1: È solo GRATUITA Se mallocing. 1483 01:09:43,204 --> 01:09:44,620 PUBBLICO: Oh, se stai mallocing. 1484 01:09:44,620 --> 01:09:47,399 SPEAKER 1: Così malloc e libero sono due cose 1485 01:09:47,399 --> 01:09:49,000 che si dovrebbe sempre avere insieme. 1486 01:09:49,000 --> 01:09:51,630 f aperto, f vicino, due cose si dovrebbe avere insieme. 1487 01:09:51,630 --> 01:09:54,471 In entrambi i casi, verificare la presenza di nulla. 1488 01:09:54,471 --> 01:09:54,971 Sì. 1489 01:09:54,971 --> 01:09:57,130 >> PUBBLICO: Così libero è solo permettendo qualcos'altro 1490 01:09:57,130 --> 01:09:59,690 da memorizzare dopo questo programma ha usato? 1491 01:09:59,690 --> 01:10:01,946 >> SPEAKER 1: E 'solo dicendo, OK, ho finito con questo. 1492 01:10:01,946 --> 01:10:03,320 Non hai bisogno di tenerlo in giro. 1493 01:10:03,320 --> 01:10:05,340 1494 01:10:05,340 --> 01:10:08,190 In caso contrario, il computer sarà proprio come cercare di tenerlo lì. 1495 01:10:08,190 --> 01:10:10,910 E poi can't-- funziona in problemi di memoria successive. 1496 01:10:10,910 --> 01:10:13,660 Hai sempre voglia di liberarlo perché racconta il computer, OK, io sono 1497 01:10:13,660 --> 01:10:15,190 fatto con questo luogo di memoria. 1498 01:10:15,190 --> 01:10:17,190 Si può avere indietro per me da utilizzare in seguito. 1499 01:10:17,190 --> 01:10:19,250 1500 01:10:19,250 --> 01:10:20,500 Cool? 1501 01:10:20,500 --> 01:10:21,320 Sì. 1502 01:10:21,320 --> 01:10:26,950 >> PUBBLICO: Così abbiamo usato il% d appena perché un doppio che sta tornando, 1503 01:10:26,950 --> 01:10:28,330 o perché è-- [incomprensibile]. 1504 01:10:28,330 --> 01:10:30,170 1505 01:10:30,170 --> 01:10:31,620 >> PUBBLICO: È possibile utilizzare% i? 1506 01:10:31,620 --> 01:10:32,760 >> SPEAKER 1: È possibile utilizzare% i. 1507 01:10:32,760 --> 01:10:35,052 1508 01:10:35,052 --> 01:10:36,135 Tutte le domande last minute? 1509 01:10:36,135 --> 01:10:38,310 1510 01:10:38,310 --> 01:10:38,985 Vai avanti. 1511 01:10:38,985 --> 01:10:40,610 PUBBLICO: Ho solo una domanda veloce. 1512 01:10:40,610 --> 01:10:50,200 Quindi la variabile ptr, that's-- come, con l'int * ptr = malloc, 1513 01:10:50,200 --> 01:10:54,142 questo è solo dicendo che è che punta a un posto in memory-- 1514 01:10:54,142 --> 01:10:55,600 SPEAKER 1: Vuoi [incomprensibile]? 1515 01:10:55,600 --> 01:10:58,050 PUBBLICO: --that è il dimensioni di-- no, va bene. 1516 01:10:58,050 --> 01:11:01,292 Ma è solo che punta a un posto in memoria che è proprio come quattro byte. 1517 01:11:01,292 --> 01:11:02,000 SPEAKER 1: Giusto. 1518 01:11:02,000 --> 01:11:03,030 1519 01:11:03,030 --> 01:11:07,070 Così malloc la dimensione di int dice, OK, ho intenzione di andare a correre fuori, 1520 01:11:07,070 --> 01:11:08,780 trovare quattro byte di memoria per voi. 1521 01:11:08,780 --> 01:11:10,700 Quando trova che quattro byte di memoria, 1522 01:11:10,700 --> 01:11:14,030 Dà eseguire il backup l'indirizzo di dove inizia, 1523 01:11:14,030 --> 01:11:16,160 e questo è quello memorizzato puntatore, o ptr. 1524 01:11:16,160 --> 01:11:17,510 1525 01:11:17,510 --> 01:11:18,010 Buona. 1526 01:11:18,010 --> 01:11:18,742 1527 01:11:18,742 --> 01:11:21,700 Ragazzi, guardate meno confuso di più la gente quando parlo di puntatore, 1528 01:11:21,700 --> 01:11:23,670 quindi mi sento abbastanza bene in questo momento. 1529 01:11:23,670 --> 01:11:24,520 >> Bene. 1530 01:11:24,520 --> 01:11:27,960 Come sempre, voi ragazzi dovrebbe avere tutti ottenuto i voti PSet2 ormai. 1531 01:11:27,960 --> 01:11:32,769 So che ci sono stati un po 'traballante cose dove si dice, formula non valida 1532 01:11:32,769 --> 01:11:33,310 o qualcosa del genere. 1533 01:11:33,310 --> 01:11:36,166 Se stai ricevendo che, tutti i voti sono validi dalla mia parte. 1534 01:11:36,166 --> 01:11:38,040 Così posso inviarvi screenshot dei tuoi voti. 1535 01:11:38,040 --> 01:11:39,011 1536 01:11:39,011 --> 01:11:41,760 Fatemi sapere e se siete manca qualsiasi gradi o qualcosa 1537 01:11:41,760 --> 01:11:43,060 non sembra avere senso. 1538 01:11:43,060 --> 01:11:43,720 Vieni da me. 1539 01:11:43,720 --> 01:11:44,830 1540 01:11:44,830 --> 01:11:48,830 >> Sono stato super-orgoglioso di te ragazzi già, quindi continuate così. 1541 01:11:48,830 --> 01:11:50,640 E avere un buon riposo della settimana. 1542 01:11:50,640 --> 01:11:53,440 Sono sicuro che vedrò un po ' di voi in orario d'ufficio. 1543 01:11:53,440 --> 01:11:55,414