1 00:00:00,000 --> 00:00:03,269 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:03,269 --> 00:00:05,391 3 00:00:05,391 --> 00:00:06,640 CAMILLE REKHSON: Hi, everyone. 4 00:00:06,640 --> 00:00:10,120 Benvenuti al quiz CS50 pari a zero revisione sessione. 5 00:00:10,120 --> 00:00:10,770 Sono Camille. 6 00:00:10,770 --> 00:00:13,140 E ho intenzione di andare su alcuni argomenti con te 7 00:00:13,140 --> 00:00:16,890 ragazzi oggi per aiutare voi prepararsi per il quiz. 8 00:00:16,890 --> 00:00:20,840 Quindi, ecco la nostra non esaustivo elenco degli argomenti 9 00:00:20,840 --> 00:00:23,210 dovrebbe avere familiarità con per il quiz. 10 00:00:23,210 --> 00:00:25,740 Queste sono state scattate direttamente dal programma. 11 00:00:25,740 --> 00:00:26,990 Lo so che sembra un sacco. 12 00:00:26,990 --> 00:00:30,870 Ma credetemi, che hai imparato tutti queste cose nelle ultime settimane. 13 00:00:30,870 --> 00:00:33,210 >> Così ci torneremo sicuramente su un sacco di questi oggi. 14 00:00:33,210 --> 00:00:35,825 Ma anche prendere un po 'di tempo sulla vostra proprio di rivedere queste cose. 15 00:00:35,825 --> 00:00:38,450 E se tu non fossi a conoscenza ciò che alcune di queste cose sono, 16 00:00:38,450 --> 00:00:42,400 assicuratevi di chiedere uno di noi. 17 00:00:42,400 --> 00:00:45,985 Inoltre, per la parola ufficiale sul quiz, andare a questo link. 18 00:00:45,985 --> 00:00:48,860 Ciò avrà tutte le informazioni con la quale stanza avete bisogno di andare in, 19 00:00:48,860 --> 00:00:52,960 divisi in ordine alfabetico, e anche alcuni suggerimenti su quali materiali 20 00:00:52,960 --> 00:00:56,470 si dovrebbe essere studiando, e che tipo di domande quiz ci si può aspettare. 21 00:00:56,470 --> 00:01:01,090 Quindi assicuratevi di controllare che fuori. 22 00:01:01,090 --> 00:01:03,810 >> Inoltre, alcuni suggerimenti per quando si si stanno preparando per l'esame. 23 00:01:03,810 --> 00:01:05,730 Pratica di codifica su carta. 24 00:01:05,730 --> 00:01:09,280 So che sono abituato ad avere il controllo IDE per i vostri errori per voi, 25 00:01:09,280 --> 00:01:12,280 e it's-- quando si sta digitando in su, è un po 'diverso che avere 26 00:01:12,280 --> 00:01:13,113 di scrivere le cose. 27 00:01:13,113 --> 00:01:14,560 Così la pratica facendo qualche codifica. 28 00:01:14,560 --> 00:01:17,910 Alcune buone funzioni di praticare facendo sono strlen e atoi, 29 00:01:17,910 --> 00:01:20,450 vedere se si può scrivere quelli da soli. 30 00:01:20,450 --> 00:01:21,970 Avere familiarità con i set di problemi. 31 00:01:21,970 --> 00:01:24,200 La maggior parte dei anni ci sono le domande che si riferiscono 32 00:01:24,200 --> 00:01:25,700 alla parte del materiale problema posto. 33 00:01:25,700 --> 00:01:30,480 Quindi, assicurarsi di aver compreso come fare tutti i set di problemi. 34 00:01:30,480 --> 00:01:35,240 >> Prova a fare alcuni dei vecchi quiz sotto il vincolo di tempo 75 minuti. 35 00:01:35,240 --> 00:01:37,290 Un sacco di quiz può essere di tipo lungo. 36 00:01:37,290 --> 00:01:39,680 Quindi è un buon modo per dare te una certa pratica, 37 00:01:39,680 --> 00:01:41,650 e quanto tempo ci sarà prendere, e come 38 00:01:41,650 --> 00:01:45,360 dovrebbe dividere il vostro tempo per assicurarsi hai finito tutto entro la fine. 39 00:01:45,360 --> 00:01:49,690 E anche, si ottiene una sola pagina, due foglio di riferimento facciate 40 00:01:49,690 --> 00:01:52,962 che si può scrivere quello che desiderare in da utilizzare durante il quiz. 41 00:01:52,962 --> 00:01:54,670 Così, quando si sta creando che, questo è anche 42 00:01:54,670 --> 00:01:57,860 veramente ottimo modo per studiare perché ti tipo di riesaminerà cose 43 00:01:57,860 --> 00:01:59,610 come si sta scrivendo. 44 00:01:59,610 --> 00:02:05,421 >> Quindi tutte le domande generali su il quiz, o come funziona? 45 00:02:05,421 --> 00:02:05,921 Già. 46 00:02:05,921 --> 00:02:09,167 >> PUBBLICO: Sarà che lista degli argomenti che hai appena mostrato di essere a nostra disposizione 47 00:02:09,167 --> 00:02:09,820 on-line? 48 00:02:09,820 --> 00:02:12,736 >> CAMILLE REKHSON: Questa intera diapositiva mostra sarà pubblicato sul sito web. 49 00:02:12,736 --> 00:02:16,040 Inoltre, il video della recensione di oggi sessione sarà sul sito web. 50 00:02:16,040 --> 00:02:19,250 Quindi non preoccupatevi troppo di scrivere cose giù tutto. 51 00:02:19,250 --> 00:02:20,437 Sarà tutto lì. 52 00:02:20,437 --> 00:02:21,270 Qualsiasi altra domanda? 53 00:02:21,270 --> 00:02:23,810 54 00:02:23,810 --> 00:02:26,960 Ok, cominciamo. 55 00:02:26,960 --> 00:02:30,860 >> Quindi, una cosa da avere familiarità con è i diversi tipi di dati e la dimensione 56 00:02:30,860 --> 00:02:32,486 che assumono. 57 00:02:32,486 --> 00:02:35,360 Questo può anche essere una grande cosa per scrivere sul foglio di riferimento, 58 00:02:35,360 --> 00:02:37,240 solo per essere sicuri ricordare tutti questi. 59 00:02:37,240 --> 00:02:39,200 Ma-- così caratteri sono 1 byte. 60 00:02:39,200 --> 00:02:40,700 Ints sono 4 byte. 61 00:02:40,700 --> 00:02:44,450 Una lunga, lunga, che è sostanzialmente più spazio per un numero intero, è di 8 byte. 62 00:02:44,450 --> 00:02:46,560 Un galleggiante è di 4 byte. 63 00:02:46,560 --> 00:02:50,620 Un doppio, che fondamentalmente si dà più spazio per memorizzare un galleggiante, è di 8 byte. 64 00:02:50,620 --> 00:02:54,210 E poi un puntatore è anche 8 byte. 65 00:02:54,210 --> 00:02:56,270 Domande su questi? 66 00:02:56,270 --> 00:03:00,380 67 00:03:00,380 --> 00:03:05,580 >> Così binario è un altro argomento che abbiamo coperto un po 'questo semestre. 68 00:03:05,580 --> 00:03:07,910 Quindi cerchiamo di fare un po ' praticare con la conversione 69 00:03:07,910 --> 00:03:10,000 tra il binario e decimale. 70 00:03:10,000 --> 00:03:13,950 Così chiunque ha idea di cosa che prima si sarebbe? 71 00:03:13,950 --> 00:03:32,840 72 00:03:32,840 --> 00:03:34,860 Chiunque? 73 00:03:34,860 --> 00:03:36,270 Sì, è 42. 74 00:03:36,270 --> 00:03:39,200 Quindi, se vi ricordate, ogni dei luoghi in binario 75 00:03:39,200 --> 00:03:41,860 è fondamentalmente come 2 alla forza di quella posizione. 76 00:03:41,860 --> 00:03:43,750 >> In modo che primo spot è di 2 a 0 il potere. 77 00:03:43,750 --> 00:03:46,710 E abbiamo 0 lì, quindi non c'è niente. 78 00:03:46,710 --> 00:03:48,700 Il prossimo luogo è 2 alla prima accensione. 79 00:03:48,700 --> 00:03:51,220 E abbiamo un 1 lì, così che è fondamentalmente un 2. 80 00:03:51,220 --> 00:03:53,642 Il prossimo luogo è 2 a il secondo, che è 4. 81 00:03:53,642 --> 00:03:54,850 Non abbiamo nulla. 82 00:03:54,850 --> 00:03:59,390 Il prossimo luogo è più di 2 a il terzo, che sarebbe 8. 83 00:03:59,390 --> 00:04:02,230 E noi abbiamo uno lì. 84 00:04:02,230 --> 00:04:03,470 E noi continuiamo. 85 00:04:03,470 --> 00:04:07,720 Che last-- il più a uno a sinistra è dove abbiamo 32. 86 00:04:07,720 --> 00:04:13,437 E così, abbiamo praticamente abbiamo 32 più 8 più 2 per ottenere 42. 87 00:04:13,437 --> 00:04:14,020 Qualsiasi domanda? 88 00:04:14,020 --> 00:04:15,820 >> PUBBLICO: Qual è il pedice per? 89 00:04:15,820 --> 00:04:17,399 >> CAMILLE REKHSON: L'indice fondamentalmente ci dice che è binario. 90 00:04:17,399 --> 00:04:18,230 Quindi c'è un 2 lì. 91 00:04:18,230 --> 00:04:20,579 Se ci fosse like-- nel prossimo uno, o quando siamo conversione decimale 92 00:04:20,579 --> 00:04:24,350 a binario, c'è un 10 ci mostra che questo numero è originariamente in decimale. 93 00:04:24,350 --> 00:04:25,194 >> PUBBLICO: Grazie. 94 00:04:25,194 --> 00:04:26,110 >> CAMILLE REKHSON: Sì. 95 00:04:26,110 --> 00:04:28,790 Tutte le altre domande su quello? 96 00:04:28,790 --> 00:04:31,110 Ok, proviamo il prossimo uno poi, decimale a binario. 97 00:04:31,110 --> 00:04:35,034 Quindi, tenendo 50 e conclude che in binario. 98 00:04:35,034 --> 00:04:35,950 Come hai fatto? 99 00:04:35,950 --> 00:04:44,331 100 00:04:44,331 --> 00:04:45,317 Già. 101 00:04:45,317 --> 00:04:49,754 >> PUBBLICO: 110010. 102 00:04:49,754 --> 00:04:50,760 >> CAMILLE REKHSON: Sì. 103 00:04:50,760 --> 00:04:54,410 Così tra-- un modo semplice di pensare conversione da decimale a binario 104 00:04:54,410 --> 00:04:57,950 è a-- che spesso aiuta a scrivere ciò che i diversi potenze di 2 sono. 105 00:04:57,950 --> 00:05:01,460 E poi passare attraverso di essa, e vedere qualunque sia la più alta di quelli 106 00:05:01,460 --> 00:05:05,320 è che si può mettere in per il numero decimale senza andare su di esso. 107 00:05:05,320 --> 00:05:09,040 >> Quindi, in questo caso, uno dei le potenze di 2 è 32. 108 00:05:09,040 --> 00:05:10,560 Così 32 va in 50. 109 00:05:10,560 --> 00:05:14,100 Ma la successiva accensione sarebbe 64, che ovviamente non va bene in 50. 110 00:05:14,100 --> 00:05:16,343 Così la più alta che abbiamo è il 32. 111 00:05:16,343 --> 00:05:17,343 Il successivo fino a 16. 112 00:05:17,343 --> 00:05:20,140 E 32 oltre 16 è solo 48. 113 00:05:20,140 --> 00:05:21,350 In modo che si inserisce ancora nel 50. 114 00:05:21,350 --> 00:05:22,722 Così abbiamo 1 di sia di quelli. 115 00:05:22,722 --> 00:05:25,180 E poi se continuiamo a scendere, l'unica cosa che abbiamo bisogno di partiti 116 00:05:25,180 --> 00:05:27,510 è più 2 per ottenere 48-50. 117 00:05:27,510 --> 00:05:31,860 Allora abbiamo un 1 in quella posizione, e uno 0 nella ultima posizione. 118 00:05:31,860 --> 00:05:35,371 Perché non c'è niente in 2 al 0-esimo posto. 119 00:05:35,371 --> 00:05:37,120 Domande sulla conversione decimale a binario? 120 00:05:37,120 --> 00:05:40,830 121 00:05:40,830 --> 00:05:44,100 >> Così ora proviamo a fare qualche aggiunta binario. 122 00:05:44,100 --> 00:05:47,235 Come quando si aggiungono quei due in su? 123 00:05:47,235 --> 00:05:47,735 Già. 124 00:05:47,735 --> 00:05:51,130 >> PUBBLICO: 11100. 125 00:05:51,130 --> 00:05:52,110 >> CAMILLE REKHSON: Sì. 126 00:05:52,110 --> 00:05:55,540 Quindi, oltre a fare in binario è abbastanza molto simile a farlo in decimale. 127 00:05:55,540 --> 00:05:59,390 Tranne se si hanno due 1 dell'essere sommate, 1 più 1 è 2, 128 00:05:59,390 --> 00:06:02,980 ma 2 in binario è di 1 0. 129 00:06:02,980 --> 00:06:07,090 Quindi, si deve portare l'1, e mantenere portandola per le colonne di coppia. 130 00:06:07,090 --> 00:06:10,260 E a parte questo, è sufficiente aggiungere normalmente. 131 00:06:10,260 --> 00:06:13,125 Tutte le domande su questo? 132 00:06:13,125 --> 00:06:13,625 Già. 133 00:06:13,625 --> 00:06:16,487 >> PUBBLICO: Ci dispiace, che cosa è l'ultimo posto? 134 00:06:16,487 --> 00:06:18,475 C'è sei numeri. 135 00:06:18,475 --> 00:06:23,260 Così la colonna più a sinistra, quale valore si tratta? 136 00:06:23,260 --> 00:06:24,760 CAMILLE REKHSON: Su questo fondo? 137 00:06:24,760 --> 00:06:26,340 AUDIENCE: Sulla parte superiore uno, per 50. 138 00:06:26,340 --> 00:06:27,340 CAMILLE REKHSON: per 50? 139 00:06:27,340 --> 00:06:29,040 Oh, quindi quello più a sinistra è 32. 140 00:06:29,040 --> 00:06:29,760 >> PUBBLICO: 32? 141 00:06:29,760 --> 00:06:36,770 >> CAMILLE REKHSON: Sì, così sarebbe essere 32, 16, quindi 8, 4, 2, 1 o 0--. 142 00:06:36,770 --> 00:06:39,380 Beh, è ​​il 2 zeroth, che è 1. 143 00:06:39,380 --> 00:06:41,110 Già. 144 00:06:41,110 --> 00:06:43,834 Altre domande su questo? 145 00:06:43,834 --> 00:06:47,420 OK, allora stiamo andando a fare un po 'con esadecimale. 146 00:06:47,420 --> 00:06:49,570 Quindi questo potrebbe essere un po 'meno familiare, 147 00:06:49,570 --> 00:06:51,680 perché so che abbiamo fatto molto di più con binario. 148 00:06:51,680 --> 00:06:54,050 Ma un ottimo modo per pensare esadecimale 149 00:06:54,050 --> 00:06:57,540 è quello di rompere un binario numero in 4 pezzi bit. 150 00:06:57,540 --> 00:07:00,950 Poiché ogni 4 bit di un numero binario è fondamentalmente 151 00:07:00,950 --> 00:07:04,560 uno dei numeri esadecimali. 152 00:07:04,560 --> 00:07:07,420 >> Quindi, se abbiamo questa prima, abbiamo fondamentalmente otto 1 di. 153 00:07:07,420 --> 00:07:08,620 Così quelli può essere suddivisa up-- 154 00:07:08,620 --> 00:07:09,600 >> PUBBLICO: 255. 155 00:07:09,600 --> 00:07:10,933 >> CAMILLE REKHSON: Dire ancora una volta che. 156 00:07:10,933 --> 00:07:13,772 PUBBLICO: 255 in decimale, o 0xFF in esadecimale. 157 00:07:13,772 --> 00:07:14,980 CAMILLE REKHSON: Sì, lo è. 158 00:07:14,980 --> 00:07:18,860 Quindi, se si divise che fino in due blocchi di 4 bit, 159 00:07:18,860 --> 00:07:20,950 abbiamo praticamente abbiamo quattro serie di 1. 160 00:07:20,950 --> 00:07:22,880 Qual è il maximum-- fondamentalmente la massima 161 00:07:22,880 --> 00:07:24,329 possiamo ottenere con 4-bit in binario. 162 00:07:24,329 --> 00:07:27,120 E il massimo che potrebbe ottenere per che in esadecimale sarebbe un F. 163 00:07:27,120 --> 00:07:30,290 Così avremmo due F di. 164 00:07:30,290 --> 00:07:31,800 Tutte le domande su questo? 165 00:07:31,800 --> 00:07:32,490 Sì? 166 00:07:32,490 --> 00:07:35,184 >> PUBBLICO: Può ripetere. 167 00:07:35,184 --> 00:07:36,100 CAMILLE REKHSON: Certo. 168 00:07:36,100 --> 00:07:39,160 Così ogni, fondamentalmente, luogo di esadecimale è 169 00:07:39,160 --> 00:07:42,570 equivalente ai 4 bit di un binario. 170 00:07:42,570 --> 00:07:46,830 Quindi il modo più semplice per farlo è suddividerlo in blocchi di 4 bit. 171 00:07:46,830 --> 00:07:48,690 Quindi, in questo caso, abbiamo otto 1 di. 172 00:07:48,690 --> 00:07:51,010 Quindi, se ci dividiamo quelli in due blocchi di 4 bit, 173 00:07:51,010 --> 00:07:54,350 avremmo due gruppi di quattro 1 di. 174 00:07:54,350 --> 00:07:57,181 E ognuno di questi è equivalente a F. 175 00:07:57,181 --> 00:07:58,930 Se si pensa about-- So che i nostri cervelli sono 176 00:07:58,930 --> 00:08:00,415 tipo di wired per pensare più attraverso decimale, 177 00:08:00,415 --> 00:08:01,831 perché è quello a cui siamo abituati. 178 00:08:01,831 --> 00:08:06,030 Così un modo si potrebbe pensare ad esso come i quattro di 1 è pari al 15 in decimale. 179 00:08:06,030 --> 00:08:12,960 E 15 in esadecimale è F. Ecco, questo è un altro modo si può pensare attraverso di essa. 180 00:08:12,960 --> 00:08:13,459 Già. 181 00:08:13,459 --> 00:08:14,790 >> PUBBLICO: Qual è la 0x per? 182 00:08:14,790 --> 00:08:18,240 >> CAMILLE REKHSON: Il 0x indica che è esadecimale. 183 00:08:18,240 --> 00:08:21,900 Quindi abbiamo appena messo che prefisso lì, normalmente. 184 00:08:21,900 --> 00:08:24,396 Altre domande su questo. 185 00:08:24,396 --> 00:08:27,100 Ok, proviamo di andare il solo modo. 186 00:08:27,100 --> 00:08:28,712 In questo caso si have-- dispiace? 187 00:08:28,712 --> 00:08:29,628 PUBBLICO: [incomprensibile]. 188 00:08:29,628 --> 00:08:32,095 189 00:08:32,095 --> 00:08:33,720 CAMILLE REKHSON: Stiamo andando a binario. 190 00:08:33,720 --> 00:08:36,039 Così, andando nella direzione opposta. 191 00:08:36,039 --> 00:08:42,090 Ma in questo caso, abbiamo 5 e A. Quindi, se pensiamo a questo, 192 00:08:42,090 --> 00:08:46,260 se ciascuno di those-- il 5 e A sono entrambi andando a rappresentare un pezzo a 4 bit, 193 00:08:46,260 --> 00:08:49,003 come si direbbe 5 in binario? 194 00:08:49,003 --> 00:08:51,120 >> PUBBLICO: 0101. 195 00:08:51,120 --> 00:08:53,100 >> CAMILLE REKHSON: Sì, così che è la parte 0101. 196 00:08:53,100 --> 00:08:55,250 E poi come diresti A dentro-- 197 00:08:55,250 --> 00:08:56,910 >> PUBBLICO: 10. 198 00:08:56,910 --> 00:08:58,243 CAMILLE REKHSON: Dire it-- dispiace? 199 00:08:58,243 --> 00:08:58,990 PUBBLICO: 10. 200 00:08:58,990 --> 00:09:02,052 CAMILLE REKHSON: Sì, così questa è la seconda parte di essa. 201 00:09:02,052 --> 00:09:04,010 E allora, se si mette quei due insieme, che è 202 00:09:04,010 --> 00:09:06,440 come si ottiene il pieno binario per il esadecimale. 203 00:09:06,440 --> 00:09:06,940 Sì? 204 00:09:06,940 --> 00:09:10,620 >> PUBBLICO: sapere che un è 1010, devi memorizzarlo? 205 00:09:10,620 --> 00:09:12,460 Oppure si può like-- 206 00:09:12,460 --> 00:09:14,380 >> CAMILLE REKHSON: Quindi, se you-- il differe-- così 207 00:09:14,380 --> 00:09:16,790 quando stai passando binario, fondamentalmente binario 208 00:09:16,790 --> 00:09:20,550 ha da 0 a 9 e poi A attraverso F come i suoi 16 cose. 209 00:09:20,550 --> 00:09:25,420 Quindi, se fino a 0 se 9-- you-- 9 e poi A, fondamentalmente 210 00:09:25,420 --> 00:09:29,640 se abbiamo convertito in decimale, A sarebbe come 10, B sarebbe come 11. 211 00:09:29,640 --> 00:09:35,616 E se si pensa al binario 1010 è 8 e 2, 212 00:09:35,616 --> 00:09:37,990 perché quelli sono i due luoghi che aggiungono fino a 10, che 213 00:09:37,990 --> 00:09:41,820 è esattamente ciò che A è equivalente a. 214 00:09:41,820 --> 00:09:45,114 Ecco, questo è una specie di facile modo di pensare questo. 215 00:09:45,114 --> 00:09:46,405 Altre questioni su esadecimale. 216 00:09:46,405 --> 00:09:50,510 217 00:09:50,510 --> 00:09:56,870 >> OK, ora stiamo andando a prendere un guardare operatori bit a bit. 218 00:09:56,870 --> 00:09:58,882 Quindi questi può sicuramente venire sul quiz. 219 00:09:58,882 --> 00:10:00,590 So che non abbiamo lavorato con loro un sacco. 220 00:10:00,590 --> 00:10:02,756 Ma stiamo solo andando a fare una piccola recensione di questi. 221 00:10:02,756 --> 00:10:05,490 Così si spera questi saranno un po 'più familiare. 222 00:10:05,490 --> 00:10:10,220 Così i sei operatori bit a bit che abbiamo sono elencate qui. 223 00:10:10,220 --> 00:10:13,340 E ci hanno lasciato manipolare singoli bit. 224 00:10:13,340 --> 00:10:16,676 Così l'operatore è un singolo commerciale. 225 00:10:16,676 --> 00:10:18,550 Non confondere con quella il doppio e commerciale, 226 00:10:18,550 --> 00:10:21,840 che è il logico e che ci permette di confrontare due cose. 227 00:10:21,840 --> 00:10:25,860 >> Il singolo è E come possiamo manipolare le cose bit a bit. 228 00:10:25,860 --> 00:10:29,910 Quindi questo ci dà il risultato di 1 se entrambi degli argomenti che stiamo confrontando 229 00:10:29,910 --> 00:10:32,440 sono la stesso-- o sono 1. 230 00:10:32,440 --> 00:10:39,370 E la barra verticale, OR, darà us 1 se almeno uno di loro è 1. 231 00:10:39,370 --> 00:10:41,460 Quindi, in pratica esattamente ciò che le parole implicano. 232 00:10:41,460 --> 00:10:46,640 E, se i due bit sono 1, 1 e 1 ci dà 1. 233 00:10:46,640 --> 00:10:51,769 Ma con la O, se è 0 o 1, o 1 o 1, in entrambi i casi, 234 00:10:51,769 --> 00:10:53,060 abbiamo 1 come uno di loro. 235 00:10:53,060 --> 00:10:54,101 Allora ci sarebbe un 1. 236 00:10:54,101 --> 00:10:56,320 PUBBLICO: Che cosa vuoi dire che si dice dà 1? 237 00:10:56,320 --> 00:10:58,236 >> CAMILLE REKHSON: The risultato. Genere di, come voi 238 00:10:58,236 --> 00:11:05,060 would-- se avete fatto 0 e 1, il risultato che sarebbe 1-- o 0 239 00:11:05,060 --> 00:11:08,920 1 e del risultato che sarebbe 0, mi dispiace. 240 00:11:08,920 --> 00:11:12,190 Sì, è stato tipo di risultato dell'espressione. 241 00:11:12,190 --> 00:11:16,520 E poi, questo simbolo di accento circonflesso è la XOR o OR esclusivo. 242 00:11:16,520 --> 00:11:21,920 Quindi questo significa esclusivamente una o esattamente uno dei due argomenti è pari a 1. 243 00:11:21,920 --> 00:11:24,210 E poi darebbe 1. 244 00:11:24,210 --> 00:11:27,370 >> La piccola linea ondulata è l'operatore NOT. 245 00:11:27,370 --> 00:11:31,940 Quindi, a differenza del resto di loro, che operano su un paio di bit, 246 00:11:31,940 --> 00:11:34,930 l'operatore NOT richiede solo un bit, e capovolgerla. 247 00:11:34,930 --> 00:11:37,640 Quindi, se si give-- se lo fai NON 0, si darebbe 1. 248 00:11:37,640 --> 00:11:40,248 E SE NON 1, darebbe 0. 249 00:11:40,248 --> 00:11:40,748 Sì? 250 00:11:40,748 --> 00:11:41,150 >> PUBBLICO: Qual è la differenza tra l'OR con una linea 251 00:11:41,150 --> 00:11:41,983 e l'OR con due? 252 00:11:41,983 --> 00:11:44,430 253 00:11:44,430 --> 00:11:46,930 CAMILLE REKHSON: Così l'OR con due linee è la logica OR. 254 00:11:46,930 --> 00:11:52,430 Ecco, questo è per il confronto due interi pieni, o two-- 255 00:11:52,430 --> 00:11:53,730 per vedere se le cose sono uguali. 256 00:11:53,730 --> 00:11:58,340 O come fare questo è uguale a questo, O questo è uguale a questo tipo di cose. 257 00:11:58,340 --> 00:12:04,090 Considerando che il singolo bar o, è per fare le cose bit. 258 00:12:04,090 --> 00:12:04,590 Già. 259 00:12:04,590 --> 00:12:06,680 >> PUBBLICO: Che cosa si intende per bit per bit? 260 00:12:06,680 --> 00:12:10,330 >> CAMILLE REKHSON: Così bit funziona direttamente con i bit in binario. 261 00:12:10,330 --> 00:12:11,596 >> PUBBLICO: Oh, capisco. 262 00:12:11,596 --> 00:12:15,000 >> CAMILLE REKHSON: Sì, così lavorando con 0 e 1 di. 263 00:12:15,000 --> 00:12:18,310 Faremo un paio di esempi di questo dopo, solo così non è troppo confusa. 264 00:12:18,310 --> 00:12:20,970 E poi gli ultimi due sono il spostamento a sinistra e lo spostamento a destra. 265 00:12:20,970 --> 00:12:23,970 Quali sono sostanzialmente due meno segni o due maggiore di segni. 266 00:12:23,970 --> 00:12:26,294 E hanno spostato a bit il numero indicato di posti 267 00:12:26,294 --> 00:12:27,710 che si dà nella direzione. 268 00:12:27,710 --> 00:12:29,980 Quindi sarebbe o spostarlo a sinistra oa destra. 269 00:12:29,980 --> 00:12:30,480 Sì? 270 00:12:30,480 --> 00:12:32,470 PUBBLICO: Qual è la sintassi per l'esecuzione? 271 00:12:32,470 --> 00:12:33,950 >> CAMILLE REKHSON: Stiamo andando a passare attraverso un esempio in un secondo. 272 00:12:33,950 --> 00:12:35,680 Così si spera, che vi aiuterà. 273 00:12:35,680 --> 00:12:41,060 Tutte le domande sul proprio cosa succede qui, before-- OK. 274 00:12:41,060 --> 00:12:43,821 Quindi passando attraverso alcuni esempi. 275 00:12:43,821 --> 00:12:45,070 Cominciamo con AND quelli. 276 00:12:45,070 --> 00:12:47,880 Che cosa otterremmo se abbiamo fatto 0 E 1? 277 00:12:47,880 --> 00:12:48,899 >> PUBBLICO: 0. 278 00:12:48,899 --> 00:12:50,690 CAMILLE REKHSON: OK, e se abbiamo fatto 1, 1? 279 00:12:50,690 --> 00:12:51,622 PUBBLICO: 1. 280 00:12:51,622 --> 00:12:54,490 CAMILLE REKHSON: Sì, E se abbiamo fatto 0 O uno? 281 00:12:54,490 --> 00:12:55,094 PUBBLICO: 1. 282 00:12:55,094 --> 00:12:56,510 CAMILLE REKHSON: Che ne dite di 1 o 1? 283 00:12:56,510 --> 00:12:57,404 PUBBLICO: 1. 284 00:12:57,404 --> 00:13:00,410 CAMILLE REKHSON: OK, come su 0 XOR 1? 285 00:13:00,410 --> 00:13:01,380 PUBBLICO: 1. 286 00:13:01,380 --> 00:13:03,120 CAMILLE REKHSON: E 1 XOR 1? 287 00:13:03,120 --> 00:13:03,902 PUBBLICO: 0. 288 00:13:03,902 --> 00:13:05,360 CAMILLE REKHSON: Voi ragazzi siete bravi. 289 00:13:05,360 --> 00:13:06,510 Che ne dici di non 0? 290 00:13:06,510 --> 00:13:07,265 >> PUBBLICO: 1. 291 00:13:07,265 --> 00:13:08,390 CAMILLE REKHSON: E NON 1? 292 00:13:08,390 --> 00:13:09,602 PUBBLICO: 0. 293 00:13:09,602 --> 00:13:12,810 CAMILLE REKHSON: OK, e quindi questo ultimo uno è un piccolo con lo spostamento. 294 00:13:12,810 --> 00:13:18,700 Quindi, se inizialmente impostato x di essere 8, e allora y è x spostato a sinistra 3, 295 00:13:18,700 --> 00:13:19,760 quello che vorrei che ci danno? 296 00:13:19,760 --> 00:13:20,676 >> PUBBLICO: [incomprensibile]. 297 00:13:20,676 --> 00:13:22,817 298 00:13:22,817 --> 00:13:24,150 CAMILLE REKHSON: Dire ancora una volta che. 299 00:13:24,150 --> 00:13:26,740 PUBBLICO: [incomprensibile]. 300 00:13:26,740 --> 00:13:28,766 CAMILLE REKHSON: Quindi, questo in realtà ci dà 64. 301 00:13:28,766 --> 00:13:29,876 PUBBLICO: [incomprensibile]. 302 00:13:29,876 --> 00:13:32,250 CAMILLE REKHSON: Quindi io sono solo intenzione di scrivere questo qui, 303 00:13:32,250 --> 00:13:34,700 quindi questo rende un po 'di senso. 304 00:13:34,700 --> 00:13:45,120 Se abbiamo 2 a 0, 2 a 1, 2 a 2, da 2 a 3 sta per essere 8. 305 00:13:45,120 --> 00:13:52,380 E se vogliamo spostarlo altri 3 bit a fianco, che sarebbe 2 alla 4, 306 00:13:52,380 --> 00:13:57,270 2 a 5, e 2 alla 6, e 2 al 6 è 64. 307 00:13:57,270 --> 00:13:59,920 308 00:13:59,920 --> 00:14:01,110 Fa questo ha un senso? 309 00:14:01,110 --> 00:14:05,291 310 00:14:05,291 --> 00:14:05,791 Sì. 311 00:14:05,791 --> 00:14:08,725 >> Pubblico: fa che spostare tutti i 1 del e 0 del del numero binario a the-- 312 00:14:08,725 --> 00:14:09,600 >> CAMILLE REKHSON: Sì. 313 00:14:09,600 --> 00:14:12,150 314 00:14:12,150 --> 00:14:15,170 E non dovrete preoccuparvi sul quiz su questi essere negativo. 315 00:14:15,170 --> 00:14:19,510 Non faremo avete a che fare con spostamenti negativi in ​​alcun modo. 316 00:14:19,510 --> 00:14:24,070 Tutte le altre domande su questo? 317 00:14:24,070 --> 00:14:24,570 Sì. 318 00:14:24,570 --> 00:14:30,570 >> PUBBLICO: Se è lo spostamento a destra, è tutto ciò che wasn't-- tutto ciò che 319 00:14:30,570 --> 00:14:33,220 non era originariamente parte della cosa 0? 320 00:14:33,220 --> 00:14:37,110 >> CAMILLE REKHSON: Sì, si farebbe basta aggiungere 0 di sopra in originale. 321 00:14:37,110 --> 00:14:38,110 Già. 322 00:14:38,110 --> 00:14:41,540 >> PUBBLICO: Allora, qual è che il 100 spostato a destra per tre volte? 323 00:14:41,540 --> 00:14:43,290 CAMILLE REKHSON: 100 spostato a destra, 324 00:14:43,290 --> 00:14:46,057 in modo che avrebbe preso tutte le 1 e 0 e nel loro trasferimento 325 00:14:46,057 --> 00:14:48,515 a destra il numero di volte voi di spostare verso destra. 326 00:14:48,515 --> 00:14:50,452 >> PUBBLICO: [incomprensibile]? 327 00:14:50,452 --> 00:14:53,160 CAMILLE REKHSON: Beh, sono 100-- si parla di 100 in binario, 328 00:14:53,160 --> 00:14:53,910 o 100 in decimale? 329 00:14:53,910 --> 00:14:55,750 PUBBLICO: Mi dispiace, 100 in binario. 330 00:14:55,750 --> 00:14:58,916 >> CAMILLE REKHSON: 100 in binario, se si sposta alla destra- sopra 331 00:14:58,916 --> 00:15:01,040 se si sposta a destra una volta, sarebbe diventato 10. 332 00:15:01,040 --> 00:15:04,430 Se si sposta verso destra due volte, sarebbe diventato 001. 333 00:15:04,430 --> 00:15:07,590 E poi se si sposta di nuovo, è sorta di perdere bit. 334 00:15:07,590 --> 00:15:09,610 Sì, questo è solo 0. 335 00:15:09,610 --> 00:15:12,140 Altre domande su questo? 336 00:15:12,140 --> 00:15:12,835 Sì. 337 00:15:12,835 --> 00:15:14,695 >> PUBBLICO: Ecco che allora diventa 000. 338 00:15:14,695 --> 00:15:17,020 >> CAMILLE REKHSON: Sì. 339 00:15:17,020 --> 00:15:22,150 Ok, andiamo attraverso un po 'di matematica ASCII. 340 00:15:22,150 --> 00:15:25,120 Così i personaggi possono essenzialmente essere trattati come numeri interi 341 00:15:25,120 --> 00:15:28,290 in base ai loro valori ASCII. 342 00:15:28,290 --> 00:15:35,250 Quindi, se ci siamo seduti int A è uguale a 65, int B è uguale ad A + 1, int char C è uguale 343 00:15:35,250 --> 00:15:39,565 D meno 1, e salmerino D è uguale a 68, cosa stampare in fondo? 344 00:15:39,565 --> 00:15:46,150 345 00:15:46,150 --> 00:15:49,720 >> Quindi, stiamo stampando these-- benedire you-- siamo 346 00:15:49,720 --> 00:15:53,520 la stampa di questi tutti fuori come caratteri in base alla percentuale C. 347 00:15:53,520 --> 00:15:56,320 Quindi stiamo fondamentalmente stampare il valore del carattere di tutti e quattro 348 00:15:56,320 --> 00:15:58,600 di queste variabili. 349 00:15:58,600 --> 00:16:04,280 Come un suggerimento, 65 è il valore ASCII del capitale A. Forse che ci ha aiutato. 350 00:16:04,280 --> 00:16:04,780 Che cosa? 351 00:16:04,780 --> 00:16:05,530 >> PUBBLICO: ABCD. 352 00:16:05,530 --> 00:16:07,780 >> CAMILLE REKHSON: Sì, così questo sarebbe stampare esattamente 353 00:16:07,780 --> 00:16:10,290 ABCD perché abbiamo impostato int A pari al valore ASCII di A. 354 00:16:10,290 --> 00:16:13,085 Quindi, se il risultato della stampa che come un carattere, otteniamo appena maiuscola, 355 00:16:13,085 --> 00:16:15,540 A più 1 sarebbe una B maiuscola in ASCII. 356 00:16:15,540 --> 00:16:19,260 D meno 1 sarebbe la C maiuscola in ASCII. 357 00:16:19,260 --> 00:16:25,185 E 68 è il valore ASCII di D. Domande sulla ASCII? 358 00:16:25,185 --> 00:16:25,685 Sì. 359 00:16:25,685 --> 00:16:31,370 >> PUBBLICO: Quindi, le virgolette intorno A, fa che il cambiamento A ASCII? 360 00:16:31,370 --> 00:16:34,456 >> CAMILLE REKHSON: Si uses-- esso count-- virgolette intorno alla A 361 00:16:34,456 --> 00:16:35,330 rende un carattere. 362 00:16:35,330 --> 00:16:37,600 E se hai a che fare con nel numero di form-- 363 00:16:37,600 --> 00:16:40,320 così quando, come in questo caso, è essere trattata come un int-- 364 00:16:40,320 --> 00:16:44,664 allora sarebbe fare con il suo valore ASCII. 365 00:16:44,664 --> 00:16:45,164 Sì. 366 00:16:45,164 --> 00:16:50,060 >> PUBBLICO: Ti consigliamo di abbiamo una tabella di riferimento ASCII? 367 00:16:50,060 --> 00:16:51,900 >> CAMILLE REKHSON: Non think-- 368 00:16:51,900 --> 00:16:54,720 >> PUBBLICO: O sarebbe solo che fare con questi? 369 00:16:54,720 --> 00:16:56,210 >> CAMILLE REKHSON: Penso che abbiamo sarebbe farlo con le cose facili. 370 00:16:56,210 --> 00:16:58,168 Non credo che sarebbe male a scrivere forse 371 00:16:58,168 --> 00:17:02,653 cosa maiuscola e minuscola A sono, solo quali quelle gamme iniziano con. 372 00:17:02,653 --> 00:17:05,819 Ma non credo che avete bisogno di prendere tutto lo spazio per mettere un tavolo intero ASCII. 373 00:17:05,819 --> 00:17:06,803 Già. 374 00:17:06,803 --> 00:17:09,755 >> PUBBLICO: Qual è la differenza tra il dire int A e char C, 375 00:17:09,755 --> 00:17:12,720 come si fa in cima? 376 00:17:12,720 --> 00:17:17,380 >> CAMILLE REKHSON: Quindi è solo come che è memorizzato. 377 00:17:17,380 --> 00:17:20,010 Ma si può trattare in entrambi i modi. 378 00:17:20,010 --> 00:17:23,274 Come si vede qui, facciamo stampa la A come un carattere. 379 00:17:23,274 --> 00:17:24,690 PUBBLICO: Ecco lo stesso di A? 380 00:17:24,690 --> 00:17:25,606 CAMILLE REKHSON: Sì. 381 00:17:25,606 --> 00:17:28,030 382 00:17:28,030 --> 00:17:29,537 Qualsiasi altra domanda? 383 00:17:29,537 --> 00:17:32,022 >> PUBBLICO: Così, cento C sta dicendo stampare un char? 384 00:17:32,022 --> 00:17:33,016 >> CAMILLE REKHSON: Sì. 385 00:17:33,016 --> 00:17:35,501 >> PUBBLICO: Quindi, anche se A ha solo stato definito come un numero intero, 386 00:17:35,501 --> 00:17:37,569 se cerchiamo di stampare un char come 65, è would-- 387 00:17:37,569 --> 00:17:40,110 CAMILLE REKHSON: Sarebbe andare fondamentalmente va a tabella ASCII 388 00:17:40,110 --> 00:17:42,990 e ottiene qualunque personaggi nel grafico ASCII per quel 65. 389 00:17:42,990 --> 00:17:43,840 >> PUBBLICO: Grazie. 390 00:17:43,840 --> 00:17:44,756 >> CAMILLE REKHSON: Sì. 391 00:17:44,756 --> 00:17:45,445 Sì? 392 00:17:45,445 --> 00:17:50,620 >> PUBBLICO: Quindi, se avete fatto% I,% I, % I,% I, sarebbe solo print-- 393 00:17:50,620 --> 00:17:52,620 CAMILLE REKHSON: Sì, se hai fatto tutto 4% del I, 394 00:17:52,620 --> 00:17:57,170 sarebbe stampare il ASCII valori di tutti e quattro questi. 395 00:17:57,170 --> 00:17:59,483 Qualsiasi altra domanda? 396 00:17:59,483 --> 00:18:06,310 OK, così ambito, in fondo questo ci aiuta a determinare dove 397 00:18:06,310 --> 00:18:08,450 una variabile esiste nel vostro programma. 398 00:18:08,450 --> 00:18:11,910 Così abbiamo parlato di due diversi tipi di ambito, globali e locali. 399 00:18:11,910 --> 00:18:14,560 >> Se una variabile è ambito a livello globale, significa che l'intero programma 400 00:18:14,560 --> 00:18:16,292 ha accesso a quella variabile. 401 00:18:16,292 --> 00:18:18,000 E se a livello globale ambito di una variabile, è 402 00:18:18,000 --> 00:18:19,510 dichiararlo prima della funzione principale. 403 00:18:19,510 --> 00:18:20,830 Così è fatto bene fuori del blocco. 404 00:18:20,830 --> 00:18:22,950 E poi tutta la tua programma può accedervi. 405 00:18:22,950 --> 00:18:26,070 >> Se è ambito solo localmente, che variabili confinata in una regione specifica. 406 00:18:26,070 --> 00:18:29,705 Quindi, se si dichiara all'interno di un ciclo for, solo che per il ciclo può accedervi. 407 00:18:29,705 --> 00:18:31,580 Oppure, se si dichiara in una funzione specifica, 408 00:18:31,580 --> 00:18:34,940 solo che funzione può accedervi. 409 00:18:34,940 --> 00:18:38,265 Domande sulla portata. 410 00:18:38,265 --> 00:18:41,570 >> OK, così la funzione di prototipazione. 411 00:18:41,570 --> 00:18:45,360 Fondamentalmente perché C, quando si compila, si legge dall'alto verso il basso. 412 00:18:45,360 --> 00:18:48,800 Se si dichiara una funzione ritardo nel codice, 413 00:18:48,800 --> 00:18:51,670 il compilatore non sa che tale funzione esiste. 414 00:18:51,670 --> 00:18:55,690 Quindi ciò che usiamo sono prototipi, che sostanzialmente dicono al compilatore, 415 00:18:55,690 --> 00:18:58,710 questa funzione esiste, andare a cercare per lo più tardi nel codice. 416 00:18:58,710 --> 00:19:00,900 Quindi il modo di fare un prototipo di funzione 417 00:19:00,900 --> 00:19:03,020 è esattamente come si inizia off scrivere una funzione. 418 00:19:03,020 --> 00:19:05,310 Si dà il tipo di ritorno, il nome della funzione, 419 00:19:05,310 --> 00:19:08,930 e poi ogni argomento che tale funzione richiede. 420 00:19:08,930 --> 00:19:13,970 >> Così, per guardare un esempio veloce, in questo caso la nostra funzione che stiamo usando qui 421 00:19:13,970 --> 00:19:15,340 è fondamentalmente una funzione cubo. 422 00:19:15,340 --> 00:19:19,170 Quindi, tenendo in un numero intero e restituendo il cubo di quel numero intero. 423 00:19:19,170 --> 00:19:23,190 Quindi perché abbiamo scritto che funzione sotto la funzione principale, 424 00:19:23,190 --> 00:19:26,300 e vogliamo usare il Uscita di che-- o noi 425 00:19:26,300 --> 00:19:28,630 vuole che la funzione nella nostra funzione principale, 426 00:19:28,630 --> 00:19:31,980 abbiamo messo la sua strada prototipo nella parte superiore del nostro programma. 427 00:19:31,980 --> 00:19:34,460 E poi, quando chiamiamo nella nostra funzione principale, 428 00:19:34,460 --> 00:19:38,800 il compilatore sa che tale funzione è scritta più tardi, e che andare a cercare per esso, 429 00:19:38,800 --> 00:19:40,910 e userà correttamente. 430 00:19:40,910 --> 00:19:45,190 Domande sulla prototipazione? 431 00:19:45,190 --> 00:19:45,690 Sì. 432 00:19:45,690 --> 00:19:46,940 >> PUBBLICO: Allora, qual è il punto? 433 00:19:46,940 --> 00:19:49,374 434 00:19:49,374 --> 00:19:50,915 Non capisco il punto di prototipazione. 435 00:19:50,915 --> 00:19:52,820 Perché non basta avere laggiù? 436 00:19:52,820 --> 00:19:54,903 >> CAMILLE REKHSON: Beh, se è qui, poi, quando 437 00:19:54,903 --> 00:19:57,020 si arriva alla linea cubo x nella funzione principale, 438 00:19:57,020 --> 00:19:59,495 il compilatore non hanno idea che la funzione del cubo esiste realmente. 439 00:19:59,495 --> 00:20:01,310 >> PUBBLICO: Non potresti appena messo di fronte? 440 00:20:01,310 --> 00:20:02,350 >> CAMILLE REKHSON: E ' una migliore pratica di codifica 441 00:20:02,350 --> 00:20:04,150 di mettere sotto la funzione principale. 442 00:20:04,150 --> 00:20:06,350 Ecco, questo è il motivo per cui ci sarebbe fare la prototipazione. 443 00:20:06,350 --> 00:20:07,680 Solo perché, se si aveva un sacco di funzioni, 444 00:20:07,680 --> 00:20:10,180 sarebbe davvero disordinato a leggere tutte quelle funzioni 445 00:20:10,180 --> 00:20:12,030 prima di arrivare alla carne del vostro programma. 446 00:20:12,030 --> 00:20:13,888 Gia ', e hai avuto un q-- 447 00:20:13,888 --> 00:20:16,796 >> PUBBLICO: Così, si dichiara la variabile nella parte superiore 448 00:20:16,796 --> 00:20:18,795 in modo da potervi accedere, farne una variabile globale? 449 00:20:18,795 --> 00:20:21,119 È che simile a questo dove è dichiarandolo 450 00:20:21,119 --> 00:20:23,660 lassù, in modo che sappia che sta andando per accedere in un secondo momento 451 00:20:23,660 --> 00:20:24,762 e si può utilizzare? 452 00:20:24,762 --> 00:20:26,146 >> CAMILLE REKHSON: Sì. 453 00:20:26,146 --> 00:20:26,646 Sì. 454 00:20:26,646 --> 00:20:30,414 >> PUBBLICO: Dovrebbe the-- qualsiasi ulteriore funzioni che creano chiave al di fuori 455 00:20:30,414 --> 00:20:31,840 di questa cosa, or-- 456 00:20:31,840 --> 00:20:33,760 >> CAMILLE REKHSON: Sì, se siete la creazione di altro principale functions-- 457 00:20:33,760 --> 00:20:36,385 è di per sé il function-- quindi se si sta creando altre funzioni, 458 00:20:36,385 --> 00:20:37,555 devono essere al di fuori. 459 00:20:37,555 --> 00:20:38,055 Sì? 460 00:20:38,055 --> 00:20:39,734 >> PUBBLICO: Che percentuale D? 461 00:20:39,734 --> 00:20:42,150 CAMILLE REKHSON: Percentuale D è la stessa cosa di cento I. 462 00:20:42,150 --> 00:20:45,915 Si riferisce ad un numero intero. 463 00:20:45,915 --> 00:20:47,895 Sì. 464 00:20:47,895 --> 00:20:50,370 >> PUBBLICO: Allora, qual è int FARE principale? 465 00:20:50,370 --> 00:20:51,724 Qual era quel vuoto? 466 00:20:51,724 --> 00:20:53,890 CAMILLE REKHSON: Void dice ci vuole in alcun argomento. 467 00:20:53,890 --> 00:20:55,320 PUBBLICO: [incomprensibile]. 468 00:20:55,320 --> 00:20:57,570 CAMILLE REKHSON: Può voi parlare un po 'più forte, mi dispiace? 469 00:20:57,570 --> 00:21:00,153 PUBBLICO: Sì, mi dispiace, perché ha fatto si mette annullare per il primo, 470 00:21:00,153 --> 00:21:02,297 e poi int ingresso per il secondo? 471 00:21:02,297 --> 00:21:04,720 472 00:21:04,720 --> 00:21:07,470 CAMILLE REKHSON: Oh, per i due different-- per la funzione principale 473 00:21:07,470 --> 00:21:09,290 contro la funzione del cubo? 474 00:21:09,290 --> 00:21:13,360 Così nella funzione principale, usiamo nulla perché non c'è 475 00:21:13,360 --> 00:21:16,870 sono parametri che possono prendere in. 476 00:21:16,870 --> 00:21:19,425 Mentre nel cubo la funzione, abbiamo un input. 477 00:21:19,425 --> 00:21:22,300 Ecco perché si dice int, ingresso, perché ci sono argomenti che siamo 478 00:21:22,300 --> 00:21:24,571 prendendo per eseguire la nostra funzione. 479 00:21:24,571 --> 00:21:25,070 Già. 480 00:21:25,070 --> 00:21:27,770 481 00:21:27,770 --> 00:21:30,464 Sono ci sono domande? 482 00:21:30,464 --> 00:21:34,520 >> OK, e poi rapidamente virgola mobile imprecisioni. 483 00:21:34,520 --> 00:21:37,200 Così abbiamo infiniti numeri reali. 484 00:21:37,200 --> 00:21:38,950 Ma ci sono solo un numero finito di bit 485 00:21:38,950 --> 00:21:42,880 che possiamo utilizzare per visualizzare quelli numeri, e li rappresentano. 486 00:21:42,880 --> 00:21:45,020 Allora si finisce con alcune imprecisioni. 487 00:21:45,020 --> 00:21:49,190 E i numeri non lo farà sempre essere abbastanza esattamente cosa 488 00:21:49,190 --> 00:21:51,810 si pensa che sono quando sei trattare con virgola mobile. 489 00:21:51,810 --> 00:21:53,650 Questo è solo qualcosa di buono a sapersi. 490 00:21:53,650 --> 00:21:56,628 Domande su questo? 491 00:21:56,628 --> 00:21:59,610 Sì. 492 00:21:59,610 --> 00:22:02,090 >> PUBBLICO: È questo riferimento all'idea di bit di overflow 493 00:22:02,090 --> 00:22:03,089 che era in conferenza? 494 00:22:03,089 --> 00:22:06,080 Era che qualcosa di separato? 495 00:22:06,080 --> 00:22:09,650 >> CAMILLE REKHSON: Sono completamente separato, sì. 496 00:22:09,650 --> 00:22:11,160 Ok fantastico. 497 00:22:11,160 --> 00:22:16,369 498 00:22:16,369 --> 00:22:17,452 Pulak GOYAL: Hi, everyone. 499 00:22:17,452 --> 00:22:19,872 Il mio nome è Pulak, e io essere andare oltre i puntatori. 500 00:22:19,872 --> 00:22:23,260 501 00:22:23,260 --> 00:22:25,720 OK, quindi cerchiamo di pensare prima su ciò che la memoria assomiglia. 502 00:22:25,720 --> 00:22:28,610 Quindi, come potete vedere qui, abbiamo prendere la memoria e ci dividiamo in su 503 00:22:28,610 --> 00:22:30,090 in un gruppo di blocchi. 504 00:22:30,090 --> 00:22:33,150 E referenziamo ogni bloccare da un indirizzo, giusto? 505 00:22:33,150 --> 00:22:37,196 E qualcuno si ricorda che tipo di notazione che usiamo per indicare un indirizzo? 506 00:22:37,196 --> 00:22:38,510 >> PUBBLICO: esadecimale, 0X. 507 00:22:38,510 --> 00:22:39,510 >> Pulak GOYAL: esadecimale, giusto? 508 00:22:39,510 --> 00:22:41,509 Così il 0X significa che siamo parlando esadecimale. 509 00:22:41,509 --> 00:22:45,740 510 00:22:45,740 --> 00:22:48,360 OK, così come possiamo creare puntatori? 511 00:22:48,360 --> 00:22:51,960 Così prendiamo il tipo, abbiamo mettere it-- aggiungere una stella ad esso, 512 00:22:51,960 --> 00:22:53,760 e poi aggiungiamo il nome della variabile. 513 00:22:53,760 --> 00:22:59,280 Così gli esempi che abbiamo visto sono int stella x, y char stella, e galleggiare iniziano z. 514 00:22:59,280 --> 00:23:01,380 Così, quando dico int stelle x, qualcuno può dirmi 515 00:23:01,380 --> 00:23:03,965 quello che sto tipo di parlare di lì? 516 00:23:03,965 --> 00:23:05,710 >> Pubblico: La posizione del disco. 517 00:23:05,710 --> 00:23:06,890 >> Pulak GOYAL: Ci dispiace, che cosa? 518 00:23:06,890 --> 00:23:07,723 Puoi ripetere? 519 00:23:07,723 --> 00:23:09,250 PUBBLICO: La posizione del disco. 520 00:23:09,250 --> 00:23:12,390 >> Pulak GOYAL: Così actually-- così che cosa Volevo dire, è quando abbiamo int stella x, 521 00:23:12,390 --> 00:23:14,400 stiamo dicendo è la creazione di un puntatore, e 522 00:23:14,400 --> 00:23:17,130 può memorizzare l'indirizzo di un variabile che è un int, giusto? 523 00:23:17,130 --> 00:23:21,810 Quindi, con char stella y, stiamo creando un puntatore 524 00:23:21,810 --> 00:23:24,220 che può memorizzare l'indirizzo di una variabile che è un char. 525 00:23:24,220 --> 00:23:26,270 In modo che ha senso a tutti? 526 00:23:26,270 --> 00:23:29,600 Ok bello 527 00:23:29,600 --> 00:23:33,450 >> OK, così con i puntatori, ci sono due operazioni importanti che possiamo fare. 528 00:23:33,450 --> 00:23:36,630 C'è riferimento, e c'è dereferencing. 529 00:23:36,630 --> 00:23:37,130 Sì? 530 00:23:37,130 --> 00:23:38,760 >> PUBBLICO: Potrebbe andare un po 'più lento? 531 00:23:38,760 --> 00:23:39,510 >> Pulak GOYAL: Certo. 532 00:23:39,510 --> 00:23:45,350 Sì, so-- Sì, fare domande come vado lungo se you-- se qualcosa non è chiaro. 533 00:23:45,350 --> 00:23:47,240 Così abbiamo referenziamento e dereferencing. 534 00:23:47,240 --> 00:23:51,680 Quindi, quando si vuole ottenere l'indirizzo di una variabile, quindi utilizzare la e commerciale. 535 00:23:51,680 --> 00:23:53,620 Quindi diciamo che ho dichiarato int x da qualche parte. 536 00:23:53,620 --> 00:23:57,450 E voglio ottenere l'indirizzo di quel e passarlo in, farei commerciale x. 537 00:23:57,450 --> 00:24:01,260 E quando si desidera ottenere la valore associato con un puntatore, 538 00:24:01,260 --> 00:24:04,670 si utilizza il dereference operatore, che è una stella. 539 00:24:04,670 --> 00:24:08,570 >> Quindi, consente di dire che ho avuto int stella x, e Ho avuto indicando qualcosa. 540 00:24:08,570 --> 00:24:13,510 Se voglio ottenere il valore di ciò che è indicando, vorrei solo fare stella x. 541 00:24:13,510 --> 00:24:14,960 È chiaro? 542 00:24:14,960 --> 00:24:16,390 Tutte le domande di questo? 543 00:24:16,390 --> 00:24:18,129 Già. 544 00:24:18,129 --> 00:24:25,275 >> PUBBLICO: Quindi in generale, è non sarà in grado di fare in x e stella 545 00:24:25,275 --> 00:24:27,135 x con lo stesso x. 546 00:24:27,135 --> 00:24:28,740 Questo è corretto? 547 00:24:28,740 --> 00:24:31,800 Perché se x è un variabile, allora hai 548 00:24:31,800 --> 00:24:35,980 a fare in x per ottenere che si tratta di un puntatore. 549 00:24:35,980 --> 00:24:40,810 Ma se x è un puntatore, allora avete bisogno fare stella x per ottenere la variabile. 550 00:24:40,810 --> 00:24:43,240 >> Pulak GOYAL: Sì, in modo che il domanda era su quando 551 00:24:43,240 --> 00:24:45,750 usiamo un star-- quando useresti la stella, 552 00:24:45,750 --> 00:24:47,470 e quando usiamo la commerciale, e possiamo 553 00:24:47,470 --> 00:24:49,160 usare con lo stesso tipo di variabile? 554 00:24:49,160 --> 00:24:51,810 Quindi, di solito se avete, per esempio, un int x, 555 00:24:51,810 --> 00:24:55,170 si sarebbe per lo più utilizzare il commerciale per ottenere l'indirizzo di questo. 556 00:24:55,170 --> 00:24:58,220 Poiché non fa senso di deferenza in x. 557 00:24:58,220 --> 00:25:04,220 Considerando che, se avessimo int stella x, si sarebbe utilizzato il funzionamento dereference 558 00:25:04,220 --> 00:25:07,910 perché non avrebbe senso utilizzare in x in quel caso. 559 00:25:07,910 --> 00:25:09,582 Fa questo ha un senso? 560 00:25:09,582 --> 00:25:13,192 >> PUBBLICO: così non si può e, quindi un puntatore? 561 00:25:13,192 --> 00:25:14,900 Pulak GOYAL: Così si tecnicamente, in realtà 562 00:25:14,900 --> 00:25:16,870 può fare la e commerciale di un puntatore. 563 00:25:16,870 --> 00:25:18,984 Ma questo è fuori dalla ambito di questa classe. 564 00:25:18,984 --> 00:25:21,900 Per la purpose-- per i vostri ragazzi ' scopi, ogni volta che si hanno puntatori, 565 00:25:21,900 --> 00:25:25,191 si desidera utilizzare l'operatore dereference per ottenere il valore associato a tale. 566 00:25:25,191 --> 00:25:27,380 E quando si hanno regolare variabili, come un int x, 567 00:25:27,380 --> 00:25:31,410 si desidera utilizzare la e commerciale operatore per ottenere l'indirizzo di questo. 568 00:25:31,410 --> 00:25:31,910 ok? 569 00:25:31,910 --> 00:25:35,670 570 00:25:35,670 --> 00:25:38,850 >> Ok, diamo un'occhiata a puntatori e cosa succede sotto il cofano. 571 00:25:38,850 --> 00:25:42,640 Quindi la prima cosa che ho fatto qui è l'int dichiarato x è uguale a 5. 572 00:25:42,640 --> 00:25:48,460 L'indirizzo di questa variabile è 0x04, e il valore è 5. 573 00:25:48,460 --> 00:25:52,940 Quindi vediamo cosa succede con la riga successiva. 574 00:25:52,940 --> 00:25:55,130 Così ora si dichiara un puntatore. 575 00:25:55,130 --> 00:26:01,450 Il suo indirizzo è 0x08, e la sua valore è l'indirizzo di x. 576 00:26:01,450 --> 00:26:05,220 Questo fa senso per tutti? 577 00:26:05,220 --> 00:26:06,507 Tutte le domande di questo? 578 00:26:06,507 --> 00:26:09,130 579 00:26:09,130 --> 00:26:13,080 >> OK, e ora vediamo cosa accade con la riga successiva. 580 00:26:13,080 --> 00:26:18,140 Quindi, con questa riga successiva, abbiamo l'indirizzo della copia essere 0x10, 581 00:26:18,140 --> 00:26:20,780 e il suo valore è 5. 582 00:26:20,780 --> 00:26:23,570 Quindi la ragione abbiamo ottenuto cinque è abbiamo detto, dereferenziare 583 00:26:23,570 --> 00:26:26,740 puntatore, che abbiamo dichiarato un int stella. 584 00:26:26,740 --> 00:26:35,797 E così went-- quando abbiamo dereferenziarlo, ha detto, bene, ciò che è nello slot 0x04. 585 00:26:35,797 --> 00:26:36,630 Ed è andato a quello. 586 00:26:36,630 --> 00:26:40,785 E che x è un x0-- 0x04, e il valore è 5. 587 00:26:40,785 --> 00:26:41,660 Questo fa senso? 588 00:26:41,660 --> 00:26:42,334 Sì? 589 00:26:42,334 --> 00:26:50,090 >> PUBBLICO: Perché è l'indirizzo della copia a soli 4 byte sopra il puntatore x? 590 00:26:50,090 --> 00:26:52,318 >> Pulak GOYAL: Sì, questo è un errore on-- 591 00:26:52,318 --> 00:26:55,304 >> CAMILLE REKHSON: Quindi, sì, ricordo questo è scritto in esadecimale. 592 00:26:55,304 --> 00:26:56,220 Pulak GOYAL: Oh, sì. 593 00:26:56,220 --> 00:26:58,615 CAMILLE REKHSON: Quindi questo è in realtà 8 e poi 16 594 00:26:58,615 --> 00:27:00,960 perché abbiamo detto che, il puntatore, ricorda, 595 00:27:00,960 --> 00:27:05,330 nel nostro IDE sta per essere lungo 8 byte. 596 00:27:05,330 --> 00:27:06,080 Pulak GOYAL: Sì. 597 00:27:06,080 --> 00:27:09,160 598 00:27:09,160 --> 00:27:12,540 Quindi, solo per essere chiari, puntatori sono lunghi 8 byte. 599 00:27:12,540 --> 00:27:14,160 Un int è di 4 byte. 600 00:27:14,160 --> 00:27:18,380 Quindi la ragione per cui ciò saltato da 0x04 a 0x08 601 00:27:18,380 --> 00:27:20,980 è perché abbiamo dovuto fare un salto di 8 byte. 602 00:27:20,980 --> 00:27:24,396 E poi siccome for-- copia è solo un int, 603 00:27:24,396 --> 00:27:26,020 è 4 byte, che è la metà di 8 byte. 604 00:27:26,020 --> 00:27:29,970 Così abbiamo appena saltiamo a 0x10, che è due di distanza da 0x08. 605 00:27:29,970 --> 00:27:33,100 606 00:27:33,100 --> 00:27:34,570 Qualsiasi altra domanda? 607 00:27:34,570 --> 00:27:36,850 OK, let's-- sì? 608 00:27:36,850 --> 00:27:39,245 >> PUBBLICO: Perché non è il valore di int copia 609 00:27:39,245 --> 00:27:45,000 solo the-- perché è 5 invece di 0x04? 610 00:27:45,000 --> 00:27:46,270 >> Pulak GOYAL: OK, perché è 5? 611 00:27:46,270 --> 00:27:51,600 OK, così quando the-- così di lasciare prima pensare a questo in termini di tipi. 612 00:27:51,600 --> 00:27:55,600 Così sto dicendo int copia è pari a puntatore stella. 613 00:27:55,600 --> 00:27:57,490 Allora, qual è il tipo di puntatore? 614 00:27:57,490 --> 00:27:59,310 È un int stella. 615 00:27:59,310 --> 00:28:03,850 E quando ho dereferenziare che, il tipo diventa un int. 616 00:28:03,850 --> 00:28:06,570 Allora, cosa ci aspettiamo di memorizzare qui è in realtà un int. 617 00:28:06,570 --> 00:28:07,965 Questo fa senso? 618 00:28:07,965 --> 00:28:09,090 PUBBLICO: Certo, un po '. 619 00:28:09,090 --> 00:28:11,465 Pulak GOYAL: Così, di solito quando si pensa in termini di tipi, 620 00:28:11,465 --> 00:28:15,607 esso aiuta a capire che cosa è il tipo del valore che dovrebbe andare lì. 621 00:28:15,607 --> 00:28:17,940 Così di solito si può escludere molti di questi errori comuni 622 00:28:17,940 --> 00:28:21,790 pensando in termini di tipi. 623 00:28:21,790 --> 00:28:23,612 Lasciami andare attraverso un po 'più diapositive. 624 00:28:23,612 --> 00:28:26,070 E possiamo ottenere domande a la fine della sezione puntatore. 625 00:28:26,070 --> 00:28:28,910 626 00:28:28,910 --> 00:28:32,290 OK, così abbiamo un programma buggy qui. 627 00:28:32,290 --> 00:28:35,460 E così fa anyone-- qualcuno può dire me ciò che è sbagliato con questo programma? 628 00:28:35,460 --> 00:28:39,000 629 00:28:39,000 --> 00:28:40,820 Giusto, quindi quello che siamo aspettandosi di fare qui 630 00:28:40,820 --> 00:28:44,520 è-- quello che vogliamo fare è prendere la variabile int x 631 00:28:44,520 --> 00:28:48,350 e girare it-- renderlo uguale 5 invece di 3 e quindi stampare quello. 632 00:28:48,350 --> 00:28:49,640 Ma questo non sta accadendo. 633 00:28:49,640 --> 00:28:50,950 Qualcuno può dirmi perché? 634 00:28:50,950 --> 00:28:51,934 Sì? 635 00:28:51,934 --> 00:28:54,840 >> AUDIENCE: Quando la funzione to_five prende x come è argomento, 636 00:28:54,840 --> 00:28:58,130 non ci vuole x sé, ma invece crea una copia, un, di esso. 637 00:28:58,130 --> 00:29:00,115 E costituisce operazioni su questo. 638 00:29:00,115 --> 00:29:02,614 Ma a causa di questo, non è necessario modificare il valore effettivo di x. 639 00:29:02,614 --> 00:29:03,970 Dal momento che sei [incomprensibile]. 640 00:29:03,970 --> 00:29:07,950 >> Pulak GOYAL: Destra, a destra, in modo che quando chiamiamo 641 00:29:07,950 --> 00:29:10,100 la funzione to_five, cosa stiamo facendo è il pensiero, 642 00:29:10,100 --> 00:29:12,550 darmi una copia del valore di tale funzione. 643 00:29:12,550 --> 00:29:16,010 Tale funzione, poi, sta andando e facendo alcune manipolazioni. 644 00:29:16,010 --> 00:29:21,260 Ma una volta ritorna, è ora fuori del campo di applicazione della funzione principale qui. 645 00:29:21,260 --> 00:29:24,750 E così x è ancora, infatti, pari a 3, e stampiamo 3. 646 00:29:24,750 --> 00:29:26,445 Ok, e vediamo come questo accade. 647 00:29:26,445 --> 00:29:29,430 648 00:29:29,430 --> 00:29:31,180 >> OK, quindi non c'è niente dichiarato. 649 00:29:31,180 --> 00:29:34,490 Quindi, qui, x è pari a 3. 650 00:29:34,490 --> 00:29:40,820 E ora è-- alla posizione due, una non è ancora portata. 651 00:29:40,820 --> 00:29:46,790 E adesso andiamo a posizionare tre, dove una ormai assume il valore di 3. 652 00:29:46,790 --> 00:29:49,380 Alle quattro, ora cambiamo una a 5. 653 00:29:49,380 --> 00:29:53,290 Ma ora, quando salto indietro a cinque, che è l'istruzione print, 654 00:29:53,290 --> 00:29:55,380 a è ormai fuori portata. 655 00:29:55,380 --> 00:29:57,450 E X è ancora pari a 3. 656 00:29:57,450 --> 00:29:59,700 Questo senso per tutti? 657 00:29:59,700 --> 00:30:03,010 OK, ora parliamo di come possiamo utilizzare i puntatori per risolvere questo problema. 658 00:30:03,010 --> 00:30:06,140 Qualcuno ha qualche idea su come noi potrebbe risolvere questo problema utilizzando puntatori? 659 00:30:06,140 --> 00:30:08,710 660 00:30:08,710 --> 00:30:11,490 >> PUBBLICO: si prende in un int stella invece di un int per to_five. 661 00:30:11,490 --> 00:30:12,530 >> Pulak GOYAL: Siamo spiacenti, si potrebbe parlare? 662 00:30:12,530 --> 00:30:15,266 >> PUBBLICO: si prende in un int stella invece di un int per to_five. 663 00:30:15,266 --> 00:30:16,140 Pulak GOYAL: OK, sì. 664 00:30:16,140 --> 00:30:20,250 Quindi cerchiamo di pass-- invece di passare solo il valore, passiamo per riferimento. 665 00:30:20,250 --> 00:30:21,690 Questa nuova funzione, giusto? 666 00:30:21,690 --> 00:30:25,210 E così facendo passare l'indirizzo, abbiamo può fare manipolazioni sull'indirizzo. 667 00:30:25,210 --> 00:30:27,400 E così siamo in realtà, infatti, cambiando x. 668 00:30:27,400 --> 00:30:30,570 Vediamo quindi come funziona. 669 00:30:30,570 --> 00:30:32,950 >> Ok, quindi in questo esempio abbiamo riparato. 670 00:30:32,950 --> 00:30:38,000 Abbiamo cambiato la nostra firma di to_five a prendere in un int 671 00:30:38,000 --> 00:30:40,540 protagonista invece di un int qui. 672 00:30:40,540 --> 00:30:45,470 Poi abbiamo dereference questo un 5 e assegnare ad esso. 673 00:30:45,470 --> 00:30:48,090 E ora questo sarà, infatti, stampa 5. 674 00:30:48,090 --> 00:30:51,960 Così vediamo come le fasi di lavoro qui. 675 00:30:51,960 --> 00:30:55,200 >> Quindi, con il primo passo, non c'è nulla ancora dichiarata. 676 00:30:55,200 --> 00:31:00,140 Così qui, con la seconda fase, abbiamo detto x è uguale a 3, 677 00:31:00,140 --> 00:31:03,970 ma una è ancora fuori portata. 678 00:31:03,970 --> 00:31:08,100 Ora, per la terza linea, abbiamo x è ancora pari a tre. 679 00:31:08,100 --> 00:31:14,150 E ora, abbiamo superato dentro-- ciò che è memorizzato in un ora l'indirizzo di x. 680 00:31:14,150 --> 00:31:16,760 Questo fa senso tutti, come siamo arrivati ​​che? 681 00:31:16,760 --> 00:31:21,470 A destra, abbiamo la amper-- è così che abbiamo passato una e commerciale x alla funzione 682 00:31:21,470 --> 00:31:23,040 to_five. 683 00:31:23,040 --> 00:31:30,330 E poi alla riga successiva, cosa che facciamo, è noi dereferenziare a. 684 00:31:30,330 --> 00:31:36,120 >> E dereferenziando una, siamo in grado modificare il valore di x da 3 a 5. 685 00:31:36,120 --> 00:31:38,560 Perché x vive a quell'indirizzo 0x12. 686 00:31:38,560 --> 00:31:42,440 687 00:31:42,440 --> 00:31:45,810 E poi, alla fine, quando torniamo indietro a principale, 688 00:31:45,810 --> 00:31:50,570 Anche se questo è un ormai fuori ambito, abbiamo, infatti, cambiato x. 689 00:31:50,570 --> 00:31:51,570 Ed è 5. 690 00:31:51,570 --> 00:31:55,160 Avete domande su questo? 691 00:31:55,160 --> 00:31:56,036 Sì? 692 00:31:56,036 --> 00:31:58,185 >> PUBBLICO: Mi puoi dire quello che la e commerciale x era? 693 00:31:58,185 --> 00:32:00,004 Ho pensato e commerciale era come ED. 694 00:32:00,004 --> 00:32:03,480 695 00:32:03,480 --> 00:32:07,210 >> Pulak GOYAL: Sì, quindi usiamo lo stesso simbolo per molte cose diverse. 696 00:32:07,210 --> 00:32:11,470 Così qui, quando si have-- in questo caso, quando si hanno, 697 00:32:11,470 --> 00:32:19,380 Io guess-- quindi in questo caso, quando hai a che fare con i puntatori, 698 00:32:19,380 --> 00:32:23,640 quando si mette la e commerciale di fronte di un int, una variabile int, o un char, 699 00:32:23,640 --> 00:32:28,609 o un flusso, che cosa stai dicendo è, dammi l'indirizzo di questo. 700 00:32:28,609 --> 00:32:31,900 Ma quello che stavi pensando, quando il resto si usa commerciale è, diciamo, 701 00:32:31,900 --> 00:32:33,180 in un'istruzione if. 702 00:32:33,180 --> 00:32:39,256 Si dispone di un vero, e alcune variabili che restituiscono qualche booleano, 703 00:32:39,256 --> 00:32:41,380 e alcune altre variabili che convalidare alcuni booleano 704 00:32:41,380 --> 00:32:42,880 e si desidera ottenere il e di quella. 705 00:32:42,880 --> 00:32:44,552 Poi si può usare la e commerciale. 706 00:32:44,552 --> 00:32:47,510 SPEAKER 1: Sì, così proprio oggi, abbiamo parlato di tre diversi usi 707 00:32:47,510 --> 00:32:48,250 di commerciale. 708 00:32:48,250 --> 00:32:51,040 Abbiamo due e commerciali, che è cosa Pulak ha appena descritto. 709 00:32:51,040 --> 00:32:53,420 Abbiamo una commerciale, che è ciò che ha descritto Camille 710 00:32:53,420 --> 00:32:54,897 in precedenza, che è uno commerciale. 711 00:32:54,897 --> 00:32:56,685 E questo è per AND bit a bit. 712 00:32:56,685 --> 00:32:59,640 E notare che sia il e- condizionato o, mi dispiace, 713 00:32:59,640 --> 00:33:04,180 il logico e il bit E, quelli hanno due numeri, giusto? 714 00:33:04,180 --> 00:33:07,354 E 'stato qualcosa di commerciale qualcosa e commerciale, 715 00:33:07,354 --> 00:33:09,350 qualcosa commerciale qualcosa. 716 00:33:09,350 --> 00:33:13,862 Qui, quando non ci resta che commerciale qualcosa, che è dereferencing. 717 00:33:13,862 --> 00:33:15,830 >> Pulak GOYAL: Sì, grande questione. 718 00:33:15,830 --> 00:33:16,677 Già. 719 00:33:16,677 --> 00:33:21,150 >> PUBBLICO: Perché in linea 5a e stella di un diventare N / A? 720 00:33:21,150 --> 00:33:25,520 Perché non solo tipo di mantengono la stessi valori della riga precedente? 721 00:33:25,520 --> 00:33:28,000 >> Pulak GOYAL: Perché abbiamo usciti la funzione. 722 00:33:28,000 --> 00:33:30,894 E così quello che happens-- così cosa-- ora siamo 723 00:33:30,894 --> 00:33:33,060 fuori portata di quella funzione, ciò che accade in realtà 724 00:33:33,060 --> 00:33:37,770 è quelli vengono rimossi dalla memoria. 725 00:33:37,770 --> 00:33:38,808 Già. 726 00:33:38,808 --> 00:33:42,982 >> PUBBLICO: Tra 3 o 4 stelle un uguale 5. 727 00:33:42,982 --> 00:33:43,690 Pulak GOYAL: Sì. 728 00:33:43,690 --> 00:33:45,575 PUBBLICO: Che cosa esattamente denotano? 729 00:33:45,575 --> 00:33:46,950 Pulak GOYAL: Che cosa vuol dire? 730 00:33:46,950 --> 00:33:47,380 PUBBLICO: Sì. 731 00:33:47,380 --> 00:33:49,088 Pulak GOYAL: Così il domanda era: che cosa è 732 00:33:49,088 --> 00:33:52,300 che-- cosa stai facendo in linea quando diciamo, stella è uguale a 5? 733 00:33:52,300 --> 00:33:55,210 Quindi ricorda la stella operatore dereference. 734 00:33:55,210 --> 00:33:58,640 Così, quando un, in questo caso, è un puntatore. 735 00:33:58,640 --> 00:34:00,030 Si tratta di un int stella. 736 00:34:00,030 --> 00:34:03,710 Così, quando abbiamo dereference un by Con la stella, quello che stiamo dicendo 737 00:34:03,710 --> 00:34:11,250 è, andare a tutto ciò che è memorizzato in indirizzo, memorizzato in a-- così take-- così una, 738 00:34:11,250 --> 00:34:13,280 in questo momento, ha qualche indirizzo memorizzato in esso. 739 00:34:13,280 --> 00:34:19,920 Vai a quando tale indirizzo indica, e ora modificare qualunque cosa sia a cinque. 740 00:34:19,920 --> 00:34:20,420 Già. 741 00:34:20,420 --> 00:34:23,390 >> PUBBLICO: Si può dire in termini più semplici? 742 00:34:23,390 --> 00:34:27,360 Modificare l'indirizzo di un a 5. 743 00:34:27,360 --> 00:34:31,070 >> Pulak GOYAL: Non siamo cambiare l'indirizzo di un a 5. 744 00:34:31,070 --> 00:34:36,340 A ha qualche indirizzo in esso, che è il indirizzo della variabile di interesse. 745 00:34:36,340 --> 00:34:39,570 E così quello che stiamo dicendo quando abbiamo dereferenziare è, 746 00:34:39,570 --> 00:34:42,630 ora vogliamo change-- ora stiamo riferimento 747 00:34:42,630 --> 00:34:45,135 l'interesse direttamente della variabile. 748 00:34:45,135 --> 00:34:48,499 Fa questo ha un senso? 749 00:34:48,499 --> 00:34:52,280 >> SPEAKER 1: Un altro modo di pensare di esso è go-- così a è un indirizzo. 750 00:34:52,280 --> 00:34:55,310 La star dice recarsi in tale affrontare e guardare il suo valore. 751 00:34:55,310 --> 00:34:58,000 E ora impostarne il valore su 5. 752 00:34:58,000 --> 00:35:00,920 Così si dice, andare al indirizzo di x, che 753 00:35:00,920 --> 00:35:05,720 sta per essere ciò che è memorizzato in una, e modificarlo in 5. 754 00:35:05,720 --> 00:35:06,470 Pulak GOYAL: Sì? 755 00:35:06,470 --> 00:35:10,817 AUDIENCE: Quindi la posizione è dove il puntatore sta andando, l'indirizzo. 756 00:35:10,817 --> 00:35:14,270 Ma il valore è un assegnato il valore in base all'indirizzo. 757 00:35:14,270 --> 00:35:15,020 Pulak GOYAL: Sì. 758 00:35:15,020 --> 00:35:18,076 759 00:35:18,076 --> 00:35:19,367 Tutte le altre domande su questo? 760 00:35:19,367 --> 00:35:22,774 761 00:35:22,774 --> 00:35:23,940 PUBBLICO: Ho una domanda. 762 00:35:23,940 --> 00:35:25,664 Pulak GOYAL: Sì, mi dispiace. 763 00:35:25,664 --> 00:35:30,324 PUBBLICO: Quindi, quando si store-- così se stai dicendo [incomprensibile] a. 764 00:35:30,324 --> 00:35:31,032 Pulak GOYAL: Sì. 765 00:35:31,032 --> 00:35:34,448 PUBBLICO: Dovete memorizzare l'x con una e commerciale? 766 00:35:34,448 --> 00:35:37,376 Perché non si può semplicemente dire x prima int [incomprensibile]? 767 00:35:37,376 --> 00:35:40,562 768 00:35:40,562 --> 00:35:41,270 Pulak GOYAL: So-- 769 00:35:41,270 --> 00:35:42,090 PUBBLICO: [incomprensibile]. 770 00:35:42,090 --> 00:35:43,673 Pulak GOYAL: Allora è la tua interrogo oh. 771 00:35:43,673 --> 00:35:47,160 772 00:35:47,160 --> 00:35:51,300 Quindi la tua domanda è, perché non può we-- alla funzione to_five, perché non possiamo 773 00:35:51,300 --> 00:35:52,590 basta passare un x, giusto? 774 00:35:52,590 --> 00:35:53,570 >> PUBBLICO: Giusto. 775 00:35:53,570 --> 00:35:59,570 >> Pulak GOYAL: OK, sì, quindi questo nuovo risale alla nostra discussione sui tipi. 776 00:35:59,570 --> 00:36:06,080 Quindi la funzione to_five ora in attesa di un tipo di stella int. 777 00:36:06,080 --> 00:36:07,660 Allora, qual è il tipo di x? 778 00:36:07,660 --> 00:36:09,800 X è solo un int. 779 00:36:09,800 --> 00:36:13,530 Ma che cosa questa funzione si aspetta è un int stella. 780 00:36:13,530 --> 00:36:16,910 Quindi si aspetta una variabile che ha un indirizzo memorizzato in esso. 781 00:36:16,910 --> 00:36:20,250 Ecco come you-- mettere il commerciale, e in modo che sia 782 00:36:20,250 --> 00:36:22,560 come si passa in indirizzo, che è now-- 783 00:36:22,560 --> 00:36:25,120 e che interpreta che come un int stella, sì. 784 00:36:25,120 --> 00:36:26,700 Grande domanda. 785 00:36:26,700 --> 00:36:29,300 Altre domande su questo? 786 00:36:29,300 --> 00:36:29,800 Ok bello. 787 00:36:29,800 --> 00:36:32,870 788 00:36:32,870 --> 00:36:37,020 >> OK, ora parliamo circa l'aritmetica dei puntatori. 789 00:36:37,020 --> 00:36:40,050 Così qui, aggiungendo e sottraendo i regola il puntatore 790 00:36:40,050 --> 00:36:43,950 per i volte la dimensione di il tipo di puntatore byte. 791 00:36:43,950 --> 00:36:46,170 Quindi diamo un'occhiata a come che sembra. 792 00:36:46,170 --> 00:36:49,640 Così qui, abbiamo dichiarato int x è uguale a 5. 793 00:36:49,640 --> 00:36:56,120 E adesso andiamo a dichiarare un puntatore y, e passare l'indirizzo di x lì. 794 00:36:56,120 --> 00:36:58,910 Così abbiamo che. 795 00:36:58,910 --> 00:37:01,005 Quindi x è conservato a 0x04. 796 00:37:01,005 --> 00:37:03,960 Così ora y è uguale a quello. 797 00:37:03,960 --> 00:37:12,260 E qualcuno può dirmi quello che pensano accadrà quando facciamo y più uguale a 1? 798 00:37:12,260 --> 00:37:19,100 799 00:37:19,100 --> 00:37:19,771 Sì? 800 00:37:19,771 --> 00:37:24,010 >> PUBBLICO: Cambierà a 0 volte 0 8? 801 00:37:24,010 --> 00:37:25,342 >> Pulak GOYAL: Dimensione e type-- 802 00:37:25,342 --> 00:37:27,789 >> PUBBLICO: si sta spostando l'indirizzo. 803 00:37:27,789 --> 00:37:29,080 Pulak GOYAL: Sì è era-- sì. 804 00:37:29,080 --> 00:37:31,130 Così giusto. 805 00:37:31,130 --> 00:37:33,110 Così cambierà a 0x08. 806 00:37:33,110 --> 00:37:38,750 E perchè-- così devi usare questo formula 1 volte la dimensione del puntatore 807 00:37:38,750 --> 00:37:42,354 e gli indicatori sono di size-- 808 00:37:42,354 --> 00:37:44,050 >> [STUDENTI MURMUR] 809 00:37:44,050 --> 00:37:45,190 >> Pulak GOYAL: Giusto. 810 00:37:45,190 --> 00:37:46,150 >> [STUDENTI MURMUR] 811 00:37:46,150 --> 00:37:49,230 >> SPEAKER 1: Quindi il tipo che il puntatore punta a-- 812 00:37:49,230 --> 00:37:51,862 >> Pulak GOYAL: È, sì, sì, è 4 byte. 813 00:37:51,862 --> 00:37:53,930 >> SPEAKER 1: Così interi sono 4 byte. 814 00:37:53,930 --> 00:38:01,260 >> Pulak goyal: Quindi se avessimo a-- LET'S diciamo abbiamo dichiarato, credo, un char. 815 00:38:01,260 --> 00:38:06,830 Che cosa sarebbe che-- quindi diciamo noi avere char x pari ad un o qualcosa del genere. 816 00:38:06,830 --> 00:38:14,400 E abbiamo avuto l'indirizzo che a 0x04, cosa sarebbe y più uguale a 1 ora fare? 817 00:38:14,400 --> 00:38:14,960 Mi dispiace che cosa? 818 00:38:14,960 --> 00:38:16,099 >> PUBBLICO: 0x05. 819 00:38:16,099 --> 00:38:17,140 Pulak GOYAL: 0x05, a destra. 820 00:38:17,140 --> 00:38:18,520 Ritiene vedere a tutti che? 821 00:38:18,520 --> 00:38:20,212 OK, e ora diciamo che si tratta di un galleggiante. 822 00:38:20,212 --> 00:38:20,962 Cosa succederebbe? 823 00:38:20,962 --> 00:38:25,210 824 00:38:25,210 --> 00:38:26,130 Chiunque? 825 00:38:26,130 --> 00:38:28,066 Così galleggianti sono quanti byte? 826 00:38:28,066 --> 00:38:28,860 >> PUBBLICO: 4 byte. 827 00:38:28,860 --> 00:38:29,651 >> Pulak GOYAL: Giusto. 828 00:38:29,651 --> 00:38:32,661 Quindi sarebbe la stessa cosa di questo. 829 00:38:32,661 --> 00:38:33,160 Raffreddare. 830 00:38:33,160 --> 00:38:36,230 831 00:38:36,230 --> 00:38:40,180 OK, e ora parliamo su puntatori e array. 832 00:38:40,180 --> 00:38:44,210 Così hai visto questo sul precedenti due serie p, 833 00:38:44,210 --> 00:38:48,570 dove possiamo treat-- array così e puntatori non sono la stessa cosa. 834 00:38:48,570 --> 00:38:51,170 Ma possiamo trattare array come puntatori. 835 00:38:51,170 --> 00:38:55,550 Ecco, noi abbiamo questo array qui, che ha tre slot. 836 00:38:55,550 --> 00:38:57,570 Nella prima abbiamo slot-- avere uno, due e tre. 837 00:38:57,570 --> 00:39:00,930 >> Quindi, se we-- così possiamo assegnare che dicendo, abbiamo matrice, 838 00:39:00,930 --> 00:39:02,080 dereference questo. 839 00:39:02,080 --> 00:39:04,579 E poi quando abbiamo dereference che, quello che stiamo effettivamente facendo 840 00:39:04,579 --> 00:39:05,910 si riferisce alla stessa slot. 841 00:39:05,910 --> 00:39:09,230 Così matrice stella è uguale a 1. 842 00:39:09,230 --> 00:39:11,020 Abbiamo could- come potrebbe scriviamo che-- ciò che è 843 00:39:11,020 --> 00:39:13,404 un modo alternativo potremmo scrivere questo? 844 00:39:13,404 --> 00:39:14,840 >> PUBBLICO: Array 0 uguale a 1. 845 00:39:14,840 --> 00:39:17,100 >> Pulak GOYAL: Esattamente, fa vedere a tutti che? 846 00:39:17,100 --> 00:39:18,320 Quindi, stessa cosa in questa sede. 847 00:39:18,320 --> 00:39:24,060 Così, quando abbiamo matrice più 1, abbiamo fare-- così even-- 848 00:39:24,060 --> 00:39:28,890 ricordare con l'aritmetica che abbiamo appena parlato, quando lo facciamo più 1 849 00:39:28,890 --> 00:39:32,120 o spostarlo sopra da 4 byte, a destra. 850 00:39:32,120 --> 00:39:33,170 Ritiene vedere a tutti che? 851 00:39:33,170 --> 00:39:35,753 E quel lato, quando dereferenziare che, possiamo impostare che a 2. 852 00:39:35,753 --> 00:39:37,710 Ed è così che abbiamo impostato il blocco successivo a 2. 853 00:39:37,710 --> 00:39:41,640 E così un modo alternativo per scrivere che sarebbe anche la staffa di matrice 854 00:39:41,640 --> 00:39:44,436 0 staffa è uguale a 1. 855 00:39:44,436 --> 00:39:47,070 >> PUBBLICO: Avete bisogno le parentesi? 856 00:39:47,070 --> 00:39:50,840 >> Pulak GOYAL: Sì, perché sei dereferencing l'intero quantitativo 857 00:39:50,840 --> 00:39:53,460 matrice più 1. 858 00:39:53,460 --> 00:39:56,829 OK, e stessa cosa per il campo più 2. 859 00:39:56,829 --> 00:39:57,870 Avete domande su questo? 860 00:39:57,870 --> 00:39:58,369 Già. 861 00:39:58,369 --> 00:40:01,340 PUBBLICO: Così array è automaticamente impostato a 0? 862 00:40:01,340 --> 00:40:03,054 >> Pulak GOYAL: Array è-- scusate, che cosa? 863 00:40:03,054 --> 00:40:03,962 >> PUBBLICO: Array è 0. 864 00:40:03,962 --> 00:40:07,140 L'indirizzo di array è solo 0. 865 00:40:07,140 --> 00:40:10,200 >> Pulak GOYAL: Quindi la domanda era, è l'indirizzo di matrice appena 0? 866 00:40:10,200 --> 00:40:11,950 Quindi, no, array ha qualche indirizzo. 867 00:40:11,950 --> 00:40:14,930 Così, quando abbiamo dereferenziarlo, that's-- in modo da poter pensare about-- 868 00:40:14,930 --> 00:40:18,230 letteralmente come un puntatore che punta all'inizio di un array. 869 00:40:18,230 --> 00:40:19,390 In modo che ha qualche indirizzo. 870 00:40:19,390 --> 00:40:20,580 Non sappiamo di cosa si tratta. 871 00:40:20,580 --> 00:40:24,170 Ma quando abbiamo dereferenziarlo, sappiamo questo è l'inizio della matrice. 872 00:40:24,170 --> 00:40:25,980 E così quando ci muoviamo da 1, stiamo solo muovendo 873 00:40:25,980 --> 00:40:29,090 rispetto a quando tale indirizzo era. 874 00:40:29,090 --> 00:40:30,480 Qualsiasi altra domanda? 875 00:40:30,480 --> 00:40:31,419 Sì? 876 00:40:31,419 --> 00:40:35,559 >> PUBBLICO: Quindi, se si fa Staffa di matrice più 1-- 877 00:40:35,559 --> 00:40:37,350 Pulak GOYAL: Siamo spiacenti, I-- si potrebbe parlare? 878 00:40:37,350 --> 00:40:41,174 PUBBLICO: Sì, se si fa Staffa array [incomprensibile]. 879 00:40:41,174 --> 00:40:45,227 Allora se si mette il pointer-- 880 00:40:45,227 --> 00:40:46,810 Pulak GOYAL: Mi dispiace, non ti sento. 881 00:40:46,810 --> 00:40:48,100 Puoi dire ancora una volta? 882 00:40:48,100 --> 00:40:49,470 >> PUBBLICO: Sei OK. 883 00:40:49,470 --> 00:40:50,870 >> Pulak GOYAL: OK, mi dispiace. 884 00:40:50,870 --> 00:40:51,420 Ok bello. 885 00:40:51,420 --> 00:40:52,200 Any-- sì. 886 00:40:52,200 --> 00:40:55,710 Quindi, quando si va in fascia matrice 3-- 887 00:40:55,710 --> 00:40:56,570 >> Pulak GOYAL: Sì. 888 00:40:56,570 --> 00:40:59,832 >> PUBBLICO: --isn't there-- non sarebbe che sia quattro punti come 0, 1, 2, e 3? 889 00:40:59,832 --> 00:41:02,630 Perché non è int array di 2? 890 00:41:02,630 --> 00:41:07,850 >> Pulak GOYAL: No, così appena la convenzione C è-- quando si dichiara la matrice, 891 00:41:07,850 --> 00:41:12,010 we-- il numero che abbiamo messo lì è il numero di slot che vogliamo. 892 00:41:12,010 --> 00:41:16,970 Ma gli indici dell'array sono in realtà di matrice 0, 1 campo, e la matrice 2. 893 00:41:16,970 --> 00:41:19,780 Quindi è solo la convenzione sul nostro modo di dichiarare gli array. 894 00:41:19,780 --> 00:41:20,880 Sì, tutte le altre domande? 895 00:41:20,880 --> 00:41:21,380 Già. 896 00:41:21,380 --> 00:41:23,750 PUBBLICO: Quindi siamo ancora parlando di puntatori, giusto? 897 00:41:23,750 --> 00:41:24,500 Pulak GOYAL: Sì. 898 00:41:24,500 --> 00:41:28,600 PUBBLICO: Potrebbe ancora fare protagonista di matrice 0 è uguale a 1? 899 00:41:28,600 --> 00:41:32,870 Pulak GOYAL: No, no, so-- OK, quindi la domanda è stata possibile 900 00:41:32,870 --> 00:41:37,370 basta fare staffa matrice stelle zero e quindi dire che uguale a 1. 901 00:41:37,370 --> 00:41:40,000 Quindi, no, quello che stiamo dicendo qui è che possiamo think-- 902 00:41:40,000 --> 00:41:42,600 possiamo trattare array come puntatori. 903 00:41:42,600 --> 00:41:44,970 Così abbiamo have-- ciò che siamo detto è che abbiamo due modi 904 00:41:44,970 --> 00:41:47,370 Finora riferimento allo stesso blocco. 905 00:41:47,370 --> 00:41:52,270 Quindi, se avete doing-- matrice pari a zero, il tipo di che ora è un int. 906 00:41:52,270 --> 00:41:55,264 E se si prende la stella che, si ottiene una cosa valida. 907 00:41:55,264 --> 00:41:57,680 Quindi quello che stiamo dicendo qui, è ci sono due modi alternativi 908 00:41:57,680 --> 00:41:59,100 per indicare lo stesso blocco. 909 00:41:59,100 --> 00:42:01,860 È possibile fare matrice Staffa 0 è uguale a 1. 910 00:42:01,860 --> 00:42:06,420 Oppure si può fare dereference matrice, e che hanno uguale a 0. 911 00:42:06,420 --> 00:42:08,621 Quindi, solo due modi di facendo la stessa cosa. 912 00:42:08,621 --> 00:42:09,120 Già. 913 00:42:09,120 --> 00:42:15,270 >> PUBBLICO: Perché non è dimensioni di int 1 per aggiungere a-- 914 00:42:15,270 --> 00:42:17,650 >> Pulak GOYAL: Dimensioni del 1 int. 915 00:42:17,650 --> 00:42:19,900 >> PUBBLICO: Perché questo è in movimento una tantum. 916 00:42:19,900 --> 00:42:23,620 >> Pulak GOYAL: Perché questo è solo il modo in C funziona. 917 00:42:23,620 --> 00:42:26,460 E 'solo il modo in cui puntatore aritmetica è definito. 918 00:42:26,460 --> 00:42:27,854 Ci vorrà il puntatore. 919 00:42:27,854 --> 00:42:30,020 E allora tutto ciò si aggiunge ad esso, sarà moltiplicare che 920 00:42:30,020 --> 00:42:34,770 dalle dimensioni di qualsiasi il negozio puntatore è, sì. 921 00:42:34,770 --> 00:42:35,480 Già. 922 00:42:35,480 --> 00:42:39,595 >> PUBBLICO: Così si dice possiamo trattare puntatori e array lo stesso, 923 00:42:39,595 --> 00:42:40,720 ma che sono diversi. 924 00:42:40,720 --> 00:42:41,950 Quindi, ciò che li rende diversi? 925 00:42:41,950 --> 00:42:45,070 Quello che non possiamo fare con uno ma non l'altro? 926 00:42:45,070 --> 00:42:52,390 >> Pulak GOYAL: Ai fini del presente classe, credo che it's-- cosa fare you-- 927 00:42:52,390 --> 00:42:56,270 >> SPEAKER 1: Quindi, we-- OK, così, per ad esempio, se si alloca la memoria 928 00:42:56,270 --> 00:42:59,680 e si dispone di un puntatore a un numero intero, ad esempio. 929 00:42:59,680 --> 00:43:01,890 Se si è tentato di avviare fare l'aritmetica dei puntatori 930 00:43:01,890 --> 00:43:05,890 e andare oltre la quantità di memoria che voi assegnato, devi correre in errori. 931 00:43:05,890 --> 00:43:08,250 Sappiamo con gli array, abbiamo Dico prima del tempo, OK, 932 00:43:08,250 --> 00:43:11,400 vogliono allocate-- questo essenzialmente dice, voglio ripartire 933 00:43:11,400 --> 00:43:13,490 abbastanza spazio per tre numeri interi. 934 00:43:13,490 --> 00:43:17,820 E così ora possiamo trattare memoria, come se abbiamo tutti e tre questi numeri interi. 935 00:43:17,820 --> 00:43:19,460 Fa quel tipo di senso? 936 00:43:19,460 --> 00:43:22,042 >> Pulak GOYAL: Sì. 937 00:43:22,042 --> 00:43:22,542 Già. 938 00:43:22,542 --> 00:43:24,778 >> PUBBLICO: Quindi una stella array, è che l'assegnazione di 1 939 00:43:24,778 --> 00:43:26,657 al 0 indice dell'array? 940 00:43:26,657 --> 00:43:27,365 Pulak GOYAL: Sì. 941 00:43:27,365 --> 00:43:31,160 942 00:43:31,160 --> 00:43:34,439 >> PUBBLICO: Quindi, qual è il dopo due righe successive in termini di the-- I 943 00:43:34,439 --> 00:43:36,980 capire che si sta cercando utilizzare l'aritmetica dei puntatori qui, 944 00:43:36,980 --> 00:43:39,355 ma ancora una volta, non capisco che cosa è l'aritmetica dei puntatori. 945 00:43:39,355 --> 00:43:43,869 Così la matrice più 1, sei dicendo che sei ora 946 00:43:43,869 --> 00:43:47,540 andando a voler parlare di il primo indice nella matrice. 947 00:43:47,540 --> 00:43:50,050 >> Pulak GOYAL: Giusto, e così il ragione per cui funziona è matrice, 948 00:43:50,050 --> 00:43:52,970 qui, possiamo pensare come un int stella. 949 00:43:52,970 --> 00:43:56,110 E così, quando facciamo l'aritmetica dei puntatori su di esso, ricordare la formula dove 950 00:43:56,110 --> 00:43:59,020 prendiamo the-- Credo che qualunque l'indirizzo corrente è, 951 00:43:59,020 --> 00:44:02,100 e poi quando aggiungiamo 1 ad esso, in realtà 952 00:44:02,100 --> 00:44:06,620 moltiplicare 1 dalle dimensioni della la cosa che stiamo manipolando. 953 00:44:06,620 --> 00:44:09,090 Quindi, in questo caso, la dimensione di un int. 954 00:44:09,090 --> 00:44:11,634 E poi ci spostiamo trasmette entro tanto. 955 00:44:11,634 --> 00:44:14,419 >> SPEAKER 1: Quindi finta avete b matrice stella. 956 00:44:14,419 --> 00:44:15,335 Pulak GOYAL: OK, sì. 957 00:44:15,335 --> 00:44:16,005 SPEAKER 1: Con la mano. 958 00:44:16,005 --> 00:44:16,505 Andare qui. 959 00:44:16,505 --> 00:44:18,350 Pulak GOYAL: O posso solo-- sì. 960 00:44:18,350 --> 00:44:23,660 OK Così qui--, così davanti alle tue inizio, è proprio qui. 961 00:44:23,660 --> 00:44:29,155 Così, quando abbiamo dereferenziare array, eravamo solo con riferimento al primo blocco qui. 962 00:44:29,155 --> 00:44:36,620 Ma ora quando faccio matrice più 1, che è-- che la freccia è ora proprio qui. 963 00:44:36,620 --> 00:44:38,250 Fa questo ha un senso? 964 00:44:38,250 --> 00:44:46,690 Giusto, perché questo blocco è di int size, che è 4 byte. 965 00:44:46,690 --> 00:44:53,540 E così, quello che stiamo facendo è che siamo in movimento che puntatore 4 byte oltre. 966 00:44:53,540 --> 00:44:56,080 Ogni volta che facciamo aritmetica su di esso, sarà sempre 967 00:44:56,080 --> 00:44:59,730 spostarla con incrementi di 4 byte. 968 00:44:59,730 --> 00:45:01,902 Perché questo è come un int stella. 969 00:45:01,902 --> 00:45:04,970 Questo fa senso? 970 00:45:04,970 --> 00:45:05,470 OK. 971 00:45:05,470 --> 00:45:07,770 >> PUBBLICO: Così le cose nella matrice sono stati 5 byte, saremmo spostiamo 5 bytes-- 972 00:45:07,770 --> 00:45:10,853 >> Pulak GOYAL: Giusto, quindi se abbiamo avuto una stella char, saremmo spostiamo da solo 1 byte. 973 00:45:10,853 --> 00:45:13,670 Quindi, nel caso di char stelle, che sarebbe solo essere sposta sopra di 1. 974 00:45:13,670 --> 00:45:15,420 PUBBLICO: Per ottenere il accanto hai bisogno di una stella. 975 00:45:15,420 --> 00:45:18,099 Pulak GOYAL: Sì, sì, fa questo ha un senso? 976 00:45:18,099 --> 00:45:19,890 SPEAKER 1: Possiamo chattare a questo proposito più avanti. 977 00:45:19,890 --> 00:45:21,530 Pulak GOYAL: Sì, sì, di sicuro. 978 00:45:21,530 --> 00:45:23,214 Ok bello. 979 00:45:23,214 --> 00:45:24,630 Passiamo alla sezione successiva. 980 00:45:24,630 --> 00:45:27,182 981 00:45:27,182 --> 00:45:28,140 SPEAKER 1: Oh, OK fresco. 982 00:45:28,140 --> 00:45:29,205 Si Quello sono io. 983 00:45:29,205 --> 00:45:30,330 Va bene, impressionante. 984 00:45:30,330 --> 00:45:35,064 OK, fresco, quindi ora siamo su un po ' informazioni più generali sulla memoria. 985 00:45:35,064 --> 00:45:37,730 Inoltre, apprezzo il fatto che stavano andando abbastanza rapidamente. 986 00:45:37,730 --> 00:45:40,230 E 'un sacco di materiale per ottenere attraverso in un'ora e mezza. 987 00:45:40,230 --> 00:45:42,880 Ma se ci sono argomenti vuole andare più in profondità in, 988 00:45:42,880 --> 00:45:44,630 stiamo andando ad avere orario di ufficio di questa settimana 989 00:45:44,630 --> 00:45:46,340 dove è possibile chattare con noi uno contro uno. 990 00:45:46,340 --> 00:45:49,240 Oppure si può semplicemente venire al finisce e noi chiacchieriamo di cose. 991 00:45:49,240 --> 00:45:52,130 E, come sempre, liberi di porre domande. 992 00:45:52,130 --> 00:45:52,695 Eccezionale. 993 00:45:52,695 --> 00:45:55,820 Quindi, ecco la nostra immagine di memoria che che abbiamo visto in conferenza un miliardo di volte. 994 00:45:55,820 --> 00:45:58,610 E noi sappiamo che questo stack cresce dal basso 995 00:45:58,610 --> 00:46:00,214 e l'heap cresce verso il basso. 996 00:46:00,214 --> 00:46:03,380 E qual è la differenza tra le cose che manteniamo sul mucchio e le cose 997 00:46:03,380 --> 00:46:05,981 che manteniamo nello stack? 998 00:46:05,981 --> 00:46:07,397 Qualcuno buttare qualcosa là fuori. 999 00:46:07,397 --> 00:46:10,806 1000 00:46:10,806 --> 00:46:11,780 Già. 1001 00:46:11,780 --> 00:46:14,215 >> PUBBLICO: E 'pila per le cose che sono solo 1002 00:46:14,215 --> 00:46:18,095 variabili impermanenti che siamo solo dichiarando utilizzando alcune funzioni? 1003 00:46:18,095 --> 00:46:19,220 SPEAKER 1: Bello, sì. 1004 00:46:19,220 --> 00:46:23,007 Così ogni volta in cui, diciamo dire che siamo in una funzione, 1005 00:46:23,007 --> 00:46:24,590 e non ci resta che alcune variabili locali. 1006 00:46:24,590 --> 00:46:26,214 Coloro che stanno per finire in pila. 1007 00:46:26,214 --> 00:46:30,020 Se, invece, si chiama malloc e in realtà allocare memoria, 1008 00:46:30,020 --> 00:46:32,290 che viene sempre dal mucchio. 1009 00:46:32,290 --> 00:46:35,100 Quindi, sì freddo? 1010 00:46:35,100 --> 00:46:38,672 >> E così ricordare che qualsiasi memoria allocare utilizzando malloc, 1011 00:46:38,672 --> 00:46:40,130 che sta andando a finire sul mucchio. 1012 00:46:40,130 --> 00:46:42,019 E se si dimentica di gratuitamente, il computer di 1013 00:46:42,019 --> 00:46:43,810 non andare a sapere che hai finito con esso. 1014 00:46:43,810 --> 00:46:45,560 Quindi è solo andare a appendere fuori in memoria. 1015 00:46:45,560 --> 00:46:47,412 E tu sei essenzialmente perdite che la memoria. 1016 00:46:47,412 --> 00:46:48,120 Stai perdendo. 1017 00:46:48,120 --> 00:46:51,840 Perché non hai mai detto il computer, hey Ho finito di usarlo, sentitevi liberi di utilizzare, 1018 00:46:51,840 --> 00:46:53,632 mettere altre cose lì. 1019 00:46:53,632 --> 00:46:54,470 Raffreddare. 1020 00:46:54,470 --> 00:46:55,928 Tutte le domande lì? 1021 00:46:55,928 --> 00:46:56,428 Sì. 1022 00:46:56,428 --> 00:46:58,808 >> PUBBLICO: Che tipo di memoria è pila? 1023 00:46:58,808 --> 00:46:59,974 Alimenti non dinamico, delegato? 1024 00:46:59,974 --> 00:47:01,200 Cosa vorresti chiamare? 1025 00:47:01,200 --> 00:47:03,870 >> SPEAKER 1: Certo, così si potrebbe pensare ad esso come variabili locali. 1026 00:47:03,870 --> 00:47:10,137 Chiamate a funzioni reali stanno per impilare. 1027 00:47:10,137 --> 00:47:10,720 Qualunque altra cosa? 1028 00:47:10,720 --> 00:47:11,220 Sì? 1029 00:47:11,220 --> 00:47:14,627 PUBBLICO: Come si fa gratis la memoria che si aggiunge a the-- 1030 00:47:14,627 --> 00:47:17,710 SPEAKER 1: Certo, in modo che quando si assegnano memoria heap, si chiama malloc. 1031 00:47:17,710 --> 00:47:20,543 E così allora che ti dà indietro un puntatore a qualche indirizzo nella memoria. 1032 00:47:20,543 --> 00:47:22,630 Così dicono che hai chiamato puntatore, giusto? 1033 00:47:22,630 --> 00:47:24,970 Poi, basta dire puntatore gratuito. 1034 00:47:24,970 --> 00:47:27,351 E che libera la memoria. 1035 00:47:27,351 --> 00:47:27,850 Raffreddare. 1036 00:47:27,850 --> 00:47:28,660 Altre domande? 1037 00:47:28,660 --> 00:47:28,880 Sì. 1038 00:47:28,880 --> 00:47:30,838 >> PUBBLICO: Che cosa allocata dinamicamente significa? 1039 00:47:30,838 --> 00:47:32,345 1040 00:47:32,345 --> 00:47:35,381 >> SPEAKER 1: assegnato dinamicamente significa, nel corso del programma. 1041 00:47:35,381 --> 00:47:37,630 Così, quando si chiama malloc in Al centro del programma, 1042 00:47:37,630 --> 00:47:40,510 all'inizio del programma, non c'è memoria allocata. 1043 00:47:40,510 --> 00:47:42,600 E come il computer passaggio attraverso quel codice, 1044 00:47:42,600 --> 00:47:44,280 sta andando a allocare la memoria. 1045 00:47:44,280 --> 00:47:46,507 Ecco, questo è ciò che intendiamo per dinamicamente. 1046 00:47:46,507 --> 00:47:47,090 Bella domanda. 1047 00:47:47,090 --> 00:47:48,309 Sì? 1048 00:47:48,309 --> 00:47:50,809 PUBBLICO: Quando si definisce un array con le parentesi quadre, 1049 00:47:50,809 --> 00:47:54,154 fa che ancora [incomprensibile]? 1050 00:47:54,154 --> 00:47:55,570 SPEAKER 1: Questa è una buona domanda. 1051 00:47:55,570 --> 00:48:00,320 Penso che quando si assegnano un array, in realtà mette in pila. 1052 00:48:00,320 --> 00:48:03,008 Io non sono positivo circa che, quindi non mi citare. 1053 00:48:03,008 --> 00:48:04,430 >> SPEAKER 2: Penso it-- sì mette in pila. 1054 00:48:04,430 --> 00:48:05,763 >> SPEAKER 1: Mette in pila. 1055 00:48:05,763 --> 00:48:07,044 OK, fresco, ha confermato. 1056 00:48:07,044 --> 00:48:07,710 Altre domande? 1057 00:48:07,710 --> 00:48:08,030 Sì? 1058 00:48:08,030 --> 00:48:10,946 >> PUBBLICO: Quando si delega malloc, non fa il computer automaticamente 1059 00:48:10,946 --> 00:48:12,910 allocare memoria per le variabili? 1060 00:48:12,910 --> 00:48:14,660 SPEAKER 1: Sì, per le variabili locali, 1061 00:48:14,660 --> 00:48:16,724 si mette automaticamente memoria sullo stack. 1062 00:48:16,724 --> 00:48:18,640 PUBBLICO: Quindi qual è la punto di usare malloc? 1063 00:48:18,640 --> 00:48:19,840 SPEAKER 1: Qual è il punto di usare malloc? 1064 00:48:19,840 --> 00:48:22,850 Così abbiamo visto un po 'di esempi, come, per esempio, utilizzando scambio, 1065 00:48:22,850 --> 00:48:25,690 dove vogliamo che il campo di applicazione la variabile di essere qualcosa 1066 00:48:25,690 --> 00:48:27,940 di là solo la sua chiamata di funzione. 1067 00:48:27,940 --> 00:48:29,875 E noi vogliamo qualcosa che siamo in grado di passare intorno 1068 00:48:29,875 --> 00:48:31,750 e che possiamo accedere da luoghi diversi. 1069 00:48:31,750 --> 00:48:33,791 Ecco dove ci piacerebbe mettere la memoria sul mucchio. 1070 00:48:33,791 --> 00:48:37,835 Così che tutti questi diversi le funzioni possono accedervi. 1071 00:48:37,835 --> 00:48:40,510 >> PUBBLICO: si può solo spiegare che? 1072 00:48:40,510 --> 00:48:44,770 >> SPEAKER 1: Quindi una opzione è-- così il domanda era, possiamo semplicemente allocate-- 1073 00:48:44,770 --> 00:48:47,660 scusate, possiamo dichiarare una variabile globale, essenzialmente. 1074 00:48:47,660 --> 00:48:48,560 Questa è una opzione. 1075 00:48:48,560 --> 00:48:50,893 Ma con un sacco di quelli, quelli tendono a diventare davvero disordinato. 1076 00:48:50,893 --> 00:48:52,847 E generalmente si pensa anche di questo cattivo design. 1077 00:48:52,847 --> 00:48:53,821 Già. 1078 00:48:53,821 --> 00:48:56,580 Fresco, tutte le altre domande? 1079 00:48:56,580 --> 00:48:57,140 Eccezionale. 1080 00:48:57,140 --> 00:48:58,789 OK, andare avanti. 1081 00:48:58,789 --> 00:49:00,580 Quindi, questo è in realtà il modo in cui allocare memoria. 1082 00:49:00,580 --> 00:49:02,670 Abbiamo parlato di questo un po '. 1083 00:49:02,670 --> 00:49:04,240 Usiamo questo funzione chiamata malloc. 1084 00:49:04,240 --> 00:49:07,850 E gli dite quanti byte in memoria, quindi quanti byte sul mucchio, 1085 00:49:07,850 --> 00:49:08,610 tu vuoi. 1086 00:49:08,610 --> 00:49:13,120 E sta andando a restituire l'indirizzo, quindi un puntatore, un pezzo di memoria 1087 00:49:13,120 --> 00:49:14,500 che è allocata per voi. 1088 00:49:14,500 --> 00:49:17,080 Così il tipo sarà nulla stella. 1089 00:49:17,080 --> 00:49:21,310 Sta andando essere un puntatore a tutto ciò che si decide di mettere in là. 1090 00:49:21,310 --> 00:49:23,530 Ogni volta che si chiama malloc, abbiamo già detto 1091 00:49:23,530 --> 00:49:25,640 dovete liberare così noi non hanno perdite di memoria. 1092 00:49:25,640 --> 00:49:27,170 >> Qual è l'altra cosa che è assolutamente 1093 00:49:27,170 --> 00:49:29,185 hanno a che fare ogni singolo volta che si chiama malloc? 1094 00:49:29,185 --> 00:49:31,210 1095 00:49:31,210 --> 00:49:32,210 OK, è necessario liberarlo. 1096 00:49:32,210 --> 00:49:34,010 Qual è l'altra cosa? 1097 00:49:34,010 --> 00:49:35,890 Controllare per nulla, bello. 1098 00:49:35,890 --> 00:49:38,850 Quindi, sì, è proprio lì sul bordo. 1099 00:49:38,850 --> 00:49:42,120 Se volete provare a ripartire memoria e non hanno memoria di sinistra, 1100 00:49:42,120 --> 00:49:44,940 il computer sta per dire, Non ho nulla da darti. 1101 00:49:44,940 --> 00:49:47,650 E ti dà indietro nulla. 1102 00:49:47,650 --> 00:49:48,400 Domande su questo? 1103 00:49:48,400 --> 00:49:49,290 Già. 1104 00:49:49,290 --> 00:49:52,995 >> PUBBLICO: Perché mai voglia di dichiarare un puntatore con un tipo specifico 1105 00:49:52,995 --> 00:49:56,329 quando vuoto stella in grado di gestire tutti i tipi di puntatore comunque? 1106 00:49:56,329 --> 00:49:57,370 SPEAKER 1: Buona domanda. 1107 00:49:57,370 --> 00:50:00,590 Perché dovremmo dire int stelle al contrario di annullare stella 1108 00:50:00,590 --> 00:50:03,740 quando vuoto stella in grado di gestire tutto? 1109 00:50:03,740 --> 00:50:06,390 Quindi noi non vogliamo mai esplicitamente espressi puntatori. 1110 00:50:06,390 --> 00:50:07,940 E 'solo una cattiva pratica. 1111 00:50:07,940 --> 00:50:11,850 Ma parleremo int stelle così come una comprensione di, 1112 00:50:11,850 --> 00:50:14,195 questo è un puntatore a un numero intero. 1113 00:50:14,195 --> 00:50:14,850 >> PUBBLICO: OK. 1114 00:50:14,850 --> 00:50:17,558 >> SPEAKER 1: Sì, e permette di manipolare i valori in essa 1115 00:50:17,558 --> 00:50:18,667 come interi. 1116 00:50:18,667 --> 00:50:20,008 >> PUBBLICO: Oh, OK. 1117 00:50:20,008 --> 00:50:22,250 E nulla stella non avrebbe permesso di farlo? 1118 00:50:22,250 --> 00:50:25,070 >> SPEAKER 1: Dipende dal Sì contesto, quindi non preoccupatevi 1119 00:50:25,070 --> 00:50:28,460 non preoccupatevi troppo sul tipo lì. 1120 00:50:28,460 --> 00:50:32,620 Basta sapere che, in generale, malloc restituisce un puntatore a qualcosa. 1121 00:50:32,620 --> 00:50:33,520 Bella domanda. 1122 00:50:33,520 --> 00:50:37,260 >> PUBBLICO: Perché si moltiplica cronometra 10? [Incomprensibile]. 1123 00:50:37,260 --> 00:50:40,150 >> SPEAKER 1: Certo, quindi ero solo facendo esempio a caso qui dove 1124 00:50:40,150 --> 00:50:42,840 Volevo allocare abbastanza spazio per memorizzare 10 numeri interi. 1125 00:50:42,840 --> 00:50:44,320 Solo una scelta casuale. 1126 00:50:44,320 --> 00:50:45,250 Già. 1127 00:50:45,250 --> 00:50:45,440 Già, che cosa succede? 1128 00:50:45,440 --> 00:50:47,440 >> PUBBLICO: Quello che fai significare controllando per nulla? 1129 00:50:47,440 --> 00:50:51,351 Vuoi controllare il puntatore nullo o il malloc? 1130 00:50:51,351 --> 00:50:52,350 SPEAKER 1: Sì, esattamente. 1131 00:50:52,350 --> 00:50:54,599 Quindi la domanda era, cosa cosa si intende per controllo da zero? 1132 00:50:54,599 --> 00:50:57,880 Vogliamo a-- ogni volta che chiamiamo malloc e stiamo tornati un puntatore, 1133 00:50:57,880 --> 00:51:01,110 vogliamo dire, è puntatore uguale a null? 1134 00:51:01,110 --> 00:51:02,610 Così letteralmente PTR. 1135 00:51:02,610 --> 00:51:05,620 È PTR uguale a null. 1136 00:51:05,620 --> 00:51:06,958 Sì. 1137 00:51:06,958 --> 00:51:08,832 PUBBLICO: Allora, ero tipo di chiedersi, se 1138 00:51:08,832 --> 00:51:14,013 inizializzare il puntatore nella malloc, fa puntare all'inizio del malloc? 1139 00:51:14,013 --> 00:51:15,097 Perché se si tratta di un array-- 1140 00:51:15,097 --> 00:51:16,554 SPEAKER 1: Questa è una grande domanda. 1141 00:51:16,554 --> 00:51:19,200 Sì, se si chiama malloc, la puntatore che it-- diciamo, 1142 00:51:19,200 --> 00:51:21,700 ecco allochiamo 10 byte di memoria. 1143 00:51:21,700 --> 00:51:23,830 Quindi, mi dispiace, abbastanza ambiente per 10 interi, 1144 00:51:23,830 --> 00:51:28,220 stiamo andando a ottenere l'indirizzo di che primo pezzo della memoria. 1145 00:51:28,220 --> 00:51:29,880 Questa è una buona domanda. 1146 00:51:29,880 --> 00:51:30,481 Già. 1147 00:51:30,481 --> 00:51:34,810 >> PUBBLICO: Assegnando 10 interi diffusi, 1148 00:51:34,810 --> 00:51:38,177 potrebbe effettivamente utilizzare che puntatore come like-- quasi 1149 00:51:38,177 --> 00:51:39,372 come un array di interi? 1150 00:51:39,372 --> 00:51:41,830 SPEAKER 1: Sì, potete farlo anche voi usarlo come un array di interi? 1151 00:51:41,830 --> 00:51:45,970 Sì, esattamente, questo è ciò che Pulak solo mostrato si on-- una coppia scivola fa, 1152 00:51:45,970 --> 00:51:48,680 dove si dice, OK, questo è davvero solo tipo di-- noi 1153 00:51:48,680 --> 00:51:50,805 può pensare ad esso come un array di 10 interi. 1154 00:51:50,805 --> 00:51:52,222 Succede solo per essere sul mucchio. 1155 00:51:52,222 --> 00:51:54,971 Pubblico: Ma non si poteva accedere con la notazione parentesi quadra? 1156 00:51:54,971 --> 00:51:58,220 SPEAKER 1: Si effettivamente poteva accedere con la notazione parentesi quadra, sì. 1157 00:51:58,220 --> 00:52:00,221 Si può trattare loro lo stesso. 1158 00:52:00,221 --> 00:52:00,720 Sì. 1159 00:52:00,720 --> 00:52:02,420 >> PUBBLICO: Perché sarebbe puntatore mai essere nullo? 1160 00:52:02,420 --> 00:52:04,170 >> SPEAKER 1: Perché sarebbe puntatore mai essere nullo? 1161 00:52:04,170 --> 00:52:06,570 Se si intende utilizzare il backup di tutti la memoria del mucchio. 1162 00:52:06,570 --> 00:52:09,141 Se il programma sta mangiando, divorare, mangiare la memoria, 1163 00:52:09,141 --> 00:52:11,890 e non c'è niente di sinistra, poi malloc sta per say-- se dici, 1164 00:52:11,890 --> 00:52:14,760 Voglio altri 100 byte, sta andando per dire, non ho 100 byte. 1165 00:52:14,760 --> 00:52:15,740 Ecco nullo. 1166 00:52:15,740 --> 00:52:18,780 Ciò significa, ho fallito. 1167 00:52:18,780 --> 00:52:20,516 Sì. 1168 00:52:20,516 --> 00:52:22,830 >> Pubblico: In questo caso, nulla è nulla, giusto? 1169 00:52:22,830 --> 00:52:24,110 >> SPEAKER 1: Sì, in quel caso, nulla è nulla. 1170 00:52:24,110 --> 00:52:24,943 Non hai indirizzo. 1171 00:52:24,943 --> 00:52:28,065 Non c'è memoria. 1172 00:52:28,065 --> 00:52:31,500 Va bene, andare avanti. 1173 00:52:31,500 --> 00:52:34,976 Ok, parliamo molto velocemente su buffer overflow. 1174 00:52:34,976 --> 00:52:38,210 Quando possiamo incontrare overflow del buffer? 1175 00:52:38,210 --> 00:52:42,980 Diciamo che abbiamo a-- noi allocare un pezzo di memoria, 1176 00:52:42,980 --> 00:52:44,720 e abbiamo intenzione di scrivere la stringa. 1177 00:52:44,720 --> 00:52:47,240 E stiamo per dire, OK, ho intenzione di stanziare 1178 00:52:47,240 --> 00:52:49,320 abbastanza spazio per sei caratteri. 1179 00:52:49,320 --> 00:52:51,680 E ho intenzione di chiedere l'utente un certo input. 1180 00:52:51,680 --> 00:52:54,470 E gli input dell'utente, ad esempio, ciao. 1181 00:52:54,470 --> 00:52:56,430 E che si adatta perfettamente bene perché abbiamo 1182 00:52:56,430 --> 00:53:00,790 spazio a tutti i personaggi di ciao, e il carattere di terminazione null. 1183 00:53:00,790 --> 00:53:02,840 Un sacco di spazio, nessun problema. 1184 00:53:02,840 --> 00:53:08,010 >> Ma cosa succede se diamo l'occasione per un utente del male per usare il nostro programma, 1185 00:53:08,010 --> 00:53:13,152 e digitare non sei caratteri, o meno cinque personaggi, ma un milione. 1186 00:53:13,152 --> 00:53:15,860 Continuano dattilografia, e digitando, e dattilografia, che cosa succederà? 1187 00:53:15,860 --> 00:53:18,220 Beh, diamo solo la enough-- computer o dispiaciuto, 1188 00:53:18,220 --> 00:53:23,350 abbiamo solo dato questa stringa spazio sufficiente per 5 caratteri. 1189 00:53:23,350 --> 00:53:28,300 Quindi, stiamo andando a ottenere qualcosa di simile questo, in cui la persona malvagia che è 1190 00:53:28,300 --> 00:53:31,750 digitare in ingresso può sovrascrivere la dimensione del buffer, 1191 00:53:31,750 --> 00:53:35,922 e può effettivamente andare oltre l'importo che è originariamente assegnati. 1192 00:53:35,922 --> 00:53:38,380 E allora cosa si può fare, il cosa davvero male si può fare, 1193 00:53:38,380 --> 00:53:40,260 è sovrascrivere l'indirizzo di ritorno. 1194 00:53:40,260 --> 00:53:42,010 Il che significa fondamentalmente si può sorta di prendere 1195 00:53:42,010 --> 00:53:45,110 controllo del comportamento del programma. 1196 00:53:45,110 --> 00:53:47,880 Così ad un livello molto alto buffer overflow è quando 1197 00:53:47,880 --> 00:53:49,960 allocare una certa quantità di memoria. 1198 00:53:49,960 --> 00:53:53,060 E poi you-- questo perché sei prendendo l'input dell'utente o qualcosa 1199 00:53:53,060 --> 00:53:57,190 come che-- si va oltre i limiti di ciò che hai originariamente assegnato 1200 00:53:57,190 --> 00:53:59,955 e iniziare a rovinare il vostro programma. 1201 00:53:59,955 --> 00:54:00,455 Sì? 1202 00:54:00,455 --> 00:54:03,220 >> PUBBLICO: Perché non vorrei che solo restituire un errore di segmentazione? 1203 00:54:03,220 --> 00:54:05,594 >> SPEAKER 1: Perché non vorrei che restituire un errore di segmentazione? 1204 00:54:05,594 --> 00:54:06,570 Potrebbe. 1205 00:54:06,570 --> 00:54:10,030 A volte il compilatore o durante uno dei tuoi runtime 1206 00:54:10,030 --> 00:54:11,430 è in realtà sta per verificare. 1207 00:54:11,430 --> 00:54:13,890 Se certe cose accadono, e questo è una specie di livello inferiore, 1208 00:54:13,890 --> 00:54:15,610 allora avete bisogno di sapere. 1209 00:54:15,610 --> 00:54:18,820 Ma se non si progetta questi sistemi correttamente, 1210 00:54:18,820 --> 00:54:21,170 allora si ha la possibilità di non averlo scoperto e solo 1211 00:54:21,170 --> 00:54:24,844 permettendo al computer la take-- persona malvagia per controllare il computer. 1212 00:54:24,844 --> 00:54:25,344 Già. 1213 00:54:25,344 --> 00:54:26,260 >> PUBBLICO: [incomprensibile]? 1214 00:54:26,260 --> 00:54:28,934 1215 00:54:28,934 --> 00:54:29,600 SPEAKER 1: Certo. 1216 00:54:29,600 --> 00:54:33,800 Oh, quando dico di buffer, voglio solo dire la quantità di memoria che avete assegnato. 1217 00:54:33,800 --> 00:54:39,090 Così qui ho detto, oh, abbiamo assegnato a sei char-- abbastanza spazio per sei caratteri. 1218 00:54:39,090 --> 00:54:42,880 E ho appena chiamo il mio tampone dove potrei scrivere le informazioni. 1219 00:54:42,880 --> 00:54:44,390 Già. 1220 00:54:44,390 --> 00:54:46,791 Altre domande su questo? 1221 00:54:46,791 --> 00:54:47,290 Già. 1222 00:54:47,290 --> 00:54:49,150 >> PUBBLICO: Come si fa a fermarlo? 1223 00:54:49,150 --> 00:54:50,274 Come si fa a fermarlo? 1224 00:54:50,274 --> 00:54:51,440 SPEAKER 1: Awesome domanda. 1225 00:54:51,440 --> 00:54:52,240 Come si fa a fermarlo? 1226 00:54:52,240 --> 00:54:54,110 Come si fa a evitare buffer overflow? 1227 00:54:54,110 --> 00:54:59,160 Beh un modo per farlo è qualcosa di simile GetString, dove siamo costantemente aumentiamo 1228 00:54:59,160 --> 00:55:03,200 la quantità di memoria che allochiamo se l'utente immette un sacco di testo. 1229 00:55:03,200 --> 00:55:07,570 Un'altra cosa è, se solo vogliono sei personaggi, fare un rapido controllo. 1230 00:55:07,570 --> 00:55:11,220 Dire solo l'ingresso di sei caratteri. 1231 00:55:11,220 --> 00:55:12,444 Già. 1232 00:55:12,444 --> 00:55:14,360 Quindi diciamo che eri lavoro on-- stiamo andando 1233 00:55:14,360 --> 00:55:16,985 per andare a roba web un po ' più tardi nel naturalmente-- ma cerchiamo di 1234 00:55:16,985 --> 00:55:21,422 dire che si sta lavorando su un modulo, si farebbe solo limitare la quantità potrebbe consegnato. 1235 00:55:21,422 --> 00:55:22,378 Già. 1236 00:55:22,378 --> 00:55:24,768 >> PUBBLICO: GetString tira memoria dalla pila, giusto? 1237 00:55:24,768 --> 00:55:25,444 Giusto per chiarire? 1238 00:55:25,444 --> 00:55:26,485 SPEAKER 1: Ancora una volta? 1239 00:55:26,485 --> 00:55:28,400 PUBBLICO: Fa GetString prendere la memoria dalla pila? 1240 00:55:28,400 --> 00:55:31,210 SPEAKER 1: Credo Getm-- get int prende memoria dal mucchio 1241 00:55:31,210 --> 00:55:32,911 perché richiama alloc. 1242 00:55:32,911 --> 00:55:33,452 PUBBLICO: Oh. 1243 00:55:33,452 --> 00:55:33,951 OK. 1244 00:55:33,951 --> 00:55:35,750 SPEAKER 1: Sì, malloc e realloc. 1245 00:55:35,750 --> 00:55:37,120 Altre domande? 1246 00:55:37,120 --> 00:55:37,803 Già. 1247 00:55:37,803 --> 00:55:40,650 >> PUBBLICO: Quindi definendo la dimensione del buffer, 1248 00:55:40,650 --> 00:55:42,733 si impedisce a qualcuno di poter iniettare codice 1249 00:55:42,733 --> 00:55:45,700 che può scorrere oltre il [incomprensibile]. 1250 00:55:45,700 --> 00:55:48,130 >> SPEAKER 1: Quindi, definendo la dimensione del buffer, 1251 00:55:48,130 --> 00:55:50,760 hai detto, OK ecco come quantità di memoria che possiamo usare. 1252 00:55:50,760 --> 00:55:55,550 Se si consente all'utente di scrivere su di esso, allora si sta andando a correre in problemi. 1253 00:55:55,550 --> 00:55:57,930 Ha senso. 1254 00:55:57,930 --> 00:55:59,370 Eccezionale. 1255 00:55:59,370 --> 00:56:00,640 Andiamo avanti. 1256 00:56:00,640 --> 00:56:02,320 Tutto ok. 1257 00:56:02,320 --> 00:56:06,652 Parlando di errori, qui sono alcuni messaggi di errore comuni 1258 00:56:06,652 --> 00:56:09,860 che potrebbe essere mostrato mentre eri codifica, lavorando sui vostri insiemi di problemi. 1259 00:56:09,860 --> 00:56:12,320 Buona probabilità che uno dei Questi spettacoli sul quiz 1260 00:56:12,320 --> 00:56:15,090 se negli ultimi anni sono alcuna indicazione. 1261 00:56:15,090 --> 00:56:17,580 Quindi, le risposte sono un po ' qui sul bordo. 1262 00:56:17,580 --> 00:56:19,510 Ma sentitevi liberi di gridare un po '. 1263 00:56:19,510 --> 00:56:21,280 >> Perché un errore di segmentazione potrebbe accadere? 1264 00:56:21,280 --> 00:56:24,279 Perché si potrebbe ottenere un segmentation fault quando si esegue il programma? 1265 00:56:24,279 --> 00:56:26,760 1266 00:56:26,760 --> 00:56:28,230 >> PUBBLICO: [incomprensibile]. 1267 00:56:28,230 --> 00:56:29,500 >> SPEAKER 1: Good. 1268 00:56:29,500 --> 00:56:32,820 Sì, se cerchiamo di accesso memoria che non è dato a noi. 1269 00:56:32,820 --> 00:56:34,610 Se dereference un puntatore nullo. 1270 00:56:34,610 --> 00:56:38,610 Ad esempio, se si chiama malloc, e dimenticare di verificare se è nullo, 1271 00:56:38,610 --> 00:56:42,250 e cerchiamo solo di usarlo, il computer del ci darà un errore di segmentazione. 1272 00:56:42,250 --> 00:56:42,750 Bene. 1273 00:56:42,750 --> 00:56:46,680 Che dire implicita Dichiarazione della funzione? 1274 00:56:46,680 --> 00:56:48,589 Cosa significa? 1275 00:56:48,589 --> 00:56:51,380 PUBBLICO: Si sta cercando di utilizzare un funzione che non è stata definita. 1276 00:56:51,380 --> 00:56:52,130 SPEAKER 1: Good. 1277 00:56:52,130 --> 00:56:54,504 Stai cercando di utilizzare una funzione che non è stato definito. 1278 00:56:54,504 --> 00:56:56,000 Quindi, che potrebbe essere una delle due cose. 1279 00:56:56,000 --> 00:56:59,320 Forse era come l'esempio Camille vi ha mostrato in precedenza. 1280 00:56:59,320 --> 00:57:02,330 E si dispone di una funzione principale che chiama qualcosa chiamato cubo. 1281 00:57:02,330 --> 00:57:04,371 E diciamo hai dimenticato a scrivere questo prototipo. 1282 00:57:04,371 --> 00:57:07,540 Hai dimenticato di dire, ehi di computer, Ho questa funzione chiamata cubo. 1283 00:57:07,540 --> 00:57:09,380 Vedrai più tardi. 1284 00:57:09,380 --> 00:57:12,440 Diciamo che si è dimenticato di scrivere il prototipo, si potrebbe ottenere questo errore. 1285 00:57:12,440 --> 00:57:14,820 Un'altra cosa è, diciamo si è tentato di utilizzare printf, 1286 00:57:14,820 --> 00:57:16,880 e dimenticato di includere la libreria standard, 1287 00:57:16,880 --> 00:57:20,240 poi sta andando a dire implicita la dichiarazione della funzione. 1288 00:57:20,240 --> 00:57:22,800 Ultimo ma non meno importante, identificatore non dichiarato. 1289 00:57:22,800 --> 00:57:23,300 Già. 1290 00:57:23,300 --> 00:57:24,841 >> PUBBLICO: Hai un ambito problema. 1291 00:57:24,841 --> 00:57:28,728 Come forse si sta cercando di chiamare una variabile locale che è 1292 00:57:28,728 --> 00:57:30,884 in un diverso tipo di zona. 1293 00:57:30,884 --> 00:57:33,550 SPEAKER 1: grande, quindi se avete una variabile che non è nel campo di applicazione, 1294 00:57:33,550 --> 00:57:36,890 e si sta cercando di usarlo, si sta andando a finire nei guai. 1295 00:57:36,890 --> 00:57:40,960 E appena più in generale, diciamo si tenta di utilizzare x, con mai dire int 1296 00:57:40,960 --> 00:57:45,140 X equivale 5, allora sei andare a correre nei guai. 1297 00:57:45,140 --> 00:57:47,640 Mi scusi, domande su questo? 1298 00:57:47,640 --> 00:57:49,330 Impressionante, sbuffando a destra lungo. 1299 00:57:49,330 --> 00:57:55,692 >> OK, ricorsione, perché might-- facciamo see-- Ho perso il mio sch-- oh qui andiamo, 1300 00:57:55,692 --> 00:57:57,400 Basta fare in modo che siamo circa nei tempi previsti. 1301 00:57:57,400 --> 00:57:59,060 Va bene, fresco. 1302 00:57:59,060 --> 00:58:03,150 OK, ricorsione, l'idea generale di ricorsione, una funzione ricorsiva 1303 00:58:03,150 --> 00:58:05,380 è una funzione che si chiama. 1304 00:58:05,380 --> 00:58:08,170 OK, quindi questo è quello che ho significa da un concetto di programma 1305 00:58:08,170 --> 00:58:11,130 per cui una funzione chiama se stessa. 1306 00:58:11,130 --> 00:58:16,210 Quale sarebbe some-- che cosa è una buona ragione per usare la ricorsione? 1307 00:58:16,210 --> 00:58:17,550 Quando può essere utile? 1308 00:58:17,550 --> 00:58:20,926 O che cosa è un programma che davvero si presta a ricorsione? 1309 00:58:20,926 --> 00:58:22,330 >> PUBBLICO: La ricerca binaria. 1310 00:58:22,330 --> 00:58:25,500 >> SPEAKER 1: La ricerca binaria si presta a ricorsione, 1311 00:58:25,500 --> 00:58:29,060 perché avete questo problema che si possono scindersi in pezzi più piccoli, 1312 00:58:29,060 --> 00:58:32,330 e continuamente eseguire lo stesso algoritmo su di esso. 1313 00:58:32,330 --> 00:58:37,790 Questo porta a, in molti casi, più codice elegante che è più preciso. 1314 00:58:37,790 --> 00:58:40,500 Abbiamo appena siamo l'esempio di ricerca binaria. 1315 00:58:40,500 --> 00:58:43,100 Un altro esempio è merge sort. 1316 00:58:43,100 --> 00:58:45,920 A volte, quando si pensa di un algoritmo, come fattoriale, 1317 00:58:45,920 --> 00:58:47,410 ci si sente proprio ricorsivo, giusto? 1318 00:58:47,410 --> 00:58:52,440 Perché sappiamo che il fattoriale 5 è un fattoriale 4 volte 5. 1319 00:58:52,440 --> 00:58:56,080 E così quando si imposta un problema in questo modo, ci si sente proprio ricorsivo. 1320 00:58:56,080 --> 00:58:58,530 Quindi sarebbe un ottimo modo di scriverlo. 1321 00:58:58,530 --> 00:58:59,425 Domande? 1322 00:58:59,425 --> 00:59:00,395 Sì. 1323 00:59:00,395 --> 00:59:01,850 >> PUBBLICO: Che cosa è un caso base? 1324 00:59:01,850 --> 00:59:02,770 >> SPEAKER 1: Oh, che è un caso base? 1325 00:59:02,770 --> 00:59:04,680 Ho detto, non dimenticare per includere un caso base. 1326 00:59:04,680 --> 00:59:07,690 Diciamo che stavamo scrivendo una funzione fattoriale, 1327 00:59:07,690 --> 00:59:09,620 e stavamo facendo fattoriale di 5. 1328 00:59:09,620 --> 00:59:12,352 E sappiamo un fattoriale di 5 è 5 volte un fattoriale di 4, 1329 00:59:12,352 --> 00:59:13,310 bla, bla, bla, bla. 1330 00:59:13,310 --> 00:59:14,360 Come facciamo a sapere quando smettere? 1331 00:59:14,360 --> 00:59:16,276 Come facciamo a sapere che abbiamo in realtà hanno un numero? 1332 00:59:16,276 --> 00:59:20,180 Perché se continuava a chiamarmi fattoriale, allora avremmo mai ottenere una risposta, giusto? 1333 00:59:20,180 --> 00:59:24,470 Così, quando sappiamo come fermare nell'esempio fattoriale. 1334 00:59:24,470 --> 00:59:25,460 Chiunque, sì. 1335 00:59:25,460 --> 00:59:27,764 >> AUDIENCE: Quando il 1 fattoriale è 1. 1336 00:59:27,764 --> 00:59:28,430 SPEAKER 1: Good. 1337 00:59:28,430 --> 00:59:29,530 Così sappiamo. 1338 00:59:29,530 --> 00:59:33,400 Siamo in grado di dare per scontato che 1 fattoriale è pari a 1. 1339 00:59:33,400 --> 00:59:36,570 Quindi, se si arriva al punto in cui stiamo chiamando fattoriale su 1, 1340 00:59:36,570 --> 00:59:38,050 basta andare avanti e tornare 1. 1341 00:59:38,050 --> 00:59:39,180 E questo è il vostro caso base. 1342 00:59:39,180 --> 00:59:45,040 Perché sappiamo che una volta che ci ha colpito, e abbiamo sempre colpiremo che, ci never-- 1343 00:59:45,040 --> 00:59:48,800 noi non solo andare avanti per sempre. 1344 00:59:48,800 --> 00:59:50,700 Tutte le altre domande sulla ricorsione? 1345 00:59:50,700 --> 00:59:51,630 Sì. 1346 00:59:51,630 --> 00:59:54,420 >> PUBBLICO: Quindi quando si torna 1, solo automaticamente 1347 00:59:54,420 --> 00:59:56,290 si fermerà il programma, giusto? 1348 00:59:56,290 --> 00:59:59,390 >> SPEAKER 1: Sì, così quando si chiamare ritorno 1, se: diciamo, 1349 00:59:59,390 --> 01:00:04,480 diciamo fattoriale di 2 chiamate fattoriale di 1, fattoriale di 1 1350 01:00:04,480 --> 01:00:06,120 sarà solo restituire 1. 1351 01:00:06,120 --> 01:00:12,790 E ora fattoriale di 2 dirà OK, 2 volte 1 è 2, e restituire la risposta. 1352 01:00:12,790 --> 01:00:14,260 Sì. 1353 01:00:14,260 --> 01:00:16,710 >> PUBBLICO: Dobbiamo preoccupare sull'ambito in ricorsione 1354 01:00:16,710 --> 01:00:20,150 quando si va in un algoritmo? 1355 01:00:20,150 --> 01:00:21,880 >> SPEAKER 1: Ah, sì. 1356 01:00:21,880 --> 01:00:25,060 Sì, non dovete preoccuparvi di portata nel contesto della ricorsione. 1357 01:00:25,060 --> 01:00:29,820 Così solo le variabili definite in tale esecuzione della funzione 1358 01:00:29,820 --> 01:00:32,170 stanno per essere utile. 1359 01:00:32,170 --> 01:00:33,792 Si buona domanda. 1360 01:00:33,792 --> 01:00:35,250 Va bene, continuiamo muove lungo. 1361 01:00:35,250 --> 01:00:37,320 Perché abbiamo un sacco di materiale da ottenere attraverso. 1362 01:00:37,320 --> 01:00:41,080 Ma come ho detto, non esitate a colpire orario di ufficio, o noi dopo il fatto. 1363 01:00:41,080 --> 01:00:42,850 >> Questo è solo uno scivolo molto veloce. 1364 01:00:42,850 --> 01:00:45,150 Abbiamo imparato molto su ricerche e ordinamenti. 1365 01:00:45,150 --> 01:00:47,400 Per favore, per favore, per favore, queste sezioni sono in linea, 1366 01:00:47,400 --> 01:00:51,240 Credo che a cs50.net/quizzes. 1367 01:00:51,240 --> 01:00:53,762 Quindi, andare a fare questo grafico e mettere sul vostro foglio di revisione, 1368 01:00:53,762 --> 01:00:55,470 perché ci saranno una domanda su questo. 1369 01:00:55,470 --> 01:00:56,682 Si prega di non sbagliare. 1370 01:00:56,682 --> 01:00:58,390 Proprio molto rapidamente, cosa significa questo grafico, 1371 01:00:58,390 --> 01:01:04,370 è si parla di grande o, che, come sappiamo essere il limite superiore di un algoritmi 1372 01:01:04,370 --> 01:01:05,150 tempo di esecuzione. 1373 01:01:05,150 --> 01:01:08,080 E abbiamo omega, che è sarà il limite inferiore 1374 01:01:08,080 --> 01:01:10,290 di un runtime algoritmi. 1375 01:01:10,290 --> 01:01:10,840 ok? 1376 01:01:10,840 --> 01:01:12,480 >> PUBBLICO: [incomprensibile]. 1377 01:01:12,480 --> 01:01:12,800 >> SPEAKER 1: Sì, che è l'ultima cosa? 1378 01:01:12,800 --> 01:01:13,380 Che cosa è theta? 1379 01:01:13,380 --> 01:01:16,850 E 'se we-- stiamo andando solo preoccupano in questa classe, nel caso 1380 01:01:16,850 --> 01:01:19,381 dove il nostro limite superiore e il nostro limite inferiore sono gli stessi. 1381 01:01:19,381 --> 01:01:22,005 Sì, questo è l'unica volta che è andando a venire in questa classe. 1382 01:01:22,005 --> 01:01:23,320 OK, ho intenzione di andare avanti. 1383 01:01:23,320 --> 01:01:26,490 Se non avete preso la vostra immagine, Prometto questi saranno on-line. 1384 01:01:26,490 --> 01:01:28,220 >> OK, impressionante, le strutture. 1385 01:01:28,220 --> 01:01:29,810 Perché potremmo desiderare le strutture? 1386 01:01:29,810 --> 01:01:34,110 Che cosa è un motivo utile potremmo desiderare strutture. 1387 01:01:34,110 --> 01:01:36,277 Qualcuno gridare qualcosa. 1388 01:01:36,277 --> 01:01:38,110 Bene diamo un'occhiata al esempio sulla scheda. 1389 01:01:38,110 --> 01:01:41,090 Diciamo che abbiamo a che fare con tutti questi studenti. 1390 01:01:41,090 --> 01:01:44,900 Se stiamo facendo un programma per CS50, ci sono come 800 persone. 1391 01:01:44,900 --> 01:01:47,890 Dobbiamo write-- stiamo andando a necessità di gestire un sacco di informazioni 1392 01:01:47,890 --> 01:01:49,020 sugli studenti. 1393 01:01:49,020 --> 01:01:50,990 Sarebbe bello se potremmo tipo di gruppo 1394 01:01:50,990 --> 01:01:54,460 Questa poi tutte le informazioni che ha a che fare con un particolare studente 1395 01:01:54,460 --> 01:01:56,027 in un tipo di dati. 1396 01:01:56,027 --> 01:01:58,360 Ma sappiamo che c'è nessun dato tipo chiamato, Studente, giusto? 1397 01:01:58,360 --> 01:02:01,890 Abbiamo un numero intero, abbiamo un galleggiante, abbiamo una stringa, o una stella char, 1398 01:02:01,890 --> 01:02:03,920 ma non abbiamo, uno studente. 1399 01:02:03,920 --> 01:02:08,680 >> Così possiamo fare è in realtà tipo di definire la nostra propria struttura, chiamano studente, 1400 01:02:08,680 --> 01:02:12,440 e possiamo associare alcuni campi diversi con quella struct. 1401 01:02:12,440 --> 01:02:14,410 Quindi, in questo caso, diciamo dire che abbiamo uno studente. 1402 01:02:14,410 --> 01:02:17,350 E le cose che ci interessano circa sono il numero ID studente 1403 01:02:17,350 --> 01:02:19,500 e il nome dello studente. 1404 01:02:19,500 --> 01:02:24,175 E ora siamo in grado di associare questo ID e questo nome con un determinato studente. 1405 01:02:24,175 --> 01:02:25,300 Vediamo quindi alcuni esempi. 1406 01:02:25,300 --> 01:02:28,860 1407 01:02:28,860 --> 01:02:33,490 >> Ok, ecco io dico, va bene, andiamo diciamo che vogliamo fare uno studente. 1408 01:02:33,490 --> 01:02:35,050 Lo chiamo studente 1. 1409 01:02:35,050 --> 01:02:38,850 E il suo numero di identificazione, in questo caso, si può accedere 1410 01:02:38,850 --> 01:02:45,200 da solo facendo il nome dello studente dot il campo si vuole accedere. 1411 01:02:45,200 --> 01:02:49,110 Quindi questo sarà solo studente 1 dot ID, e abbiamo impostato pari a 1. 1412 01:02:49,110 --> 01:02:52,300 Perché ricordate, abbiamo detto che ID sta per essere un numero intero. 1413 01:02:52,300 --> 01:02:56,540 E in modo molto simile, si può dire, questo il nome dello studente sarà Davin, 1414 01:02:56,540 --> 01:02:57,760 per esempio. 1415 01:02:57,760 --> 01:03:01,420 Così possiamo solo accedere campo di una struttura con questo punto. 1416 01:03:01,420 --> 01:03:03,098 Domande su questo? 1417 01:03:03,098 --> 01:03:03,598 Già. 1418 01:03:03,598 --> 01:03:05,582 >> PUBBLICO: C'è un modo per proteggere le variabili? 1419 01:03:05,582 --> 01:03:08,560 C'è un modo per proteggere le variabili da cui si accede dall'esterno? 1420 01:03:08,560 --> 01:03:10,726 >> SPEAKER 1: C'e 'qualche cosa per proteggere le variabili 1421 01:03:10,726 --> 01:03:12,680 da cui si accede dall'esterno? 1422 01:03:12,680 --> 01:03:13,750 Non nel campo di applicazione del CS50. 1423 01:03:13,750 --> 01:03:16,680 1424 01:03:16,680 --> 01:03:17,977 Altre domande? 1425 01:03:17,977 --> 01:03:18,476 Già. 1426 01:03:18,476 --> 01:03:18,942 >> PUBBLICO: Qual è typedef struct? 1427 01:03:18,942 --> 01:03:20,192 Che cosa significa ogni componente significa? 1428 01:03:20,192 --> 01:03:22,937 1429 01:03:22,937 --> 01:03:24,520 SPEAKER 1: Ah, che cosa è typedef struct? 1430 01:03:24,520 --> 01:03:26,240 Che cosa significa ogni componente dire di questo ragazzo? 1431 01:03:26,240 --> 01:03:26,850 >> PUBBLICO: Sì. 1432 01:03:26,850 --> 01:03:27,683 >> SPEAKER 1: OK, fresco. 1433 01:03:27,683 --> 01:03:31,200 Quindi questo dice, hey computer, ho vuole creare una nuova struttura. 1434 01:03:31,200 --> 01:03:34,970 E ho intenzione di definire una definizione per questo, in modo tale che potrei usarlo 1435 01:03:34,970 --> 01:03:37,520 come se fosse un tipo tutto il mio programma. 1436 01:03:37,520 --> 01:03:39,300 Ok, quindi voglio definire una struttura. 1437 01:03:39,300 --> 01:03:41,650 E io ora intenzione di essere grado di usarlo come un tipo. 1438 01:03:41,650 --> 01:03:43,400 E il suo nome è studente. 1439 01:03:43,400 --> 01:03:45,730 E qui ci sono i suoi campi. 1440 01:03:45,730 --> 01:03:48,130 >> PUBBLICO: Così è che typedef struct [incomprensibile]? 1441 01:03:48,130 --> 01:03:50,592 1442 01:03:50,592 --> 01:03:53,800 SPEAKER 1: Se si vuole essere in grado di utilizzare questa struct tutto il programma, 1443 01:03:53,800 --> 01:03:57,910 e nella maggior parte dei casi in CS50 noi fare, dobbiamo dire tipo Def. 1444 01:03:57,910 --> 01:04:01,190 E che gli permette di utilizzare lo stesso modo in cui usiamo come int o float. 1445 01:04:01,190 --> 01:04:04,168 Il computer sempre sa di cosa si tratta. 1446 01:04:04,168 --> 01:04:04,668 Già. 1447 01:04:04,668 --> 01:04:06,560 >> PUBBLICO: Possiamo scrivere questo nel file di intestazione? 1448 01:04:06,560 --> 01:04:07,060 >> SPEAKER 1: Oh, mi dispiace. 1449 01:04:07,060 --> 01:04:08,600 Scriviamo questo nel file di intestazione? 1450 01:04:08,600 --> 01:04:11,410 Si potrebbe scrivere questo nella parte superiore del vostro il programma, nella parte superiore del vostro programma c. 1451 01:04:11,410 --> 01:04:13,010 Sì, che sarebbe la più posto ragionevole per esso. 1452 01:04:13,010 --> 01:04:13,509 Là dietro. 1453 01:04:13,509 --> 01:04:15,704 PUBBLICO: Stessa domanda, quindi prima principale? 1454 01:04:15,704 --> 01:04:18,870 SPEAKER 1: Giusto, avete bisogno di questo per essere da qualche parte che tutti possono accedervi. 1455 01:04:18,870 --> 01:04:20,612 Quindi, prima principale nel tuo caso, sì. 1456 01:04:20,612 --> 01:04:23,820 PUBBLICO: C'è una differenza tra mettendo studente in alto e in basso? 1457 01:04:23,820 --> 01:04:25,810 SPEAKER 1: Ah, c'è un differenza tra studente mettendo 1458 01:04:25,810 --> 01:04:26,840 in alto o in basso? 1459 01:04:26,840 --> 01:04:29,650 Let-- salvare quella domanda, e quando si arriva a liste concatenate, 1460 01:04:29,650 --> 01:04:31,020 vedremo che, OK? 1461 01:04:31,020 --> 01:04:32,750 Così mantenere quella per un secondo. 1462 01:04:32,750 --> 01:04:37,080 L'ultima cosa che voglio citare qui, è invece di avere una struttura, 1463 01:04:37,080 --> 01:04:41,180 abbiamo un puntatore a una struttura, possiamo cambiare la nostra notazione 1464 01:04:41,180 --> 01:04:42,480 per essere un po 'più bello. 1465 01:04:42,480 --> 01:04:45,810 >> Possiamo dire, diciamo che abbiamo un puntatore a uno studente e non solo 1466 01:04:45,810 --> 01:04:47,040 uno studente. 1467 01:04:47,040 --> 01:04:52,460 Se vogliamo l'accesso a un campo, invece di facendo, anche andare dereferenziare il puntatore, 1468 01:04:52,460 --> 01:04:54,100 e quindi accedere al nome del campo. 1469 01:04:54,100 --> 01:04:57,310 Questa notazione sembra un po ' disordinato con la stella in questo punto. 1470 01:04:57,310 --> 01:05:00,790 Completamente corretto, ma una sorta di modo più pulito per farlo, 1471 01:05:00,790 --> 01:05:03,280 è solo per dire nome puntatore freccia. 1472 01:05:03,280 --> 01:05:11,460 E che in realtà combina dereferenziazione e l'accesso a un bel simbolo. 1473 01:05:11,460 --> 01:05:12,470 Domande su questo? 1474 01:05:12,470 --> 01:05:13,760 >> PUBBLICO: Basta dire che ancora una volta. 1475 01:05:13,760 --> 01:05:14,480 >> SPEAKER 1: Dire che ancora una volta. 1476 01:05:14,480 --> 01:05:16,021 >> PUBBLICO: Esattamente quello che hai appena detto. 1477 01:05:16,021 --> 01:05:17,870 SPEAKER 1: Certo, esattamente quello che ho appena detto. 1478 01:05:17,870 --> 01:05:21,580 Se abbiamo un puntatore ad uno studente piuttosto che lo studente stesso, 1479 01:05:21,580 --> 01:05:25,410 abbiamo can-- un modo che si possa accedere al campo è a dereferenziarlo, e poi 1480 01:05:25,410 --> 01:05:27,110 Nome accesso. 1481 01:05:27,110 --> 01:05:29,040 Un altro, molto più gradevole noi può farlo, che è solo 1482 01:05:29,040 --> 01:05:33,550 un po 'di zucchero sintattico, è solo fare puntatore a nome freccia. 1483 01:05:33,550 --> 01:05:38,190 E che sta per combinare la dereferencing e che accede. 1484 01:05:38,190 --> 01:05:40,400 Sì, abbastanza fresco. 1485 01:05:40,400 --> 01:05:41,260 Tutto ok. 1486 01:05:41,260 --> 01:05:44,390 >> Quindi parliamo di l'altra domanda. 1487 01:05:44,390 --> 01:05:46,520 Saltiamo a nodi, che andremo ad utilizzare 1488 01:05:46,520 --> 01:05:49,120 in liste collegate in appena un secondo. 1489 01:05:49,120 --> 01:05:53,580 Così qui, noterete che ci è il nodo di parola sia sul fondo, 1490 01:05:53,580 --> 01:05:55,160 e sulla parte superiore. 1491 01:05:55,160 --> 01:05:59,040 Prima, quando stavamo definendo studente, abbiamo avuto solo studente sul fondo. 1492 01:05:59,040 --> 01:06:00,470 Non abbiamo avuto studente sulla parte superiore. 1493 01:06:00,470 --> 01:06:01,902 Qualcuno sa perché che potrebbe essere? 1494 01:06:01,902 --> 01:06:02,860 Qual è la differenza? 1495 01:06:02,860 --> 01:06:03,360 Già. 1496 01:06:03,360 --> 01:06:06,212 PUBBLICO: Quindi si utilizza il nodo è la definizione di nodo, 1497 01:06:06,212 --> 01:06:08,254 quindi è una cosa ricorsivo? 1498 01:06:08,254 --> 01:06:08,920 SPEAKER 1: Good. 1499 01:06:08,920 --> 01:06:13,230 Sì, abbiamo bisogno dei nostri nodi avere puntatore ad altri nodi. 1500 01:06:13,230 --> 01:06:17,640 Quindi, dal momento che usiamo questo tipo prima che sia realmente definito, 1501 01:06:17,640 --> 01:06:20,613 abbiamo bisogno di mettere al top solo così si sa cosa sia. 1502 01:06:20,613 --> 01:06:22,446 PUBBLICO: Così abbiamo ancora bisogno in fondo? 1503 01:06:22,446 --> 01:06:23,338 SPEAKER 1: Sì. 1504 01:06:23,338 --> 01:06:24,754 PUBBLICO: Quindi, sempre in basso. 1505 01:06:24,754 --> 01:06:26,090 SPEAKER 1: Sempre nella parte inferiore. 1506 01:06:26,090 --> 01:06:29,410 Quindi, tutto sarà tuo hanno in fondo. 1507 01:06:29,410 --> 01:06:30,720 Qualsiasi altra domanda? 1508 01:06:30,720 --> 01:06:33,511 Va bene, così lascia in realtà parlare su liste collegate molto velocemente. 1509 01:06:33,511 --> 01:06:36,510 Così liste concatenate are-- li usiamo invece di array in alcuni casi, 1510 01:06:36,510 --> 01:06:40,030 perché sappiamo che gli array sono un lunghezza fissa, mentre le liste collegate 1511 01:06:40,030 --> 01:06:42,670 siamo in grado di crescere e restringersi come vogliamo. 1512 01:06:42,670 --> 01:06:45,790 Quindi questo è un esempio di ciò che una lista collegata potrebbe essere simile. 1513 01:06:45,790 --> 01:06:48,590 Quello che dobbiamo vedere è la testa della lista. 1514 01:06:48,590 --> 01:06:50,330 Allora, dove l'elenco inizia. 1515 01:06:50,330 --> 01:06:53,010 E poi nodo, ogni nodo successivo, è 1516 01:06:53,010 --> 01:06:55,880 responsabile di conoscere dove il nodo successivo è. 1517 01:06:55,880 --> 01:07:00,950 Quindi, in questo caso, il nodo che memorizza 1 è responsabile per sapere dove 3 è. 1518 01:07:00,950 --> 01:07:04,540 La persona che memorizza 3 è responsabile per sapere dove 9 è. 1519 01:07:04,540 --> 01:07:06,230 E 9 ha nessun altro per puntare a. 1520 01:07:06,230 --> 01:07:08,750 E 'la fine della lista, così si dice proprio nulla. 1521 01:07:08,750 --> 01:07:09,250 ok? 1522 01:07:09,250 --> 01:07:10,530 >> PUBBLICO: Qual è il punto di questo? 1523 01:07:10,530 --> 01:07:11,480 >> SPEAKER 1: Qual è il punto di questo? 1524 01:07:11,480 --> 01:07:12,105 >> PUBBLICO: Sì. 1525 01:07:12,105 --> 01:07:15,390 SPEAKER 1: Perché, diciamo dire che abbiamo alcuni dati. 1526 01:07:15,390 --> 01:07:18,480 E noi non sappiamo esattamente come molti dati vogliamo prima del tempo. 1527 01:07:18,480 --> 01:07:22,479 Quindi, con una matrice, diciamo dove siamo vogliono contare le persone in prima fila. 1528 01:07:22,479 --> 01:07:24,020 È probabile che non cambierà. 1529 01:07:24,020 --> 01:07:28,120 Possiamo solo dire, OK, vuole un array di dimensione sei. 1530 01:07:28,120 --> 01:07:30,120 Ma se vogliamo qualcosa che sta per cambiare. 1531 01:07:30,120 --> 01:07:32,900 >> Per esempio, diciamo che stavo cercando per tenere traccia degli studenti 1532 01:07:32,900 --> 01:07:35,330 come vengono nella stanza per la sessione di revisione. 1533 01:07:35,330 --> 01:07:38,420 Non ho idea di quanti di voi la gente va a vedere. 1534 01:07:38,420 --> 01:07:43,094 Così potrei desiderare una struttura di dati che io possa espandersi e restringersi. 1535 01:07:43,094 --> 01:07:45,510 Perché forse qualcuno sarà lasciare, forse qualcuno verrà. 1536 01:07:45,510 --> 01:07:48,386 E così, in qualsiasi momento, abbiamo può aggiungere o rimuovere i nodi. 1537 01:07:48,386 --> 01:07:49,771 Fresco, grande domanda. 1538 01:07:49,771 --> 01:07:50,270 Già. 1539 01:07:50,270 --> 01:07:52,311 >> PUBBLICO: Se è possibile utilizzare qualcosa come GetString 1540 01:07:52,311 --> 01:07:55,750 che mantiene consentendo di ottenere più dati come ne avete bisogno, perché avete bisogno di questo? 1541 01:07:55,750 --> 01:07:57,625 >> SPEAKER 1: Perché sarebbe si utilizza quando collegato lista 1542 01:07:57,625 --> 01:07:59,440 si può usare qualcosa come GetString? 1543 01:07:59,440 --> 01:08:01,640 Questa è una buona domanda. 1544 01:08:01,640 --> 01:08:04,240 Ricordate che Get-- uno dei le cadute di GetString 1545 01:08:04,240 --> 01:08:06,750 è che non abbiamo fatto molto buon lavoro di liberare quella memoria, 1546 01:08:06,750 --> 01:08:09,320 e abbiamo introdotto una serie di perdite di memoria nel vostro programma? 1547 01:08:09,320 --> 01:08:15,037 Si potrebbe prendere un staticamente array di dimensioni e continuare a crescere esso. 1548 01:08:15,037 --> 01:08:16,870 Ma dovresti trovare nuovi luoghi in memoria. 1549 01:08:16,870 --> 01:08:18,359 Sarebbe solo un sacco di spese generali. 1550 01:08:18,359 --> 01:08:21,050 >> Una delle cose belle di legato liste al contrario di array, array è 1551 01:08:21,050 --> 01:08:22,830 sono tutti nella stessa posizione nella memoria. 1552 01:08:22,830 --> 01:08:25,540 Deve essere continua blocchi di memoria. 1553 01:08:25,540 --> 01:08:29,920 Mentre liste concatenate, 2 e 3 maggio essere totalmente in luoghi diversi. 1554 01:08:29,920 --> 01:08:31,880 Come 2 è finita qui, e 3 è qui. 1555 01:08:31,880 --> 01:08:34,421 E finché hanno un puntatore tra loro, va bene. 1556 01:08:34,421 --> 01:08:35,830 Sappiamo che possiamo trovare. 1557 01:08:35,830 --> 01:08:37,084 Domanda laggiù? 1558 01:08:37,084 --> 01:08:40,563 >> PUBBLICO: GetString è una funzione nella biblioteca CS50, giusto? 1559 01:08:40,563 --> 01:08:42,060 Non esiste in programmi reali. 1560 01:08:42,060 --> 01:08:42,851 >> SPEAKER 1: Corretto. 1561 01:08:42,851 --> 01:08:44,130 A destra, questa è l'altra cosa. 1562 01:08:44,130 --> 01:08:47,210 GetString non esiste al di fuori del contesto di CS50. 1563 01:08:47,210 --> 01:08:47,710 Già. 1564 01:08:47,710 --> 01:08:54,556 >> PUBBLICO: Così fa il fatto che due potrebbe essere davvero distanti tra loro, 1565 01:08:54,556 --> 01:08:59,859 fa che l'impatto l'efficacia di Accedendo gli elementi della lista? 1566 01:08:59,859 --> 01:09:01,359 SPEAKER 1: Questa è una grande domanda. 1567 01:09:01,359 --> 01:09:04,278 La domanda era, lo fa impatto l'efficienza di accesso 1568 01:09:04,278 --> 01:09:05,819 questi diversi elementi nella lista. 1569 01:09:05,819 --> 01:09:06,930 Attualmente si. 1570 01:09:06,930 --> 01:09:09,569 Perché sappiamo se: facciamo diciamo che vogliamo per accedere 1571 01:09:09,569 --> 01:09:14,520 il secondo elemento della matrice, sappiamo possiamo solo fare staffa 1 campo, a destra. 1572 01:09:14,520 --> 01:09:16,630 Sta andando sempre la stessa posizione. 1573 01:09:16,630 --> 01:09:20,720 Ma se vogliamo arrivare a quel 3, non possiamo dire, andare a prendere quel 3. 1574 01:09:20,720 --> 01:09:24,009 Dobbiamo dire, OK, inizio alle l'inizio della lista, 1575 01:09:24,009 --> 01:09:26,050 e ora in realtà abbiamo camminare attraverso finché noi 1576 01:09:26,050 --> 01:09:28,149 trovare il numero che ci interessa. 1577 01:09:28,149 --> 01:09:30,790 >> Quindi, in questo caso si dice, OK questo è il primo numero. 1578 01:09:30,790 --> 01:09:32,207 Quindi, in sostanza, questo è indice 0. 1579 01:09:32,207 --> 01:09:33,790 Ora dobbiamo trovare il secondo numero. 1580 01:09:33,790 --> 01:09:34,740 Questo è indice 1. 1581 01:09:34,740 --> 01:09:39,180 Ecco, questo è realmente accadendo a-- solo accesso, sta per prendere tempo N. 1582 01:09:39,180 --> 01:09:42,027 Fresco, grande N. vecchio Già. 1583 01:09:42,027 --> 01:09:43,903 >> PUBBLICO: Quali sono ciascuna delle liste? 1584 01:09:43,903 --> 01:09:45,401 Sono ogni array, o che cosa? 1585 01:09:45,401 --> 01:09:46,859 SPEAKER 1: Questa è una grande domanda. 1586 01:09:46,859 --> 01:09:48,950 Quali sono ciascuna delle strutture che ho disegnato? 1587 01:09:48,950 --> 01:09:51,649 Sono nodi. 1588 01:09:51,649 --> 01:09:53,720 Così ognuno di questi piccoli struttura ha due parti. 1589 01:09:53,720 --> 01:09:55,264 Ha un intero che contiene. 1590 01:09:55,264 --> 01:09:57,180 Ecco i dati effettivi che sta trattenendo. 1591 01:09:57,180 --> 01:09:58,770 Questo è il tipo di parte utile. 1592 01:09:58,770 --> 01:10:00,820 E questo è ciò che rende una lista collegata, 1593 01:10:00,820 --> 01:10:03,690 ha un puntatore al nodo successivo. 1594 01:10:03,690 --> 01:10:05,260 Impressionante domanda. 1595 01:10:05,260 --> 01:10:11,320 Va bene, diamo un'occhiata molto rapidamente guardare alcuni esempi di ciò che 1596 01:10:11,320 --> 01:10:12,820 che potremmo fare con liste collegate. 1597 01:10:12,820 --> 01:10:16,920 >> Così un esempio molto rapido è, supponiamo di voler fare una ricerca. 1598 01:10:16,920 --> 01:10:20,240 Che tipo di ricerca non può facciamo su liste collegate? 1599 01:10:20,240 --> 01:10:21,150 >> PUBBLICO: Binario. 1600 01:10:21,150 --> 01:10:21,900 >> SPEAKER 1: Binario. 1601 01:10:21,900 --> 01:10:23,408 Perché non possiamo usare la ricerca binaria? 1602 01:10:23,408 --> 01:10:25,181 >> PUBBLICO: [incomprensibile]. 1603 01:10:25,181 --> 01:10:28,180 SPEAKER 1: Già, perché con binario ricerca, abbiamo dovuto fare affidamento sul fatto 1604 01:10:28,180 --> 01:10:31,300 che potremmo saltare solo nell'array in qualsiasi punto. 1605 01:10:31,300 --> 01:10:33,420 Potremmo dire, andare all'elemento centrale. 1606 01:10:33,420 --> 01:10:35,550 In questa sede, come abbiamo detto un po 'prima, 1607 01:10:35,550 --> 01:10:37,270 non possiamo saltare l'elemento centrale. 1608 01:10:37,270 --> 01:10:38,978 Al fine di trovare qualsiasi elemento, in realtà 1609 01:10:38,978 --> 01:10:40,780 camminare attraverso tutta la nostra lista. 1610 01:10:40,780 --> 01:10:43,910 >> Quindi, se volessimo fare una ricerca, la cosa migliore che possiamo fare è solo una ricerca lineare. 1611 01:10:43,910 --> 01:10:45,910 Partiamo dalla testa, abbiamo check-- diciamo che siamo 1612 01:10:45,910 --> 01:10:47,790 alla ricerca di 9-- partiamo alla testa. 1613 01:10:47,790 --> 01:10:49,200 Noi diciamo, è il 9? 1614 01:10:49,200 --> 01:10:49,710 No. 1615 01:10:49,710 --> 01:10:50,430 E 'questo 9? 1616 01:10:50,430 --> 01:10:50,930 No. 1617 01:10:50,930 --> 01:10:51,620 E 'questo 9? 1618 01:10:51,620 --> 01:10:53,730 Sì, abbiamo trovato. 1619 01:10:53,730 --> 01:10:56,350 Ok, questo è tutto quello. 1620 01:10:56,350 --> 01:10:57,940 Ecco un po 'di pseudo-codice. 1621 01:10:57,940 --> 01:11:01,420 Ho intenzione di lasciare questo per voi ragazzi a sfornare sopra per conto proprio, 1622 01:11:01,420 --> 01:11:04,370 solo perché stiamo correndo un po 'a corto di tempo. 1623 01:11:04,370 --> 01:11:05,610 >> Parliamo di inserimento. 1624 01:11:05,610 --> 01:11:08,644 Abbiamo visto una demo davvero cool di questo in conferenza in cui abbiamo detto, 1625 01:11:08,644 --> 01:11:11,560 OK, abbiamo questa lista concatenata dove tutti sta puntando tra loro, 1626 01:11:11,560 --> 01:11:13,400 e qualcuno arriva sul palco. 1627 01:11:13,400 --> 01:11:17,050 Come possiamo che inseriamo persona nella nostra lista collegata? 1628 01:11:17,050 --> 01:11:20,150 Beh, un modo sbagliato di fare, che Penso che è quello che abbiamo visto prima, 1629 01:11:20,150 --> 01:11:22,740 è quando la persona in anteriore automaticamente 1630 01:11:22,740 --> 01:11:25,270 indicò la nuova persona. 1631 01:11:25,270 --> 01:11:29,057 E poi abbiamo abbandonato l'tipo di seconda metà della lista, giusto? 1632 01:11:29,057 --> 01:11:31,390 Perché noi non sappiamo dove è nella memoria più. 1633 01:11:31,390 --> 01:11:34,750 Quindi, per essere molto attenti alla ordine in cui inserire le cose. 1634 01:11:34,750 --> 01:11:37,860 >> Ecco, diciamo che vogliamo mettere 1 nella parte anteriore della nostra lista. 1635 01:11:37,860 --> 01:11:42,190 In primo luogo, abbiamo 1 punto al secondo element-- o l'elemento 1636 01:11:42,190 --> 01:11:44,170 che contiene 1. 1637 01:11:44,170 --> 01:11:47,210 Così, lo facciamo, solo così non siamo andando a perdere il secondo tempo. 1638 01:11:47,210 --> 01:11:51,020 E ora, siamo in grado di avere la testa punto a 1. 1639 01:11:51,020 --> 01:11:52,930 Così ancora una volta, questo è solo come super alto livello. 1640 01:11:52,930 --> 01:11:55,290 Questo è come vorremmo inserire un nodo. 1641 01:11:55,290 --> 01:11:57,337 Abbiamo un sacco di pseudo-codice qui-- dispiace, 1642 01:11:57,337 --> 01:11:59,170 Non so perché sono definendolo pseudo-codice. 1643 01:11:59,170 --> 01:12:00,350 E 'il codice vero e proprio. 1644 01:12:00,350 --> 01:12:02,570 Si può andare a controllare più tardi. 1645 01:12:02,570 --> 01:12:04,870 >> Va bene, facciamo molto quickly-- altre domande 1646 01:12:04,870 --> 01:12:07,120 su liste concatenate prima io spostare su un altro paio di dati 1647 01:12:07,120 --> 01:12:08,450 strutture nelle nostre ultimi 10 minuti. 1648 01:12:08,450 --> 01:12:10,340 >> PUBBLICO: Dobbiamo ora come scrivere su un test? 1649 01:12:10,340 --> 01:12:11,040 >> SPEAKER 1: abbiamo bisogno di sapere come a-- 1650 01:12:11,040 --> 01:12:12,030 >> PUBBLICO: Scrivere su un test. 1651 01:12:12,030 --> 01:12:14,071 >> SPEAKER 1: c'è bisogno a-- si dovrebbe essere pronti 1652 01:12:14,071 --> 01:12:18,870 scrivere, inserire, rimuovere, e la ricerca di liste concatenate sul test. 1653 01:12:18,870 --> 01:12:21,480 Questo è qualcosa che abbiamo poteva aspettarsi di fare. 1654 01:12:21,480 --> 01:12:22,750 Basta andare su di esso. 1655 01:12:22,750 --> 01:12:26,460 Se avete domande sul codice, spara il tuo TF una e-mail, 1656 01:12:26,460 --> 01:12:27,750 venire a orari di ufficio. 1657 01:12:27,750 --> 01:12:30,041 C'è ancora un sacco di tempo di studiare, di non preoccuparsi. 1658 01:12:30,041 --> 01:12:32,290 Va bene, qualsiasi altra domande circa le liste collegate? 1659 01:12:32,290 --> 01:12:32,986 Sì. 1660 01:12:32,986 --> 01:12:37,360 >> PUBBLICO: Quindi, se non si utilizza il puntatore per andare a quella a destra 1661 01:12:37,360 --> 01:12:41,308 prima di utilizzare il puntatore per quella a sinistra, che è 1662 01:12:41,308 --> 01:12:43,211 l'equivalente di cancellazione tutto bene? 1663 01:12:43,211 --> 01:12:43,877 SPEAKER 1: Sì. 1664 01:12:43,877 --> 01:12:44,820 PUBBLICO: [incomprensibile]. 1665 01:12:44,820 --> 01:12:47,570 SPEAKER 1: Giusto, dato che non possiamo farlo, in realtà è ancora peggio. 1666 01:12:47,570 --> 01:12:50,690 Perché non solo non sappiamo dove si trova, non possiamo più usarlo, 1667 01:12:50,690 --> 01:12:53,580 ma we've-- non siamo liberando più che la memoria. 1668 01:12:53,580 --> 01:12:58,570 Quindi è solo in giro e non essere utile perché non riusciamo a trovarlo. 1669 01:12:58,570 --> 01:12:59,580 Sì, domanda fresco. 1670 01:12:59,580 --> 01:13:01,280 >> Va bene, parliamo di stack. 1671 01:13:01,280 --> 01:13:03,230 Abbiamo visto stack molto rapidamente. 1672 01:13:03,230 --> 01:13:06,280 Sono primi in ultima strutture dati fuori. 1673 01:13:06,280 --> 01:13:10,664 Quindi pensiamo degli stack in Annenberg di vassoi dove pila cose sulla parte superiore. 1674 01:13:10,664 --> 01:13:12,580 E se avete intenzione di arriva ottenere un vassoio, sei 1675 01:13:12,580 --> 01:13:15,870 sempre andando a prendere quello sulla superiore, che è la più recently-- 1676 01:13:15,870 --> 01:13:18,840 che è la cosa che più recentemente messo in cima alla pila. 1677 01:13:18,840 --> 01:13:22,680 Così si può sorta di pensare a questo tipo di visivo quando si sta pensando di pile. 1678 01:13:22,680 --> 01:13:26,010 E allora, abbiamo spuntato qualcosa la parte superiore della pila. 1679 01:13:26,010 --> 01:13:29,850 >> Se are-- oh, e le parole che abbiamo usare quando si parla di questi dati 1680 01:13:29,850 --> 01:13:32,680 strutture di solito, se mettere qualcosa in pila, 1681 01:13:32,680 --> 01:13:34,550 diciamo che stiamo spingendo in pila. 1682 01:13:34,550 --> 01:13:38,450 E se prendiamo qualcosa dallo stack, diciamo che stiamo popping dallo stack. 1683 01:13:38,450 --> 01:13:41,470 Se avete intenzione di implementare un stack-- che ho sicuramente 1684 01:13:41,470 --> 01:13:44,840 consigliamo di provare fuori-- sei andando a voler tenere traccia di, 1685 01:13:44,840 --> 01:13:46,669 diciamo che si sta utilizzando un array. 1686 01:13:46,669 --> 01:13:48,960 So che in conferenza abbiamo parlato sull'utilizzo di entrambi gli array 1687 01:13:48,960 --> 01:13:51,120 o liste concatenate per implementare uno stack. 1688 01:13:51,120 --> 01:13:53,490 Se stai usando un array, è necessario keep-- 1689 01:13:53,490 --> 01:13:56,750 scusa me-- abbiamo bisogno di tenere traccia delle dimensioni e della capacità. 1690 01:13:56,750 --> 01:14:00,820 Quindi il numero massimo che il nostro stack può contenere. 1691 01:14:00,820 --> 01:14:03,240 Domande sulle pile? 1692 01:14:03,240 --> 01:14:05,657 >> PUBBLICO: Qual è la differenza tra le dimensioni e la capacità? 1693 01:14:05,657 --> 01:14:08,573 SPEAKER 1: La differenza tra dimensione e la capacità, domanda impressionante. 1694 01:14:08,573 --> 01:14:10,330 Quindi diciamo che siamo utilizzando una matrice, e 1695 01:14:10,330 --> 01:14:13,340 allocare spazio sufficiente per 10 numeri interi. 1696 01:14:13,340 --> 01:14:15,050 E cominciamo a riempire che fino. 1697 01:14:15,050 --> 01:14:17,330 E spingiamo cose, e abbiamo pop cose fuori. 1698 01:14:17,330 --> 01:14:21,060 Vogliamo tenere traccia del massimo numero possiamo tenere, che è la capacità. 1699 01:14:21,060 --> 01:14:24,790 E vogliamo tenere traccia del numero attuale che abbiamo, che è formato. 1700 01:14:24,790 --> 01:14:26,530 Bella domanda. 1701 01:14:26,530 --> 01:14:28,720 Tutto il resto su pile? 1702 01:14:28,720 --> 01:14:31,260 Va bene, parliamo su sorpresa, le code. 1703 01:14:31,260 --> 01:14:37,034 >> A differenza di stack, che sono prima in ultima out, questi sono first in, first out. 1704 01:14:37,034 --> 01:14:38,450 Quindi questo è like-- pensare ad una linea. 1705 01:14:38,450 --> 01:14:41,530 Pensate di fila presso l'Apple Store per ottenere qualsiasi prodotto. 1706 01:14:41,530 --> 01:14:44,540 E la prima persona in linea dovrebbe essere la prima persona che ha aiutato. 1707 01:14:44,540 --> 01:14:48,270 Quindi, prima cosa che ha spinto sia questa la prima cosa che è spuntato. 1708 01:14:48,270 --> 01:14:49,460 Raffreddare? 1709 01:14:49,460 --> 01:14:52,890 Molto similarly-- oh, le parole che usiamo invece di spinta e pop-- 1710 01:14:52,890 --> 01:14:55,060 che ho appena usato, Sono sorry-- è diciamo, 1711 01:14:55,060 --> 01:14:58,170 se stiamo mettendo qualcosa in la coda, diciamo accodato esso. 1712 01:14:58,170 --> 01:15:00,795 Se stiamo prendendo qualcosa fuori la coda, diciamo noi rimosse dalla coda. 1713 01:15:00,795 --> 01:15:01,950 Si. 1714 01:15:01,950 --> 01:15:05,454 I può essere pronunciando quelle sbagliato, ma si ottiene l'idea. 1715 01:15:05,454 --> 01:15:08,370 E poi di nuovo, proprio come pile, se stiamo applicazione del presente come matrice, 1716 01:15:08,370 --> 01:15:12,350 abbiamo bisogno di tenere traccia del dimensioni, la capacità e la testa. 1717 01:15:12,350 --> 01:15:13,570 Cosa intendo per la testa? 1718 01:15:13,570 --> 01:15:15,278 Perché abbiamo bisogno di mantenere traccia della testa? 1719 01:15:15,278 --> 01:15:18,549 1720 01:15:18,549 --> 01:15:21,685 >> PUBBLICO: perché è lì l'inizio della vostra lista è. 1721 01:15:21,685 --> 01:15:24,810 SPEAKER 1: Sì, fondamentalmente la testa è in cui l'inizio di una coda è. 1722 01:15:24,810 --> 01:15:29,460 Perché sappiamo, a differenza di stack, which-- Io vado a cercare di affrontare questa way-- 1723 01:15:29,460 --> 01:15:33,570 sappiamo che sta andando sempre ridurre in questo modo e crescere in questo modo. 1724 01:15:33,570 --> 01:15:37,840 Code, la gente viene sull'estremità e lasciare fin dall'inizio, 1725 01:15:37,840 --> 01:15:40,620 quindi dobbiamo tenere traccia di cui l'inizio è. 1726 01:15:40,620 --> 01:15:43,540 Questo è ciò che intendo per che dobbiamo tenere traccia di dove la testa è. 1727 01:15:43,540 --> 01:15:45,190 Raffreddare? 1728 01:15:45,190 --> 01:15:46,440 Tutto ok. 1729 01:15:46,440 --> 01:15:49,250 Otto minuti, coppia più argomenti, possiamo farlo. 1730 01:15:49,250 --> 01:15:51,240 >> Va bene, tabella hash. 1731 01:15:51,240 --> 01:15:53,095 Abbiamo parlato molto brevemente su tabelle hash. 1732 01:15:53,095 --> 01:15:55,720 Per il quiz, è sufficiente loro capire ad un livello elevato. 1733 01:15:55,720 --> 01:15:58,330 L'idea di base è che hai questi dati. 1734 01:15:58,330 --> 01:16:02,570 E vogliamo accedere in tempo che è più veloce di qualcosa come un collegato 1735 01:16:02,570 --> 01:16:03,070 lista. 1736 01:16:03,070 --> 01:16:05,290 Perché abbiamo detto, se dovessimo la ricerca attraverso una lista collegata, 1737 01:16:05,290 --> 01:16:06,248 che potrebbe prendere tempo N. 1738 01:16:06,248 --> 01:16:08,810 Anche l'accesso può assumere Tempo N in una lista collegata. 1739 01:16:08,810 --> 01:16:12,930 Le tabelle hash darci un modo che possiamo accedere più rapidamente le cose, e molto altro 1740 01:16:12,930 --> 01:16:16,970 cercare rapidamente le cose, senza con i vincoli di un array 1741 01:16:16,970 --> 01:16:19,030 dove abbiamo fissato dimensioni. 1742 01:16:19,030 --> 01:16:23,950 >> Quindi pensiamo di una struttura dati in cui, dove lo mettiamo nella struttura dati 1743 01:16:23,950 --> 01:16:26,620 dipende da questo funzione hash magico. 1744 01:16:26,620 --> 01:16:30,630 Quindi, in questo caso, l'hash magica funzione è solo prendendo una parola, 1745 01:16:30,630 --> 01:16:34,027 controllando ciò che la prima lettera è, e poi basta smistamento in ordine alfabetico. 1746 01:16:34,027 --> 01:16:36,110 Così abbiamo essenzialmente li mettiamo in diversi secchi. 1747 01:16:36,110 --> 01:16:39,510 Quando vediamo banana, diciamo, OK, mettiamo nel secchio B. 1748 01:16:39,510 --> 01:16:41,820 Quando vediamo di Apple, andiamo metterla in un secchio. 1749 01:16:41,820 --> 01:16:44,744 Se abbiamo visto albicocca, diamo messo in un secchio. 1750 01:16:44,744 --> 01:16:45,600 ok? 1751 01:16:45,600 --> 01:16:51,090 >> Quindi suppongo io stavamo cercando for-- I Non lo so, che cosa è un altro frutto? 1752 01:16:51,090 --> 01:16:52,920 Supponiamo che io stavo cercando arancione. 1753 01:16:52,920 --> 01:16:55,340 Dove devo cercare? 1754 01:16:55,340 --> 01:16:56,420 Nel secchio O. 1755 01:16:56,420 --> 01:17:01,450 Sì, c'è un solo posto che arancio potrebbe essere, OK? 1756 01:17:01,450 --> 01:17:05,370 Così ho detto prima quello che succede se: bene ho detto prima, 1757 01:17:05,370 --> 01:17:10,030 diciamo che abbiamo messo albicocca dentro-- ma io davvero affrontare il fatto che, oh no, 1758 01:17:10,030 --> 01:17:14,990 se dovessi mettere in bacca, è che va in conflitto con la banana. 1759 01:17:14,990 --> 01:17:20,160 Dove la mettiamo se c'è già qualcosa nella nostra tabella? 1760 01:17:20,160 --> 01:17:22,760 Bene, abbiamo un paio di opzioni. 1761 01:17:22,760 --> 01:17:26,160 >> Opzione numero uno è lineare sondaggio, che in pratica significa, 1762 01:17:26,160 --> 01:17:28,690 diciamo che voglio provare a mettere bacca, e io vedo, oh no, 1763 01:17:28,690 --> 01:17:31,170 banane già lì, Dico solo OK, lascia 1764 01:17:31,170 --> 01:17:33,810 mi aspetto per il prossimo posto disponibile. 1765 01:17:33,810 --> 01:17:36,744 Così cammino per, dico, oh, non c'è nulla nel secchio D. 1766 01:17:36,744 --> 01:17:39,410 Non posso davvero pensare di qualsiasi frutta che iniziano con la lettera D, 1767 01:17:39,410 --> 01:17:41,620 quindi sto solo andando a mettere bacca in là. 1768 01:17:41,620 --> 01:17:42,650 Durian. 1769 01:17:42,650 --> 01:17:44,590 Ok, dato che non c'è nulla in là ancora, 1770 01:17:44,590 --> 01:17:47,020 Potrei anche semplicemente utilizzare quel posto. 1771 01:17:47,020 --> 01:17:48,805 Qual è lo svantaggio di questo? 1772 01:17:48,805 --> 01:17:49,300 >> PUBBLICO: E 'fuori uso. 1773 01:17:49,300 --> 01:17:50,008 >> SPEAKER 1: Siamo spiacenti? 1774 01:17:50,008 --> 01:17:51,280 PUBBLICO: E 'fuori uso. 1775 01:17:51,280 --> 01:17:53,113 >> SPEAKER 1: E 'fuori-- a destra, potremmo finire 1776 01:17:53,113 --> 01:17:56,380 con le cose che non sono dentro-- memorizzato in segmenti in modo 1777 01:17:56,380 --> 01:17:57,790 che ci aspettiamo che siano. 1778 01:17:57,790 --> 01:18:00,670 Quindi, se eravamo alla ricerca per bacca, prima abbiamo detto, 1779 01:18:00,670 --> 01:18:02,000 oh possiamo guardare in un secchio. 1780 01:18:02,000 --> 01:18:03,650 Potrebbe essere solo in un secchio. 1781 01:18:03,650 --> 01:18:07,380 Ma ora, in realtà, potrebbe essere in tutti i secchi, giusto? 1782 01:18:07,380 --> 01:18:10,400 >> Ok, qui è un'altra opzione, chaining-- separata 1783 01:18:10,400 --> 01:18:16,630 che è l'idea che stiamo andando di usare un po 'più tardi in P set 5. 1784 01:18:16,630 --> 01:18:19,340 Piuttosto che avere uno spazio in ciascun segmento, 1785 01:18:19,340 --> 01:18:23,610 perché non abbiamo ogni secchio essere un puntatore a una lista collegata? 1786 01:18:23,610 --> 01:18:28,570 Dove si dice, OK, c'è un secchio per tutto ciò che inizia con A. 1787 01:18:28,570 --> 01:18:31,990 E c'è solo sarà un collegato elenco dei frutti che iniziano con A. 1788 01:18:31,990 --> 01:18:36,240 Quindi, se vogliamo ottenere un nuovo frutto, diciamo noi abbiamo get-- avocado, abbiamo mela, 1789 01:18:36,240 --> 01:18:39,530 diciamo che otteniamo albicocca, come potremmo mettere nella lista? 1790 01:18:39,530 --> 01:18:43,330 Bene, noi andavamo a benna 0, e ci piacerebbe basta inserirla nella nostra lista è piaciuto, 1791 01:18:43,330 --> 01:18:45,320 semplice come quella. 1792 01:18:45,320 --> 01:18:47,160 >> Ora io continuo a dire secchio. 1793 01:18:47,160 --> 01:18:49,470 Potremmo implementare questa in un certo numero di modi. 1794 01:18:49,470 --> 01:18:52,040 Un tipico modo che questo tipo di immagine suggerisce, 1795 01:18:52,040 --> 01:18:55,580 sta forse avendo una serie di puntatori a liste collegate. 1796 01:18:55,580 --> 01:18:58,174 Questo è un modo possibile implementare una tabella hash. 1797 01:18:58,174 --> 01:19:01,090 PUBBLICO: Volete bisogno di un altro lista perché banane e bacche sono fuori 1798 01:19:01,090 --> 01:19:01,591 di ordine? 1799 01:19:01,591 --> 01:19:03,298 SPEAKER 1: Volete need-- ah, vuoi 1800 01:19:03,298 --> 01:19:06,310 bisogno di un altro elenco perché la banana e bacche sono in ordine? 1801 01:19:06,310 --> 01:19:09,880 In questo caso, la nostra funzione di hash, che ci dice dove mettere le cose 1802 01:19:09,880 --> 01:19:11,647 non si preoccupa la seconda lettera. 1803 01:19:11,647 --> 01:19:14,730 Essa non si preoccupa di alfabetizzazione, si preoccupa solo la prima lettera. 1804 01:19:14,730 --> 01:19:15,672 Domanda? 1805 01:19:15,672 --> 01:19:18,947 >> PUBBLICO: Qual è la definizione di tale la funzione, e che cosa assomiglia? 1806 01:19:18,947 --> 01:19:19,780 SPEAKER 1: Ah, bene. 1807 01:19:19,780 --> 01:19:22,450 Ok, quindi non abbiamo bisogno di preoccuparsi troppo per questo quiz. 1808 01:19:22,450 --> 01:19:23,700 Quindi non ho messo nelle diapositive. 1809 01:19:23,700 --> 01:19:26,320 Stiamo per essere introdotto ad esso per P set 5. 1810 01:19:26,320 --> 01:19:31,520 Ma in fondo, si dice, dato un nuovo elemento, dove dovrei metterla? 1811 01:19:31,520 --> 01:19:35,450 Oppure, diciamo che sto cercando un elemento, quale potrebbe essere? 1812 01:19:35,450 --> 01:19:37,860 Sì, grande domanda. 1813 01:19:37,860 --> 01:19:40,870 >> OK, molto rapidamente, gli alberi e le mete. 1814 01:19:40,870 --> 01:19:44,779 Quindi, un albero è un qualsiasi tipo di struttura dati organizzata. 1815 01:19:44,779 --> 01:19:47,820 E stiamo andando a vedere un sacco di foto che renderà questo libero eccellente. 1816 01:19:47,820 --> 01:19:51,180 E un trie, che abbiamo visto in classe, è un tipo molto speciale di albero 1817 01:19:51,180 --> 01:19:53,440 che funziona essenzialmente come una tabella hash a più livelli. 1818 01:19:53,440 --> 01:19:54,390 E 'super cool. 1819 01:19:54,390 --> 01:19:56,030 Andiamo a vederlo in appena un secondo. 1820 01:19:56,030 --> 01:19:57,821 Va bene, quindi cerchiamo di parlare di alberi prima. 1821 01:19:57,821 --> 01:20:01,040 Quindi questo è davvero tipico esempio di un albero, dove abbiamo qualche gerarchia. 1822 01:20:01,040 --> 01:20:03,220 Si vede che si è a il più alto, a destra? 1823 01:20:03,220 --> 01:20:06,190 E posso dire superiore perché non c'è chiaramente un ordinamento perché 1824 01:20:06,190 --> 01:20:08,260 hanno queste frecce scendendo. 1825 01:20:08,260 --> 01:20:11,740 Così, la cosa in alto, Io lo chiamo il nodo principale. 1826 01:20:11,740 --> 01:20:13,080 Così uno è il nodo principale. 1827 01:20:13,080 --> 01:20:17,330 E le cose in fondo, che non hanno nulla a venire fuori di loro, 1828 01:20:17,330 --> 01:20:18,783 Dico queste sono nodi foglia. 1829 01:20:18,783 --> 01:20:22,730 Quindi 8,9 5, 6, 7, OK. 1830 01:20:22,730 --> 01:20:27,740 E di solito l'abbiamo terminologia può dire è, 1 è genitore di 3. 1831 01:20:27,740 --> 01:20:30,740 Quindi è la cosa che mi viene un livello sopra di esso, e da punti. 1832 01:20:30,740 --> 01:20:32,710 E 3 è di 1 bambino. 1833 01:20:32,710 --> 01:20:34,505 E 'la cosa che 1 punti a. 1834 01:20:34,505 --> 01:20:35,005 Domanda? 1835 01:20:35,005 --> 01:20:36,414 >> PUBBLICO: Si può tornare a diapositiva precedente, per favore? 1836 01:20:36,414 --> 01:20:37,388 >> SPEAKER 1: Posso tornare alla diapositiva precedente? 1837 01:20:37,388 --> 01:20:37,888 Certo. 1838 01:20:37,888 --> 01:20:40,640 1839 01:20:40,640 --> 01:20:41,390 Domande su questo? 1840 01:20:41,390 --> 01:20:42,764 Oppure si voleva solo di vedere le cose? 1841 01:20:42,764 --> 01:20:44,650 PUBBLICO: Ho appena non ottenere attraverso di essa. 1842 01:20:44,650 --> 01:20:47,100 >> SPEAKER 1: OK, freddo, sì. 1843 01:20:47,100 --> 01:20:49,846 Questi saranno tutti on-line in modo da non fare preoccuparsi di ottenere ogni parola. 1844 01:20:49,846 --> 01:20:51,720 E nell'interesse tempo, ho intenzione di andare. 1845 01:20:51,720 --> 01:20:53,270 È ok? 1846 01:20:53,270 --> 01:20:53,790 Eccezionale. 1847 01:20:53,790 --> 01:20:55,720 Ok bello. 1848 01:20:55,720 --> 01:20:57,790 Quindi parliamo di un kind-- molto specifiche 1849 01:20:57,790 --> 01:20:59,710 così abbiamo questi generale Struttura di alberi, 1850 01:20:59,710 --> 01:21:02,876 che è solo tutto ciò che ci permette al tipo di rango gerarchicamente cose. 1851 01:21:02,876 --> 01:21:06,000 1852 01:21:06,000 --> 01:21:11,110 >> Alberi binari sono cose dove ogni nodo ha al massimo due bambini. 1853 01:21:11,110 --> 01:21:11,690 ok? 1854 01:21:11,690 --> 01:21:14,560 E io ho detto, ok, in modo che sembra per adattarsi a questa descrizione. 1855 01:21:14,560 --> 01:21:16,830 Ho detto nodo, non un albero binario di ricerca. 1856 01:21:16,830 --> 01:21:19,720 Che cosa è un albero binario di ricerca? 1857 01:21:19,720 --> 01:21:20,440 E 'ordinato. 1858 01:21:20,440 --> 01:21:22,890 Così si sa che in un albero binario di ricerca, 1859 01:21:22,890 --> 01:21:26,580 tutto per il tutto tree-- ai nodi di sinistra è più piccolo, 1860 01:21:26,580 --> 01:21:28,830 e tutto per il nodi a destra è più grande. 1861 01:21:28,830 --> 01:21:30,620 Quindi questo non è un albero binario di ricerca. 1862 01:21:30,620 --> 01:21:32,770 Questo è solo un albero binario. 1863 01:21:32,770 --> 01:21:35,910 Così abbiamo grande categoria di alberi, categoria leggermente più piccolo 1864 01:21:35,910 --> 01:21:40,106 di alberi binari, ricerca A-- alberi binari di ricerca. 1865 01:21:40,106 --> 01:21:41,540 Raffreddare? 1866 01:21:41,540 --> 01:21:44,410 Tutto ok. 1867 01:21:44,410 --> 01:21:47,380 >> E ora, più divertente di tutto, abbiamo i nostri tentativi. 1868 01:21:47,380 --> 01:21:49,500 Voi ragazzi SAW quest'immagine nella lezione? 1869 01:21:49,500 --> 01:21:51,790 Sì, dovrebbe essere super-familiare. 1870 01:21:51,790 --> 01:21:54,252 Diamo un'occhiata a come potremmo applicare concretamente questo. 1871 01:21:54,252 --> 01:21:56,210 O in realtà, vediamo, vuol anche venire in su? 1872 01:21:56,210 --> 01:21:56,731 No. 1873 01:21:56,731 --> 01:21:59,480 Va bene, non hanno nemmeno bisogno di preoccuparsi di quella roba di basso livello. 1874 01:21:59,480 --> 01:22:02,320 Avremo tutto il tempo per affrontare poi P impostare 5. 1875 01:22:02,320 --> 01:22:05,780 Ma per ora, solo di altissimo livello, abbiamo sapere che questo è quello che sembra. 1876 01:22:05,780 --> 01:22:08,530 Abbiamo descritto come tipo di una tabella hash a più livelli 1877 01:22:08,530 --> 01:22:12,264 where-- cosa significa questo negozio? 1878 01:22:12,264 --> 01:22:14,430 Questo memorizza i nomi di gli scienziati che si può effettivamente 1879 01:22:14,430 --> 01:22:20,690 cercare da solo tipo di seguire il diverse tabelle hash giù, va bene? 1880 01:22:20,690 --> 01:22:24,730 >> E lo scopo di questo è, in teoria, essi forniscono costante di tempo guardare in alto. 1881 01:22:24,730 --> 01:22:29,630 Quindi, se voglio controllare che, per esempio, che è someone-- 1882 01:22:29,630 --> 01:22:33,410 Mandel che è in questo trie, potrei molto rapidamente 1883 01:22:33,410 --> 01:22:36,260 in linear-- Mi dispiace, in costante di tempo, capire 1884 01:22:36,260 --> 01:22:39,010 anche se non è nel trie. 1885 01:22:39,010 --> 01:22:41,500 Ma una truffa, si guarda quanto è grande questo è. 1886 01:22:41,500 --> 01:22:44,120 Non stiamo nemmeno memorizzazione che molti dati, ed è enorme. 1887 01:22:44,120 --> 01:22:47,950 Così un grande difetto è che essa utilizza una grande quantità di memoria. 1888 01:22:47,950 --> 01:22:48,746 Sì. 1889 01:22:48,746 --> 01:22:50,610 >> PUBBLICO: Perché non prevede costante di tempo, esattamente? 1890 01:22:50,610 --> 01:22:51,376 >> SPEAKER 1: Ancora una volta? 1891 01:22:51,376 --> 01:22:53,360 >> PUBBLICO: Qual è l'intuizione per questo che fornisce costante di tempo? 1892 01:22:53,360 --> 01:22:54,610 >> SPEAKER 1: Eccellente domanda. 1893 01:22:54,610 --> 01:22:56,030 Perché si prevede costante di tempo? 1894 01:22:56,030 --> 01:22:59,280 Quindi cosa possiamo fare è, andiamo Diciamo che stiamo cercando Mandel. 1895 01:22:59,280 --> 01:23:02,830 Sappiamo che vogliamo iniziare nel primo livello al M. 1896 01:23:02,830 --> 01:23:06,890 Sappiamo che vogliamo seguire per E. Quindi, questo è fare un passo, due passi, giusto? 1897 01:23:06,890 --> 01:23:10,710 La seguiamo a N. La seguiamo a D. La seguiamo per E. La seguiamo a L. 1898 01:23:10,710 --> 01:23:15,100 E poi la prossima cosa controlliamo says-- questo delta dice sì, che è 1899 01:23:15,100 --> 01:23:15,990 nella nostra tabella. 1900 01:23:15,990 --> 01:23:16,880 Questa è una parola. 1901 01:23:16,880 --> 01:23:19,900 Questa è una voce valida nel nostro trie. 1902 01:23:19,900 --> 01:23:22,450 Quindi stai dicendo, OK, che ha preso sette passi. 1903 01:23:22,450 --> 01:23:27,200 Ma se abbiamo aggiunto come un triliardo di più scienziati di questa struttura dati, 1904 01:23:27,200 --> 01:23:29,470 non avremmo dovuto controllare un zillion più cose. 1905 01:23:29,470 --> 01:23:33,580 Stiamo sempre e solo andando a prendere sette passaggi, la lunghezza della persona di 1906 01:23:33,580 --> 01:23:35,260 nome. 1907 01:23:35,260 --> 01:23:39,350 >> Così, ci piace pensare di runtime come, supponiamo 1908 01:23:39,350 --> 01:23:42,340 aumentiamo le dimensioni del nostro struttura dati, quanto più lungo 1909 01:23:42,340 --> 01:23:44,580 sta andando a prendere? 1910 01:23:44,580 --> 01:23:47,372 In questo caso, se si aggiunge un gruppo più gli scienziati, non importa. 1911 01:23:47,372 --> 01:23:49,413 E 'ancora in corso a prendere la stessa quantità di tempo. 1912 01:23:49,413 --> 01:23:50,350 E 'tempo costante. 1913 01:23:50,350 --> 01:23:50,850 Sì. 1914 01:23:50,850 --> 01:23:53,557 >> PUBBLICO: Come si fa a non sapete per eseguire la scansione sugli altri numeri? 1915 01:23:53,557 --> 01:23:54,932 SPEAKER 1: Come faccio a sapere come a-- 1916 01:23:54,932 --> 01:23:58,236 PUBBLICO: Come come sapete si va direttamente da M a E e non M per A? 1917 01:23:58,236 --> 01:23:59,069 SPEAKER 1: Oh, certo. 1918 01:23:59,069 --> 01:24:01,620 Perché sapevo che ero cercando la parola Mandel, 1919 01:24:01,620 --> 01:24:04,195 e so solo che è M-E. Così che-- sì, andare avanti. 1920 01:24:04,195 --> 01:24:06,528 PUBBLICO: Non Avreste a guardare le altre lettere 1921 01:24:06,528 --> 01:24:07,870 nel resto del [incomprensibile]? 1922 01:24:07,870 --> 01:24:10,020 >> SPEAKER 1: Ah, non dovrei avere a guardare the-- OK, grande. 1923 01:24:10,020 --> 01:24:10,790 Questa è una grande domanda. 1924 01:24:10,790 --> 01:24:12,170 Dipende da come implementiamo esso. 1925 01:24:12,170 --> 01:24:15,350 Se implementiamo come solo come una serie di matrici 1926 01:24:15,350 --> 01:24:18,100 dove sappiamo che E è sempre in posizione 0, 1927 01:24:18,100 --> 01:24:21,270 Non lo so, a prescindere numero indice è a. 1928 01:24:21,270 --> 01:24:24,901 Sì, noi possiamo solo fare costante tempo, fare, fare, fare, fare. 1929 01:24:24,901 --> 01:24:25,400 Raffreddare. 1930 01:24:25,400 --> 01:24:27,556 Domanda laggiù? 1931 01:24:27,556 --> 01:24:30,927 >> PUBBLICO: E 'tempo costante la stessa cosa in tempo reale? 1932 01:24:30,927 --> 01:24:33,260 SPEAKER 1: E 'costante di tempo la stessa cosa è in tempo reale? 1933 01:24:33,260 --> 01:24:34,799 Io non sono davvero sicuro in tempo reale è. 1934 01:24:34,799 --> 01:24:36,965 PUBBLICO: Come quella volta progredisce letteralmente secondo 1935 01:24:36,965 --> 01:24:40,150 dal secondo invece di essere una variabile indipendente. 1936 01:24:40,150 --> 01:24:42,960 >> SPEAKER 1: Oh, sì, è può pensare in questo modo. 1937 01:24:42,960 --> 01:24:46,240 In altre parole, non è dipendente delle dimensioni della struttura di dati. 1938 01:24:46,240 --> 01:24:48,310 Questo è un modo di pensare di esso. 1939 01:24:48,310 --> 01:24:50,510 Qualsiasi altra domanda? 1940 01:24:50,510 --> 01:24:53,120 Forse in un primo tempo a la storia, abbiamo terminato in tempo. 1941 01:24:53,120 --> 01:24:57,080 Se avete qualsiasi domanda, libero di venire chiederci, andare alla sezione, 1942 01:24:57,080 --> 01:25:00,190 parlare con il vostro TF, ufficio ore 8:00 e le 08:30 sono 1943 01:25:00,190 --> 01:25:03,985 alle 11:00 il Lunedi e Martedì, così è un po 'di tempo diverso, 1944 01:25:03,985 --> 01:25:05,110 quindi assicuratevi di notare che. 1945 01:25:05,110 --> 01:25:06,048 Già. 1946 01:25:06,048 --> 01:25:08,673 >> PUBBLICO: abbiamo bisogno di sapere roba come argomenti della riga di comando, 1947 01:25:08,673 --> 01:25:10,360 ls precipitare, precipitare a prescindere? 1948 01:25:10,360 --> 01:25:11,840 >> SPEAKER 1: riga di comando argomenti e comandi Linux, 1949 01:25:11,840 --> 01:25:13,010 sì, avete bisogno di sapere chi. 1950 01:25:13,010 --> 01:25:18,234 Very-- è come il tipo di livello roba abbiamo coperto nella sezione 0, 1951 01:25:18,234 --> 01:25:19,400 per quanto riguarda i comandi di Linux andare. 1952 01:25:19,400 --> 01:25:20,942 >> PUBBLICO: sono le ore in Annenberg? 1953 01:25:20,942 --> 01:25:23,525 SPEAKER 1: Orario di ricevimento, non sono del tutto sicuro dove sono. 1954 01:25:23,525 --> 01:25:25,980 Ma è possibile controllare il sito web, e vi dirà. 1955 01:25:25,980 --> 01:25:27,499