1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
[Daqq ta mużika] DAVID J. Malan: Kull dritt. Dan huwa CS50, u dan hija t-tmiem tal-Ġimgħa Erba. U wieħed mis-suġġetti llum hija li tal-forensiċi diġitali, l-arti ta 'rkupru informazzjoni. U fil-fatt, anki jekk int fil-midst dritt issa tal-Paċi fi Three u tbegħid, ġimgħa d-dieħla, l-enfasi se tkun fuq preċiżament dan id-dominju. 

Allura wieħed mill-impjiegi coolest I qatt kellhom kien lura fl-iskola gradwati, I meta kien qed jaħdem għall-popolazzjonijiet lokali Middlesex County District Attorney tal uffiċċju, forensika tagħmel xogħol. Allura essenzjalment, il Massachusetts Pulizija Stat, f'okkażjoni, meta jaħdmu fuq il-każijiet se jġibu affarijiet simili hard drives u floppy disks u karti tal-memorja u simili. U dawn se jgħadduhom lili u mentor tiegħi, u l-għan tagħna kien li ssib evidenza, jekk kienx hemm xi, fuq dawn il-mezzi. Glimpses Issa, inti tista raw din id-dinja tal-forensiċi fil-midja, TV u films. Imma l-impjieg kelli, u daresay li dinja, mhuwiex pjuttost simili inti tara dan. Ejja tagħti ħarsa lejn dak inti ħadthom probabbilment jidhru. [Daqq ta 'video] OK. Issa, ejja tikseb ħarsa tajba lejn inti. 

[Daqq ta mużika] 

-Hold Dan. Mexxi dik lura. 

-Wait Minuta. Mur dritt. -Hemm. Jiffriżaw dik. Full-iskrin. 

OK. Jiffriżaw dik. -Tighten Up fuq li, se inti? 

-Vector Fl fuq dak Guy mill-rota lura. 

-Zoom Fl-dritt hawn fuq dan il-post. 

-Bil L-apparat dritt, il- image jistgħu jiġu mkabbra u inċiżiv. 

Liema-li? 

-Hija S programm titjib. 

-Jista Inti ċar li up kwalunkwe? 

-I Ma jafux. Ejja ittejjeb dan. 

-Enhance Taqsima A6. I msaħħa l-dettall, and-- -I Think hemm biżżejjed biex itejbu. Jgħadduha lill-iskrin tiegħi. 

-I Msaħħa r-riflessjoni fil-għajn tagħha. -Let S imexxu dan permezz video titjib. 

-Edgar, Inti tista ttejjeb dan? 

Hang fuq. 

-I've Ilhom jaħdmu fuq din ir-riflessjoni. 

Riflessjoni ta 'xi ħadd -Hemm tal. 

-Reflection. -Hemm S riflessjoni tal-wiċċ tar-raġel. 

Riflessjoni -Il! -Hemm L riflessjoni. -Zoom Fuq il-mera. Tista 'tara riflessjoni. 

-Jista Inti jtejbu l-immaġini minn hawn? -Jista Inti ittejjeb dan? -Jista Inti ittejjeb dan? -Jista Aħna ittejjeb dan? -Jista Inti ittejjeb dan? -Hold Fuq it-tieni. I ser itejbu. -Zoom Fl fuq il-bieb. -Times 10. -Zoom. -Move Fil. -Aktar. -Wait, Stop. -Stop. -Pause Dan. Dawwar us 75 gradi madwar il-vertikali, jekk jogħġbok. 

-Stop. Mur lura għall-parti dwar il-bieb għal darb'oħra. 

-Got Enhancer immaġni li jistgħu Bitmap? 

-Maybe Nistgħu nużaw l Singh Pradeep metodu biex tara fil-twieqi. 

-Il Software huwa l-istat ta 'l-arti. 

-Il Eigenvalue huwa off. 

-Bil-Dritt kombinazzjoni ta 'algorithms-- 

Meħuda illuminazzjoni -He tal algoritmi għal-livell li jmiss, u nista jużawhom biex jsaħħu din ritratt. 

Lock fuq u tkabbar l-assi-z. 

-Enhance. Tittejjeb. -Enhance. -Freeze U jtejbu. [END daqq ta 'video] DAVID J. Malan: Allura dawn huma kliem kollha, imma dawn ma kienux użat fil-sentenzi korrett. U fil-fatt fil-futur, kwalunkwe ħin, jekk jogħġbok, inti tisma xi ħadd jgħid l-kelma, "Ittejjeb," chuckle biss ftit. Għaliex meta inti tipprova biex ittejjeb, per eżempju, dan huwa dak li jiġri. 

Allura hawnhekk ritratt sabiħ ħafna. Dan huwa Daven CS50 stess. U jissoponi li aħna riedu tiffoka fuq il-Twinkle fl-għajnejn tiegħu, jew l-riflessjoni tal- Guy ħżiena li kienet b'mod ċar maqbud mill-kameras tas-sigurtà. Dan huwa dak li jiġri meta inti zoom fl fuq xbieha li għandha biss numru finit ta 'bits assoċjati magħha. 

Dan huwa dak li inti se tikseb. U fil-fatt, fl-għajnejn Daven tal huwa iżda erba, forsi sitt pixels li jikkomponu eżattament dak kien glimmering hemmhekk. Allura Problema Set Erba finalment se jkollhom inti tesplora din id-dinja, partikolarment min-natura ta 'xi ħaġa nitolbu i file / o, fejn i / o huwa biss mod fancy ta ' qal input u output. 

Allura s'issa, kollha ta 'l-interazzjonijiet aħna kellna ma 'kompjuter kienu ġeneralment bil tiegħek keyboard u l-iskrin, iżda mhux daqshekk mal-hard disk, jew iffrankar ta 'fajls lil hinn mill-dawk li inti yourself jiktbu. Programmi tiegħek s'issa jkollhom ma kien joħloq, u l-iffrankar, u l-aġġornament fajls tagħhom stess. 

Ukoll, x'hemm fajl? Ukoll, xi ħaġa bħal JPEG. Din hija immaġni inti tista għandhom jew upload biex Facebook, jew tara kullimkien fuq il-web. Tabilħaqq, li ritratt aħna biss raw ta Daven kien JPEG. U x'hemm interessanti dwar fajls simili JPEGs huwa li jkunu jistgħu jiġu identifikati, tipikament, minn ċerti mudelli ta 'bits. 

Fi kliem ieħor, dak huwa li jiddistingwi JPEG minn GIF minn Ping minn Word dokument ta 'xi fajl Excel? Ukoll, huwa biss differenti mudelli ta 'bits. U dawk mudelli differenti huma normalment fil-bidu ta 'dawn il-fajls. 

Allura li meta l-kompjuter tiegħek tiftaħ Word doc, jew meta kompjuter tiftaħ JPEG, jidher tipikament fil- ewwel diversi bits fil-fajl. U jekk huwa jirrikonoxxi mudell, jgħid, oh, din hija immaġni. Let me juru li l-utent bħala grafika. Jew, oh, dan qisu doc ​​Word. Let me juru lill-utent bħala esej. 

Allura per eżempju, JPEGs, jirriżulta, huma pjuttost sofistikati taħt il-barnuża. Iżda l-ewwel tliet bytes fil aktar minn darba kull JPEG tibda bil dawn it-tliet numri. Allura byte żero, wieħed, u tnejn huma, fil- aktar minn darba kull JPEG, 255, allura n-numru 216, allura n-numru 255. 

U dak li inti ser tkun kapaċi biex tibda tagħmel ġimgħa d-dieħla huwa attwalment poking taħt il-barnuża ta 'fajls simili JPEGs u bħal fajls Bitmap, u tara x'hemm dejjem kien hemm sakemm kif inti kont qed tuża kompjuter. 

Imma x'hemm ma jkunx hemm tipikament miktub bħal numri deċimali bħal dan. Xjenzjati tal-kompjuter ma tendenza li jitkellmu fil deċimali. Huma ma verament jitkellmu fil binarja. Tipikament, meta rridu li jesprimu numri, aħna attwalment jużaw hexadecimal, li inti tista 'recall minn, ngħidu aħna, Problem Set Wieħed, li kkontestat inti biex jaħsbu dwar sistema differenti. 

Aħna, naturalment, huma familjari bi deċimali, żero permezz disa. Aħna tkellimna dwar binarja. U aħna ma verament ikollhom għall-użu li ħafna hawn fuq barra, għaliex kompjuters se jużaw dak. Iżda programmaturi se ħafna spiss, imma mhux dejjem, jużaw hexadecimal, li ifisser biss għandek 16-ittri fil alfabett tiegħek, kif oppost għal tnejn jew 10. 

Allura kif taħseb li għodd sa ogħla minn disa f'hexadecimal? Inti tmur 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, biss billi konvenzjoni. Imma x'hemm importanti hu li kull minn dawn huwa simbolu wieħed. M'hemm l-ebda 10. M'hemm l-ebda 11, per se, għax kull ta 'ċifri diġitali tiegħek, eżatt bħal fil-deċimali u eżatt bħal fil binarja, għandhom biss jkun karattru wieħed, b'konvenzjoni. 

Allura li allura huwa l-alfabett li għandna għad-dispożizzjoni tagħna għal hexadecimal. Allura dak li ma JPEG look like jekk inti kellhom jiktbu out dawk l-ewwel tlieta bytes mhux bħala informazzjoni, iżda, per eżempju, bħala hexadecimal? U għaliex hija hex anki dak kollu li utli? 

Well, ħarsa lejn eżempju. Mela jekk nikteb l-bits li jirrappreżentaw dawn numbers-- deċimali dan jista 'jkun ftit Rusty issa minn ftit ġimgħat lura, iżda l-waħda xellug u l- dritt wieħed huma pjuttost faċli. 255 kien in-numru akbar aħna jista 'jirrappreżenta bi tmien bits. Kien dawk kollha. Allura l-unika waħda li kemmxejn interessanti huwa l-waħda tan-nofs. U jekk inti tip ta 'do l- matematika, inti ser jiġi dedott li, tabilħaqq, dak il-mudell ta 'wieħed u żerijiet tirrappreżenta 216. Mela ejja biss jistipulaw għall issa li dawn huma korretti. Iżda għaliex dan huwa interessanti? 

Well, byte, naturalment, huwa tmien bits. U jirriżulta li jekk taħseb ta 'byte bħala żewġ biċċiet ta' erba 'bits, bħal dan. Let me biss żid xi spazju. Allura qabel, wara. Stajt biss miżjud xi spazju abjad f'ġieħ viżwalizzazzjoni hawnhekk. Kif tista aħna issa jirrappreżentaw in, jiġifieri, hexadeċimali kull quad ta 'bits, kull sett ta 'erba' bits? 

Allura per eżempju, fuq ix-xellug issa, aħna għandna 1111 fil binarja. X'inhu dak in-numru fil-deċimali, jekk inti tagħmel l-matematika? Inti għandek l-dawk post, il-post twos, il-fours post, u l-post eights. 

UDJENZA: 15. DAVID J. Malan: Huwa 15. Mela jekk nagħmlu tmien plus erba flimkien ma 'tnejn plus wieħed, irridu jiksbu 15. So I tista 'tikteb isfel 15 hawn taħt 1111, imma l-punt kollu hawnhekk huwa hexadecimal, mhux Deċimali. Allura minflok kitba fl-15, 1-5, Jien ser jikteb li fl hex, li jekk taħseb lura, jekk għandek żero permezz f, x'inhu 15 se tkun? UDJENZA: f. DAVID J. Malan: Għalhekk jirriżulta li l f. U inti tista 'taħdem li minn billi qal, ukoll, jekk huwa 10, imbagħad OK, f huwa 15. Allura fil-fatt, nistgħu jikteb dan l-istess sett ta 'numri kif f f. U mbagħad jekk nagħmlu daqsxejn ta 'matematika, aħna ser jiġi dedott li dan huwa d. Tmien huwa pjuttost faċli, għaliex aħna jkollhom wieħed fil-post eights. U mbagħad, aħna għandna koppja aktar f f'S. 

Allura dak bnedmin tendenza li tagħmel permezz tal-konvenzjoni meta jużaw hexadecimal huwa huma biss tikteb din ftit aktar konċiż, jeħles ta 'ħafna ta' dak l-ispazju abjad. U biss li tkun super ċara li qarrejja li dan huwa hexadecimal, il-konvenzjoni sempliċi fost bnedmin qed tikteb żero x, li m'għandha l-ebda tifsira oħra minn identifikatur viżwali ta ', hawn taqa 'numru hex. 

U mbagħad, inti tpoġġi l-żewġ numri, f f f'dan il-każ, allura d a, imbagħad f f. Allura qasir storja twila, hexadecimal biss tendenza li jkun utli għax kull wieħed tagħha ċifri, żero permezz f, perfettament linji up bil-mudell ta 'erba' bits. 

Mela jekk għandek żewġ numri hexadecimal, żero permezz F, għal darb'oħra u għal darb'oħra, li jagħtik perfettament tmien bits jew byte wieħed. Allura hu għalhekk li għandha tendenza li jkun konvenzjonalment utli. M'hemm l-ebda intellettwali kontenut verament lil hinn minn dak, għajr utilità attwali tagħha. 

Issa JPEGs mhumiex l-unika fajl formati għall-grafika. Inti tista 'tfakkar li hemm files bħal dan fid-dinja, inqas minn ftit snin lura. 

Allura dan kien effettivament installat fil-Windows XP fuq miljuni ta 'PCs madwar id-dinja. U dan kien fajl Bitmap, BMP. U fajl Bitmap, kif tkun taf tara li jmiss ġimgħa, ifisser biss mudell ta 'tikek, pixels kif dawn qed imsejħa, mappa fuq bits, verament. 

Allura x'hemm interessanti, għalkemm, dwar dan il-format fajl, BMP, huwa li taħtha il-barnuża, dan għandha aktar minn biss tliet bytes li jikkomponu header tagħha, hekk li jitkellmu, l-ewwel ftit gdim. Hija fil-fatt jistenna ftit ikkumplikat ewwel daqqa t'għajn. U tkun taf tara dan fil-P sett. U jkollna xi ħaġa out partikolari ta 'dan issa ma jkunx daqshekk importanti, bħala biss il-fatt li fil-bidu ta 'kull Bitmap fajl, format grafika, hemm mazz sħiħ ta 'numri. 

Issa Microsoft, il- awtur ta 'dan il-format, tendenza li jsejħu dawk l-affarijiet mhux ints u Chars u sufruni iżda kliem u d kliem u twal u bytes. Allura dawn qed biss tipi differenti ta 'dejta. Huma qed ismijiet differenti għall-istess ħaġa. Imma inti taf tara li fil Set Erba P. 

Iżda din hija biss li jgħidu li jekk bniedem double-klikks xi fajl BMP fuq tiegħu jew hard drive tagħha, u tiftaħ tieqa up juri lilu jew lilha li l-immaġni, li ġara minħabba li l-operattiva sistema preżumibbilment ndunat mhux biss l-estensjoni fajl BMP fl-isem fajl, iżda wkoll il-fatt li hemm xi konvenzjoni għall-mudell ta 'bits fil-bidu nett ta dan il-fajl Bitmap. 

Imma ejja issa jiffokaw fuq tali file kkumplikata, iżda minflok fuq xi ħaġa bħal din. Ejja ngħidu hawn fil gedit, I biss ikollhom l-bidu ta 'programm li pjuttost sempliċi. Stajt ltqajna xi jinkludi top up. # Jinkludu "structs.h" Issa stajt ltqajna iżda I ser terga 'lura għal dik fil-mument. Iżda din hija utli għal issa. Allura dan huwa programm li għaddej biex jimplimentaw bħall-database tar-Reġistratur. Allura database ta 'studenti, u kull student fid-dinja għandha isem u dar u probabbilment xi Jittieħed oħra, iżda aħna ser jżommha sempliċi. Kull student għandha isem u dar. 

Mela jekk jien ridt li jiktbu programm li l-għan fil-ħajja kien biss li jtenni mill- żero fuq sa tlieta, jekk hemm tliet studenti fil-Harvard University. U jien biss trid li tikseb, bl-użu GetString, isem u d-dar ta 'kull student, u mbagħad biss print dawk out. 

Dan huwa tip simili Week Wieħed, Żewġ Week Jittieħed issa, fejn I nur die għal loop jew xi ħaġa bħal dik. U nixtieq li sejħa GetString ftit drabi, u mbagħad jistampaw f ftit drabi. Allura kif tista 'nagħmel dan, għalkemm, meta kemm isem u dar huma involuti għal kull student? 

Allura l-ewwel istint tiegħi jista jkun li tagħmel xi ħaġa bħal din. I jista ewwel ngħid, ukoll, jagħtu me, jgħidu, firxa ta 'spag imsejħa ismijiet. U jien ma tridx hardcode tliet hawn. What do I tixtieq li tqiegħed hemmhekk? Allura STUDENTI, għaliex dan huwa biss kostanti ddikjarat fil-quċċata, biss hekk I ma jkollhom hardcode tlieta fil-postijiet multipli. Dan il-mod, I tista 'bidla f'post wieħed, u din taffettwa bidla kullimkien. U mbagħad, I tista 'tagħmel string djar STUDENTI. 

U issa, I tista 'tagħmel xi ħaġa simili għall (i int = 0; i <STUDENTI; i ++. So jien ittajpjar malajr, iżda dan huwa probabbilment sintassi familjari issa. 

U issa, dan kien aktar riċenti. Jekk I tixtieq li tqiegħed fil-i-th isem istudent, I think I do dan. U mbagħad, mhux ismijiet iżda djar parentesi i. I do dan, GetString, u ħallieh me jmorru lura u tiffissa din il-linja. Jaqblu? Ma naqbilx? Mhuwiex ħafna faċli għall-utent. I ma qal lill-utent x'għandek tagħmel. 

Imma issa, jekk I wkoll riedu aktar tard, ejja jiġifieri, jistampa dawn l-affarijiet out-- hekk Todo aktar tard. Jien ser jagħmlu aktar this-- dan forsi jiġifieri implimentazzjoni korretta ta ' jkollna l-ismijiet u djar, tliet minnhom totali ta 'kull, minn utent. 

Imma dan mhux disinn tajjeb ħafna, id-dritt? X'jiġri jekk student ikollu mhux biss l-isem u dar, iżda wkoll numru ta 'identifikazzjoni, u numru tat-telefon, u l-indirizz email, u forsi home page, u forsi Twitter manku, u kull numru ta 'dettalji oħra assoċjat ma 'student jew persuna, b'mod aktar ġenerali. Kif aħna jibdew żid funzjonalità għal dan il-programm? 

Well, I jħossu bħall-eħfef mod jista jkun li tagħmel xi ħaġa simili, ejja ngħidu, int STUDENTI ids. So I tista 'tpoġġi IDs kollha tagħhom fil hemmhekk. U mbagħad, għal xi ħaġa bħal numri tat-telefon, M'inix ċert kif jirrappreżenta dak għadha biss. Mela ejja imorru quddiem u biss sejħa dan Twitters STUDENTI, li hija ftit stramba, but-- u mazz aktar oqsma. 

Stajt bdew b'mod effettiv kopja u paste hawn. U dan se jikber pretty dens pretty malajr, right? Ma Ikun sbieħ jekk kien hemm fid-dinja struttura data magħrufa mhux bħala int jew string, imma xi ħaġa livell ogħla, l-estrazzjoni, hekk biex jitkellmu, magħrufa bħala student? C ma jiġu mal built-in funzjonalità għall-istudenti, imma dak jekk jien ridt li jagħtih din? 

Ukoll, jirriżulta, jien ser tiftaħ fajl imsejjaħ structs.h hawn, u inti tista 'tagħmel eżattament dan. U aħna qed tmur biex tibda tagħmel dan issa. U taħtha l-hood tal Set Tliet P, inti stajt diġà qed tagħmel dan issa. M'hemm l-ebda ħaġa bħal g rect jew a g ovali fil-lingwa ta 'programmar C. 

Folks fil Stanford implimentati dawk tipi ta 'data bl-użu dan l-approċċ hawnhekk, tiddikjara data ġdida tagħhom stess tipi jużaw keyword ġdida imsejħa Struct u ieħor wieħed imsejjaħ typedef. U fil-fatt, anki jekk l-sintassi jistenna ftit differenti minn għalf Rajna qabel, fl prinċipju, huwa super sempliċi. 

Dan ifisser biss "jiddefinixxi tip." Li għaddej biex tkun istruttura, u struttura huwa biss bħal kontenitur għal affarijiet multipli. U li l-istruttura li qed jiġri li jkollhom string imsejjaħ isem, u string imsejjaħ house. U ejja sejħa, biss għall-konvenjenza, dan l-istudent kollu struttura tad-data. 

Allura l-mument ikollok biex l-virgola, inti għandek issa maħluqa data tiegħek stess tip imsejħa student li issa stands flimkien int, u float, u char, u string, u g rect, u g ovali, u kull numru ta 'affarijiet oħra nies ivvintat. 

Allura x'hemm utli dwar dan issa huwa li jekk immur lura li Struct 0 u jintemm dan implimentazzjoni, li I kiteb bil-quddiem hawnhekk, avviż li kollha tal-messiness inevitabbli li kienet waslet biex tibda jiġri bħala I miżjuda numri tat-telefon u twitters u kollha dawn l-affarijiet oħra definizzjoni ta 'student, issa huwa konċiż jitgeżwer bħala wieħed biss firxa ta 'studenti. 

U kull wieħed minn dawk l-istudenti issa għandha affarijiet multipli ġewwa ta 'dan. Allura li biss tħalli mistoqsija waħda. Kif tista 'tikseb fil-isem, u l-dar, u l-ID, u kwalunkwe ħaġa oħra huwa ġewwa tal-istudent? Super sempliċi, kif ukoll. Sintassi New, iżda idea sempliċi. 

Inti sempliċiment indiċi fil-firxa, kif għamilna aħħar ġimgħa u dan. U x'hemm b'mod ċar l- biċċa ġdida ta 'sintassi? Just., Li tfisser "go ġewwa l- istruttura u x-qasam msejħa isem, jiksbu l-qasam imsejħa dar, jiksbu l-qasam imsejħa istudent. " 

Għalhekk fl Set Tliet P, jekk int għadhom jaħdmu fuq li, u folks aktar għadhom huma, jirrealizzaw li kif inti tibda tuża affarijiet simili g rects u G ovali u affarijiet oħra li ma jidhirx li ġejjin minn Week Zero, One, jew tnejn, jirrealizzaw li dan għaliex Stanford iddikjarata xi tipi ġodda ta 'dejta. 

U fil-fatt, dan huwa eżattament dak li aħna ser do, kif ukoll, fir Set Erba P, meta nibdew biex jittrattaw ma 'affarijiet bħal stampi, bitmaps, u aktar. Allura li jinsab biss teaser u mudell mentali għal dak li huwa li ġejjin. Issa, I procrastinated daqsxejn dalgħodu. I kien tip ta 'kurjużi biex tara dak l-wallpaper Microsoft attwalment Dehra illum. U jirriżulta xi ħadd fl-2006 attwalment marret għal kważi preċiżament l-istess post li r-ritratt fir-realtà dak qisu li dawn il-jiem. Il-qasam issa huwa xi ftit overgrown. 

Allura jitkellem issa 'immaġini, ejja iġibu lura Daven hawn fuq l-iskrin u Nicholas, u biss infakkarkom li jekk inti tixtieq li jingħaqdu magħna għall-ikel dan Ġimgħa, ras għal URL tas-soltu tagħna hawn. 

Għalhekk, fejn ma we leave off nhar it-Tnejn? Aħna introdotti din il-problema, id-dritt? Dan kien apparentement a korretta implimentazzjoni ta 'tpartit, fejn inti tieħu żewġ ints, wieħed imsejjaħ, wieħed imsejjaħ b, tpartit minnhom, bħad Laura għamlet hawn fuq il-palk mal-ħalib u l-ilma, bl-użu ta temporanju varjabbli, jew tazza vojta, sabiex inkunu tista 'tpoġġi b fil u fl b mingħajr ma tagħmel mess ta 'affarijiet. We użati varjabbli. Huwa sejjaħ temp. 

Imma dak kien il-fundamentali problema ma dan il-kodiċi nhar it-Tnejn? Liema kienet l-problema hawn? Yeah. 

UDJENZA: Huwa jieħu aktar spazju. 

DAVID J. Malan: Jieħu up aktar ispazju, għaliex jien jużaw varjabbli, u li OK. Dan huwa veru, imma jien se ngħid li l-OK. Huwa biss 32 bits fil-grand iskema ta 'affarijiet, hekk mhux big deal. Ħsibijiet oħra? UDJENZA: Huwa biss tpartit il-varjabbli lokalment. DAVID J. Malan: Eżattament. Hija biss tpartit-varjabbli lokalment. Minħabba kwalunkwe ħin inti sejħa function-- meta kelli l-trejs mill Annenberg aħħar darba, inti għandek prinċipali fuq il-qiegħ. Hekk kif inti sejħa funzjoni msejħa tpartit, tpartit ma jiksbu x uy, il-valuri oriġinali. X'jagħmel get swap, ma aħna jsostnu? Udjenza: Kopji. DAVID J. Malan: Allura kopji tagħhom. Allura jiġrilha wieħed u tnejn, jekk inti mfakkra l-eżempju mill-aħħar darba, iżda kopja ta 'wieħed u tnejn li huma skambjati b'suċċess. Iżda sfortunatament fl-aħħar, dawk il-valuri għadhom l-istess. Allura nistgħu naraw dan mal tagħna ħabib ġdid, wieħed jittama GDB, li inti jew il-TFS u l Ca jkollhom ġew gwida li inti lejn kif ġej. 

Allura l-ebda irtirar swap jistenna like-- ejja jiftħu this-- tidher bħal dan. Aħna initialized x għal wieħed, y għal tnejn. Kieku mazz ta 'print f'S. Iżda mbagħad, is-sejħa ċavetta hawn kien li tpartit, li huwa eżattament l-kodiċi we biss raw mument ilu. Liema hija korretta fl-ewwel t'għajn, iżda funzjonalment, dan il-programm ma taħdimx, għaliex dan ma tpartit permanenti xuy. 

Mela ejja ara dan, warm quick up hawn ma GDB, a ./noswap. A mazz ta 'informazzjoni kbira li I ser teħles minn mal Kontroll L għal issa. U issa, jien se imorru quddiem u run. U sfortunatament, li ma kienet li utli. Hija dam il-programm ġewwa ta 'dan programm imsejjaħ GDB, debugger, iżda hija ma let me poke madwar. 

Allura kif nista attwalment nieqaf eżekuzzjoni ġewwa dan il-programm? Allura break. UI jistgħu jiksru fuq kwalunkwe numru, wieħed, 10, 15 linja. Imma I tista 'wkoll break simbolikament billi qal break prinċipali. U li għaddej biex jistabbilixxu pawża punt, apparentement fil-linja 16 prinċipali. U fejn huwa linja 16? Ejja ħa mmorru sal-kodiċi u jitla 'sa noswap. U fil-fatt, linja 16 hija l- ewwel ħafna fil-programm. 

Allura issa, jekk I jimxi 'l quddiem u t-tip run dan iż-żmien, Ikteb, dan waqfa qasira. Mela ejja poke madwar. Stampa x-- għaliex huwa x żero? U jinjora l-sinjal dollaru. Li jinsab biss għal fancier użu tal-programm. Għaliex hija x żero fil-mument? Yeah. 

UDJENZA: Huwa waqfa qasira dritt qabel linja 16, ma attwalment fuq il-linja 16. DAVID J. Malan: Eżattament. GDB, kontumaċja, kien waqfa qasira eżekuzzjoni eżatt qabel il-linja 16. Għalhekk ma jkunx eżegwit, li ifisser x hija ta 'xi valur mhux magħruf. U aħna ltqajna xxurtjati li huwa xi ħaġa nadif bħal żero. Allura issa jekk I tip li jmiss, issa esegwiti 16. Huwa stennija għalija li tesegwixxi 17. Let me imorru quddiem u print x. Huwa wieħed. Let me imorru quddiem u y istampar. X'għandi I tara issa? 

UDJENZA: [inaudible] 

DAVID J. Malan: A louder ftit. 

UDJENZA: [inaudible] DAVID J. Malan: Mhux pjuttost konsensus. Allura iva, naraw xi valur żibel. Issa, y hija 134514064 hemmhekk. Ukoll, huwa biss xi valur żibel. Programm My użi RAM għal skopijiet differenti. Hemm funzjonijiet oħra. Nies oħra kiteb ġewwa kompjuter tiegħi. Allura dawk bits ġew użati għall- valuri oħra, u dak li jien jaraw huwa l-fdalijiet ta 'xi użu minn qabel ta 'dak l-memorja. 

Allura l-ebda big deal, għaliex malli tip I kif jmiss u mbagħad jistampaw y, huwa initialized li il-valur li nixtieq. Allura issa, ejja imorru quddiem ftit aktar mgħaġġel. N għal li jmiss. Ejja nagħmlu dan mill-ġdid. Ejja nagħmlu dan mill-ġdid. Imma ma rridx li hit hawnhekk, għaliex jekk I trid tara x'inhu għaddej ġewwa tal tpartit, x'inhu l-kmand? 

UDJENZA: passi. 

DAVID J. Malan: passi. Allura dan passi me fi funzjoni, minflok fuqha. U issa, huwa ftit cryptic onestament, iżda din hija biss javżak me jien fil-linja 33 issa. U ejja tagħmel dan mill-ġdid. Temperatura Stampa. Valur Żibel, negattiv dan iż-żmien, iżda li biss għadu valur żibel. Mela ejja do jmiss, temperatura print. Huwa initialized għal 1, li kien il-valur ta 'x, aka a. 

Issa, fejn huma tagħna u X li ġejjin minn? Ukoll, avviż fil prinċipali, aħna imsejħa dawn x valuri u y. Aħna mbagħad għadda minnhom li tpartit kif ġej. X daħal ewwel, y comma. U mbagħad, swap tista jsejħulhom xuy. Iżda għaċ-ċarezza, huwa ssejjaħ minnhom u b. Iżda aub issa ser ikunu kopji ta 'xuy, rispettivament. 

Mela jekk jien jmorru lura għall GDB, temperatura issa huwa wieħed u issa huwa wieħed. Imma jekk I do jmiss u issa do print a, a diġà ġie mċaqalqa. Il-ħalib ġie jitferra 'l-ewwel ħġieġ meraq tal-larinġ li, jew viċi versa. 

U jekk jien tagħmel li jmiss darb'oħra, u issa jekk I jistampa bħala verifika sanità, a huwa għadu tnejn, iżda b issa huwa wieħed. Franchement, huwa għadu hemm. I ma 'kura dak temperatura hu. Imma malli I issa tip, ejja ngħidu, tkompli tmur lura, issa jien fl-aħħar il-programm. U sfortunatament, x hija xorta waħda u y għadu tnejn. 

Allura dak li kien l-utilità ta 'GDB hemmhekk? Hija ma għinni jiffissaw il-problema per se, iżda nisperaw għinni jifhimha bit-twettiq li iva, il-loġika tiegħi huwa dritt, iżda kodiċi tiegħi mhix finalment li impatt permanenti. Allura li hija problema aħna qed ser issa isolvu llum. 

Imma ejja nikseb hemm permezz ta 'dan. String huwa gidba. Hija, wisq, mhux tip data li teżisti fl C. Huwa kien sinonimu għal xi żmien għal xi ħaġa oħra, u nistgħu jiżvelaw li kif ġej. 

Let me imorru quddiem u tiftaħ programm imsejjaħ jqabblu-0. U minflok tip dan wieħed out, aħna ser tibda biex jimxu permezz tal-kodiċi I diġà kiteb, imma huwa biss ftit linji. Allura dan huwa jqabblu-0. U l-ewwel ħaġa li qed nagħmel huwa jkollna linja tat-test. 

Imma liema avviż jien tagħmel għall-ewwel darba. X'inhu differenti b'mod ċar dwar il-linja 21? Attwalment, stenna minuta. Dan huwa tnejn kopja. Dan lanqas ma huwa l-programm dritt. Kull dritt, twissija ISPOILER. Kull dritt, hekk qatt f'moħħhom dik. Dik hija l-risposta għal mistoqsija futur. 

Hawnhekk huwa iqabblu-0, u jien dwar li tikseb linja ta 'test. Tal Program ferm aktar sempliċi. Allura dan huwa sempliċi. Dan huwa simili One Week, Week Żewġ Jittieħed fil-mument. string s = GetString. Issa, jien ngħid mill-ġdid stabbiliti hawn. string t = GetString. U mbagħad, l-aħħar ħaġa f'dan programm, kif ismu jissuġġerixxi, huwa jien ser jippruvaw biex iqabblu lilhom. 

Mela jekk i, l-ewwel string, ugwali = t, allura jien se ngħid inti tip l-istess ħaġa. Else, jien ser ngħid inti tip affarijiet differenti. Mela ejja tiġbor u tmexxi dan il-programm. Sabiex tagħmel jqabblu żero. Jistenna tajba. Ebda żbalji kumpilazzjoni. 

Let me imorru quddiem issa u t-tip ./compare-0. Let me imorru quddiem u jgħidu xi ħaġa : Daven u xi ħaġa: Rob. U jien tip affarijiet differenti. S'issa, hekk tajjeb. Programm jidher li tkun korretta. 

Imma ejja run mill-ġdid. Say xi ħaġa: Gabe. Say xi ħaġa: Gabe. Kull dritt. Maybe I hit l-ispazju bar jew xi ħaġa funky. Ejja nagħmlu dan mill-ġdid. Allura Zamyla. Zamyla. Affarijiet differenti. Allura dak li qed jiġri? 

Allura aħna għandna dawn iż-żewġ linji ta ' kodiċi, GetString qed jissejjaħ darbtejn. U mbagħad, jien sempliċiment jippruvaw iqabblu s u t. Imma dak li verament mbagħad qed jiġri? Well, kalligrafija tiegħi waslet biex biċċier dan l-eżempju kemmxejn. U ejja attwalment tarmi dan up hawn fuq, kif ukoll. 

Allura għandna linja bħal string s = GetString. Allura dak sempliċement l-ewwel linja interessanti minn dak il-programm. Imma dak li dan il-ħin kien tmur fuq taħt il-barnuża? Ukoll, fuq il-naħa tax-xellug ġenb huwa string, li hija xi tip ta 'varjabbli, u huwa msejjaħ s. So I taf li dan qed tuża memorja, jew RAM, fil-kompjuter tiegħi b'xi. So I m ser astratt jiġbed li bħala kwadru. 32 bits, jirriżulta, iżda aktar fuq li fil-futur. U mbagħad, x'inhu għaddej hawn? 

Well, GetString ovvjament gets string mill-utent. U GetString ltqajna Zamyla jew Gabe jew Daven. Mela ejja jagħżlu l-ewwel ta 'dawk, li kien Daven. Allura effettiv, liema GetString ltqajna me f'dik ewwel każ kien-D a-vs-e-n. U mbagħad, x'iktar għamilt it tagħti me segretament? UDJENZA: [inaudible] DAVID J. Malan: Yeah, l / 0 jew null karattru. Għalhekk effettivament tatni string. Iżda aħna diġà jafu minn qabel jistenna li string huwa biss firxa ta 'karattri, u huwa mitmum minn dan il-karattru sentinella speċjali, / 0. 

Imma jekk dan huwa minnu u dan huwa kwadru, dan huwa b'mod ċar rettangolu ħafna akbar. U fil-fatt, dan huwa, I jsostnu, biss 32 bits. U dan huwa b'mod ċar aktar minn 32 bits, għaliex dan huwa probabbilment tmienja plus tmienja plus tmienja plus tmienja plus tmienja, biss minħabba bytes fil ASCII. Kif l-Heck aħna se tajbin Daven fis din il-kaxxa ftit hawn? 

Ukoll, dak li huwa GetString fatt jagħmlu? Ukoll, dan grid hawn tirrappreżenta memorja tal-kompjuter tiegħi jew RAM. Mela ejja arbitrarju ngħid li jekk kull wieħed minn dawn jirrappreżenta byte, allura nistgħu naħsbu ta 'kull byte bħala li għandhom l-indirizz, bħal 33 Oxford Street, jew 34 Oxford Street, jew 35 Oxford Street. 

Hekk biss bħal djar ikollhom indirizzi u l-bini jkollhom indirizzi, so do bytes individwali ta ' memorja jkollhom indirizzi jew numri li jidentifika unikament minnhom. Issa, dan huwa arbitrarju. Iżda biex jżommha sempliċi, jien ser użu hexadecimal biss b'konvenzjoni, iżda l-0x mezzi xejn oħra minn "dan huwa hexadecimal." u jien ser jsostnu li l- "D" jispiċċa fil Byte Wieħed fil-memorja. 

I ltqajna xejn għaddejjin fil memorja, hekk Daven ltqajna l-ewwel post fil Byte One. Dan, imbagħad, se tkun 0x2. Dan se 0x3. Dan se jkun 0x4. Dan se 0x5. Dan se jkun 0x6. 

Imma ladarba inti tibda taħseb dwar dak Nagħmlu l-kompjuter taħt il-barnuża, inti tista 'tibda biex jiddeduċu kif inti, xi snin ilu, kieku implimentaw C innifsu. X'inhu GetString probabbilment returning-- minħabba li iħoss bhalu mhuwiex jirritornaw Daven, per se, għaliex hu żgur mhux se li jitwaħħal f'dan box-- ftit Allura x'inhi GetString probabbilment jirritorna? 

UDJENZA: [inaudible] 

DAVID J. Malan: Il-lokazzjoni tal Daven. U huwa qed tagħmel dan qatt peress One Week. Dak GetString huwa verament jirritornaw mhix string, per se. Din kienet waħda mir-jinsab ftit abjad. Huwa jirritorna l-indirizz tal- string fil-memorja, l-indirizz uniku. Daven jgħix fi 33 Oxford Street. Iżda aktar konċiż, Gavin jgħix fil 0x1, Indirizz Numru Wieħed. 

Allura dak gets tpoġġi f'dan kaxxa ftit imbagħad, tkun ċara, huwa biss l-indirizz ta 'dak string. Allura dan il-ħin, dan ilu għaddej. Imma dak li din jagħti x'wieħed jifhem li issa hija li jekk kollox i għandha huwa numru ġewwa ta 'dan, li l- biex int tieqaf, l-programmer, milli jpoġġu kull numru fil kwalunkwe varjabbli u biss jaqbeż għal dak blokki ta 'memorja? U fil-fatt, aħna ser tara thats theddida ħin li jmiss. 

Iżda għal issa, dan iħoss insuffiċjenti. Jekk I say, nikseb me a string, inti tagħti me Daven. Imma inti ma verament jagħtu me Daven. Kulma għandek tagħti me huwa l-indirizz Daven tal. Kif do I imbagħad jaf fiż-żgur fejn Daven jibda u ends-- l-istorja tal jkollna weird-- fejn Daven jibda u jispiċċa, u mbagħad, l-li jmiss string fil-memorja jibda? 

Ukoll, jekk int għoti me-bidu ta 'Daven, essenzjalment, kif inkun naf fejn it-tmiem ta 'ismu hu? Dan il-karattru null speċjali, li huwa aktar u aktar importanti issa jekk kordi taħtha l- hood huma sempliċiment identifikati unikament mill-post tagħhom fil-memorja. Allura dan il-ħin, li l- dak li kien għaddej. 

Allura meta nħarsu issa fil il-kodiċi hawn, jispjegaw jekk inti l-bug fil-linja 26. Għaliex hija Zamyla u Zamyla differenti? Għaliex hija Gabe u Gabe differenti? Yeah, fid-dahar. 

UDJENZA: Huma għandhom indirizzi differenti. 

DAVID J. Malan: Sempliċement minħabba huma għandhom indirizzi differenti. Għaliex meta inti sejħa GetString darb'oħra, li jiena ser tagħmel malajr hawn, jekk dan huwa l-tieni linja, spag t, kif għamilt f'dak il-programm, ugwali sejħa oħra għall GetString. Il-ħin li jmiss I call GetString, jien ser biex tikseb blokki differenti ta 'memorja. 

GetString huwa permess li titlob lill-operattiva sistema għall-memorja aktar u aktar. Huwa mhux se jerġa 'jintuża l-istess sitt bytes kull wieħed ħin. Huwa ser tikseb ġdida blokki ta 'memorja, li ifisser t hija se tikseb xi valur ta 'hawn fuq. 

Allura meta I do i ugwali = t, int ma jitqabblu D kontra dan u A kontra dan u V kontra dan. Inti jqabbel dan kontra dan, li franchement huwa useless-- pretty useful-- hija pjuttost inutli, minħabba li verament jimpurtaha fejn il-kordi huma fil-memorja? 

U fil-fatt, aħna ma. U aħna mhux qed tmur biex jibdew partikolarment kura. Biss sal-punt li jistgħu jinqalgħu bugs u theddid għas-sigurtà jistgħu jinqalgħu rieda aħna attwalment jibdew għall-kura dwar dan. Mela ejja tiffissa din il-problema. Jirriżulta, inti tiffissa lilha super sempliċiment. 

U ejja fil-fatt, qabel I juru li għal darb'oħra, dak li kieku you do jekk fi klassi CS50, u inti kellhom jimplimentaw paragun kontra żewġ kordi. Inti b'mod ċar ma tistax sempliċement tuża s ugwali = t. Iżda biss loġikament, kemm kieku inti tqabbel din is-sekwenza kontra din is-sekwenza jużaw kodiċi C? Yeah. 

UDJENZA: Just jagħmlu l- għall loop [inaudible] DAVID J. Malan: Perfect. UDJENZA: [inaudible] DAVID J. Malan: Yeah. Just jużaw għal loop jew filwaqt loop jew ikun x'ikun. Iżda biss tapplika l-idea bażika li jekk dan huwa blokki ta 'memorja jew firxa u dan huwa, jtenni fuq kemm fl-istess ħin. U biss jqabblu l-ittri. 

U inti ħadthom ltqajna biex tkun ftit attenti, għaliex inti ma jridux finger wieħed li jmorru passat l-oħra għaliex string wieħed huwa itwal mill-oħra. Allura int tmur jridu sabiex jikkontrolla għal dan il-valur speċjali fl-aħħar, null. Imma huwa verament, fil- aħħar, sempliċi bħal dik. U franchement, aħna m'għandekx bżonn biex jivvinta dik ir-rota. Hawnhekk huwa Version Żewġ. U dak li jien se ngħid hawnhekk hija li minflok jitqabblu s ugwali = t, Jien minflok se ngħid, jekk string paragun ta 'virgola s t ugwali = 0. Issa, dak li huwa string jqabblu? 

Jirriżulta, huwa funzjoni li tiġi ma C, li l-iskop fil-ħajja huwa li jitqabblu żewġ kordi. U ħawwad jqabblu, jekk naqraw tagħha paġna bniedem jew dokumentazzjoni jew CS50 referenza, li se sempliċiment jgħidlek li ħawwad jqabblu prospetti jew negattivi Numru jew numru pożittiv jew żero, fejn zero ifisser li qed indaqs. 

Hekk biss konġettura. Liema jista jfisser jekk ħawwad prospetti jqabblu valur negattiv jew il-valur pożittiv? UDJENZA: Aktar minn jew inqas minn. DAVID J. Malan: Yeah, akbar minn jew inqas minn. Mela jekk int riedu biex issolvi kollu mazz ta 'kordi fil dictionary-- kif aħna se eventwalment tistabbilixxi l-road-- funzjoni perfetta għall-użu potenzjalment, minħabba li għaddej biex tagħmel dan paragun ta 'kordi għalik, u għid inti tagħmel jasal quddiem b, jew ma b come qabel alfabetikament. Nistgħu nagħmlu eżattament dan. 

U avviż Jien għamilt waħda oħra ħaġa f'dan l-eżempju. X'iktar nbidel ogħla up f'dan funzjoni ewlenija? Char *. U dan huwa dak gidba abjad ieħor. Dan il-ħin, meta inti stajt ġie kitba string, aħna ġew segretament riskrittura string bħala char * hekk li clang attwalment jifhem inti. 

Fi kliem ieħor, fil CS50.h u kif aħna ser eventwalment tara, għamilna sinonimu imsejjaħ string dak l-istess ħaġa bħat char *. U għal issa, biss jafu li l- *, F'dan il-kuntest, għall-inqas, ifisser-indirizz. 

L-indirizz ta 'dak? Ukoll, il-fatt li għidt char *, u mhux int * jew float *, ifisser li char * hija l-indirizz ta 'char. Allura din il-kaxxa ftit hawn, aka string, huwa verament ta 'tip char *, li huwa sempliċiment mezz fancy ta 'tgħid, f'din il-kaxxa se jmorru indirizz. U dak li ma l-indirizz jirreferu għall? Apparentement, char. 

Iżda nistgħu assolutament jkollhom int * u affarijiet oħra. Iżda għal issa, char * huwa verament l-aktar sempliċi u waħda ta 'interess. Allura din il-problema li qed jiġri jogħlew, għalkemm, għal darb'oħra. 

Ejja ngħidu I jiftħu dan il-programm. Ejja ara jekk issa nistgħu jbassru x'hemm ħażin ma 'dan il-kodiċi. Allura f'dan il-programm, kopja-0, jien se jmorru 'l quddiem u għal darb'oħra sejħa GetString u jaħżnu l-valur fl-i. 

U mbagħad, għaliex jien tagħmel dan, biss bħala tfakkira minn ġimgħat passat? Aħna ma jgħidu li GetString kultant prospetti null. Xi jfisser jekk GetString prospetti null? Xi ħaġa li marret ħażin. Huwa probabbilment tfisser il-sekwenza huwa wisq big, out tal-kompjuter ta 'memorja. Dan jiġri super, super, super rarament, iżda jista 'jiġri. Aħna rridu li jikkontrolla għal dan, u li kollox li aħna qed tagħmel. 

Għaliex aħna ser tara issa, jekk inti ma tibda iċċekkjar abitwalment għal affarijiet bħal null, inti tista attwalment jibdew imorru indirizzi fil-memorja li huma invalidi. U int ser tibda inducing aktar u aktar difetti segmentazzjoni. Jew fi Mac jew PC, just jikkawżaw kompjuter li hang jew programm 'ffriżar, potenzjalment. 

Allura issa, I talba f'kopja-0.c, li jien vais kopja dawn kordi permezz tal-linja 28. U mbagħad, jien ser li titlob fil-qiegħ hawnhekk li jien ser jbiddel wieħed minnhom. 

Allura avviż dan. Jien ssejjaħ strlen tagħna ħabib antik. U biss jispjegaw bl-Ingliż liema din il-linja 34 qed tagħmel? X'tagħmel t bracket 0 jirrappreżentaw fuq ix-xellug. Yeah. 

UDJENZA: L-ewwel karattru ta 't? DAVID J. Malan: L-ewwel karattru ta 't. Li dan. Ewwel karattru ta 't, nixtieq li jassenja l-verżjoni uppercase ta 'l-ewwel karattru f't. Allura dan huwa kapitalizzazzjoni l-ewwel ittra. U mbagħad, il-ħafna aħħar ħaġa I do f'dan il-programm huwa nitlob hawn l-oriġinali, i, u hawnhekk l-kopja, t. 

Iżda bbażata fuq l-istorja aħna biss qal dwar liema kordi verament huma, dak li hu linja 28 verament tagħmel, u dak li huwa l-bug jirriżultaw għaddej li tkun fuq l-iskrin? 

Allura l-ewwel, l-ewwel domanda, 28. X'inhu = string t i verament tagħmel? Jekk għandna fuq il-naħa tax-xellug ġenb hawn = string t s; li tagħti me kaxxa waħda hawn u kaxxa waħda hawn. U jissoponi dan l-indirizz huwa 0x, ejja ngħidu, 50 dan iż-żmien, b'mod arbitrarju. X'jagħmel = string t s do taħt il-barnuża? 

UDJENZA: [inaudible] 

DAVID J. Malan: Taħżen l-memorja jindirizzaw hemmhekk, sabiex 0x50 tmur hemmhekk. Allura jekk issa, I mur l-ewwel karattru f't u uppercase dan, dak li jien effettivament jagħmlu biex i? Ninsab verament tagħmel l-istess ħaġa, id-dritt? Għaliex jekk 0x50-- Indirizz u biss, I m'għandhomx wisq spazju fuq il-bord hawn, iżda jassumi li dan huwa 0x50 stabbiliti hawn, x'imkien fil-memorja tal-kompjuter tiegħi. 

U jien, per eżempju, Gabe fl zghar hawn, bħal dan. U għidt bracket t 0 gets kapitalizzat. Ukoll, t parentesi 0 hija l-ewwel ittra f't. Allura ftit g va jsiru G. big Iżda l-problema huwa, dak ma s wkoll il-punt li? 

UDJENZA: L-istess. 

DAVID J. Malan: L-istess ħaġa eżatt. Allura spjegazzjoni sempliċi forsi, anki jekk il-sintassi hija ftit stramb. Mela ejja tagħmel dan. Make-kopja 0 u mbagħad ./copy-0. Say xi ħaġa: Gabe. U sfortunatament, it-tnejn minnhom issa ġew kapitalizzat, iżda għal dak sottostanti raġuni li aħna qed sempliċiment issa jittrattaw indirizzi. 

Allura kif nistgħu jibdew address-- no pun intended-- kif nistgħu tibda tindirizza din il-problema partikolari? Ukoll, fil-copy1.c, affarijiet sejrin biex tikseb ftit aktar kumplikata. Imma nixtieq tippretendi Soluzzjoni kunċettwalment sempliċi. 

Allura diffiċli biex jiksbu ewwel daqqa t'għajn. Mhux se tkun faċli għall-ewwel ħin inti tip out, forsi, iżda jekk il-problema hija li sempliċiment tagħmel = t i biss kopji-indirizz, liema, ġdid jekk I tista 'pick fuqek, se tkun is-soluzzjoni għal fatt ikkupjar string? 

UDJENZA: Aħna ser probabbilment tuża loop darb'oħra. 

DAVID J. Malan: Yeah. Allura aħna qed tmur biex bżonn loop darb'oħra. U għaliex jekk aħna tixtieq li kopja string s fis string ieħor, aħna probabbilment tixtieq li tagħmel dan karattru mill-karattru. Iżda l-problema hija, jekk dan huwa oriġinarjament s, issa għandna bżonn biex tibda espliċitu allokazzjoni memorja għal t. 

Fi kliem ieħor, ejja tiġbed dan għall-aħħar darba. Jekk dan huwa string s = GetString. U ejja tpoġġi dan up here, kif ukoll. Dan huwa GetString. U mbagħad, l-istampa għal xi ħaġa bħal dik se tkun bħal qabel, g-a-b e / 0. Li jistenna ftit xi ħaġa bħal din. U s għalhekk, nagħmlu sejħa dan 0x50, u li għaddej biex tkun 51, 52. 

Allura dan huwa 0x50. U mbagħad, I do string t. Fil-memorja, li jinsab biss se tagħti me ftit kwadru bħal dan. Allura x'inhu l-pass ewlieni issa? Jekk I tixtieq li kopja s fis t, liema vojt għandna bżonn biex timla hawn? Jew dak li għandna bżonn li do fuq livell għoli? Yeah? Xi ħadd? Yeah. 

UDJENZA: Għandna bżonn li [inaudible]. DAVID J. Malan: Yeah, aħna bżonn timla dan il-vojt. I ma tista 'kopja u mbagħad kapitalizzazzjoni isem Gabe tal sal I titlob lill-sistema operattiva għall chunk ieħor ta 'memorja li l-inqas kemm kbar kif l-oriġinali. Allura li tħalli us bil-kwistjoni. 

Kif nista titlob lill-sistema operattiva ma biss għal Pointer ftit sempliċi kif din tissejjaħ, ta indirizz, l-Pointer ma għal ftit kaxxa sempliċi bħal din tissejjaħ string? Kif nista titlob lill-operattiva sistema għal blokki kbar ta 'memorja? S'issa, stajt biss gotten li back indirettament billi ċċempel GetString. Allura kif huwa GetString anki jkollna memorja tiegħu? 

Ukoll, jirriżulta li hemm din il-funzjoni oħra hawn li aħna issa ser tibda tuża. Issa, dan jistenna than-- b'mod aktar cryptic u jiena l-unika waħda li tista 'tara it-- din il-linja jistenna b'mod aktar cryptic allura għandu fl-ewwel daqqa t'għajn. Imma ejja tease l barra. 

Fuq in-naħa tax-xellug, I jkollhom char * t. Allura bl-Ingliż, ejja nibdew biex jifformulaw sentenzi xierqa fil jargon tekniku. Allura dan huwa allokazzjoni ta ' varjabbli ta 'char tip * t imsejħa. Issa, dak li verament ma jfisser? 

Ukoll, dan ifisser, dak li jien ser biex tistabbilixxi dan il-varjabbli imsejħa t? An-indirizz ta 'char. Allura li jinsab biss l-aktar sempliċi, aktar mod raġonevoli jiddeskrivi in-naħa tax-xellug. Allura li toħloq din il-kaxxa hawn biss. Allura l-naħa tal-lemin, preżumibbilment, huwa għaddej li jalloka li akbar blokki ta 'memorja kif? Mela ejja tease dan apparti. 

Huwa enormi fl-ewwel daqqa t'għajn, imma x'inhu għaddej ġewwa hawn? L-ewwel, hemm malloc, li hija apparentement ħabib ġdid tagħna, "Memorja jalloka." Allura dan huwa l-argument qed ikunu mgħoddija fis dan, dan huwa argument pretty big. Mela ejja tease dan apparti. 

strlen ta 'i, naturalment, jirrappreżenta the-- UDJENZA: In-numru ta 'karattri. DAVID J. Malan: Biss il- numru ta 'karattri fit s. Allura l-tul ta 'i, il-string oriġinali. Allura-G a-b-e. Allura huwa probabbilment erba f'dan il-każ. Why am I tagħmel +1 wara ssejjaħ strlen ta s? UDJENZA: [inaudible] DAVID J. Malan: Għal dak karattru speċjali null. Jekk inti titlob lili x'inhu l-tul ta ' Isem Gabe, jiena vais ngħid erbgħa. Taht il-barnuża, għalkemm, I bżonn li ħames byte għall-karattru null. Allura hu għalhekk li jien tagħmel l +1. 

Issa biss fil-każ li inti taħdem dan programm fuq il-kompjuter minbarra, say, l-appliance CS50, fejn id-daqs ta 'char jista 'jkun differenti minn computer-- tiegħi stess Jirriżulta li nista 'sejħa dan sizeof operatur, staqsi il-kompjuter, x'inhu d-daqs ta ' char fuq dan il-kompjuter? 

U billi timmultiplika ħamsa f'dan pereżempju bl-daqs ta 'char, li fuq kompjuters aktar se jkun biss wieħed, malloc se talloka għalija dan big blokki ta 'memorja fuq hawn fuq il-lemin. U li għaddej biex return-- huwa function-- hekk huwa ser jirritornaw għall lili dak? UDJENZA: L-indirizz? DAVID J. Malan: L-indirizz ta 'dak? UDJENZA: Tal il-memorja huwa allokat? DAVID J. Malan: Tal il memorja huwa allokat. So I jkollhom l-ebda idea, franchement, fejn dan ikun ser jispiċċaw. Jien ser tipproponi li li għaddej biex jispiċċaw fil 0x88. Kompletament arbitrarja, iżda x'imkien ieħor għajr 0x50, għaliex is-sistema operattiva, liema Windows u Mac OS tagħmel għalija, huwa kun żgur li huwa jagħti me biċċiet differenti ta 'RAM. 

Allura dan huwa l-valur, fejn dan blokki ta 'memorja tista' tispiċċa. Allura dan huwa dak jispiċċa fil hawn, 0x88. Allura issa b'mod ċar, I jistgħu jifhmu li dan mhuwiex l-istess bħal dan, għaliex qed tipponta lejn biċċiet differenti ta 'memorja. Mela jekk jien issa fil-fatt tixtieq li kopja din fil, ejja do soluzzjoni proposta tiegħek. 

Ejja biss jmorru, joħolqu għal loop, u jagħmlu bracket t i gets bracket s i. Minħabba issa I jistgħu jużaw dan-array like notazzjoni, għaliex anki jekk malloc ħafna ġeneriku jalloka me memorja, memorja huwa bytes biss kontigwi. Byte, byte, byte, lura lura biex lura. 

I jista 'żgur bħala programmer titratta dan bħala firxa, li tfisser I jistgħu jużaw dan finalment familjari notazzjoni tal biss xi parentesi kwadri. 

So let me nieqaf hemm, għaliex dan huwa ħafna kollha f'daqqa, anke għalkemm l-idea bażika li terġa hija li string, dan il-ħin, mhix tip ta 'dejta ġdid per se. Huwa biss hekk imsejħa pointer, indirizz ta 'karattru, li ifisser biss huwa numru li permezz tal-konvenzjoni tal-bniedem għandna t-tendenza li tikteb bħala 0x xi ħaġa. 

Iżda huwa biss numru, bħal 33 Oxford Street, li jiġri li jkun l- Indirizz bini CS tal. Kwalunkwe mistoqsijiet dwar dawn id-dettalji? Yeah? 

UDJENZA: Għalfejn nagħmlu check għal t ugwali għal nulla? 

DAVID J. Malan: Għalfejn nagħmlu iċċekkja għal t ugwali għal nulla? Jekk naqraw il-documentation-- question-- kbira għall malloc, li għaddej biex ngħid fil-istampar multa, kultant malloc tista 'ritorn null, bħad GetString. U fil-fatt, GetString prospetti nulli jekk, imbagħad, malloc prospetti nulli, minħabba GetString użi malloc. 

U li jista 'jiġri jekk il-OS, Mac OS, Windows, ikun x'ikun, huwa sempliċiment out ta 'memorja għalik. Allura dan huwa dak li ġara hemmhekk. 

U let me jiżvelaw ħaġa waħda oħra li jistgħu biss blow moħħok jew kompletament tkun wisq fuq il-linja. Imma let me pull up il- istess għall loop għall-ikkupjar, li mument ilu, recall kien dan. bracket t i gets bracket s i. 

Nizza u faċli għall-utent. Iħoss bħal Week Żewġ darb'oħra. Iżda din il-verżjoni attwalment jista 'jkun miktuba mill-ġdid bħala dan, li tidher cryptic. Huwa ta 'teknika msejħa pointer aritmetika, indirizz aritmetika. Iżda għaliex ma dan ix-xogħol? 

Issa annoyingly, il- awturi ta 'C iddeċidew li jużaw is-simbolu * għal skopijiet differenti. Rajna hija użat darba diġà, char *, li tfisser "tagħti me a varjabbli li għaddej biex fihom l-indirizz ta 'char. " * Allura char f'dak il-kuntest ifisser "tagħti me a varjabbli." 

Sfortunatament, jekk inti tuża l-* mingħajr kelma quddiem ta 'dan, bħal char, huwa issa msejjaħ l- operatur dereference. U aħna ser tara aktar ta 'dan qabel twil. Iżda dan ifisser biss "jmorru hemm." Huwa simili qal, jekk xi ħadd mogħtija lili fuq biċċa karta "33 Oxford Street," jekk I do "* Oxford Street 33," dan ifisser "Go fl-triq għall-bini CS." 

Allura * ifisser biss jmorru hemm jekk hemm l-ebda kelma quddiem ta 'dan. Allura dak li huwa t, li jkun ċar? t huwa l-indirizz tal-blokki ta ' memorja li ngħatat lura lili. i huwa l-indirizz ta 'dak li, biex tkun ċara, fl-eżempju aħna kont qed tiddiskuti, tal Gabe zghar? i huwa l-indirizz of-- UDJENZA: L-sekwenza. DAVID J. Malan: Of isem oriġinali Gabe tal. Allura huwa l-indirizz ta ' din blokki ta 'memorja. Mela jekk jien ngħid t + I-- i, avviż, huwa biss ħabib antik tagħna. Huwa biss varjabbli indiċi thats mtennija minn żero fuq up għat-tul tas-sekwenza s. Allura li għaddej biex tkun żero, allura wieħed, imbagħad tnejn, imbagħad tlieta, imbagħad erba. Mela ejja jimmuntaw dawn ġdida Biċċiet puzzle scratch simili, jekk inti se, anki jekk, għal darb'oħra, il-sintassi huwa ferm aktar arcane minn Scratch. Allura t huwa indirizz + i huwa ser jagħti me numru, minħabba li dawn huma kollha numri li aħna kont qed tpinġija bħala hex. Iżda dawn qed biss numri. 

Mela jekk l-indirizz ta 't għidna kien 0x88, x'hemm 0x88 plus żero. Anke jekk int mhux komdu ma hex għadhom, tieħu raden. 

UDJENZA: L-oriġinal. 

DAVID J. Malan: Still 0x88. Allura dak li ma * 0x88 jfisser? Dan ifisser, "jmorru hemm" li tfisser effettivament, "iqiegħed subgħajh tiegħek hawn." U issa fuq in-naħa tal-lemin tal din l-espressjoni, * u mbagħad fl parens, s + i jfisser i, li hija l- jindirizzaw up here tal-g ftit. i + 0 huwa, ovvjament, i, ikun x'ikun i huwa. 

Allura issa, huwa * i, li bħad * 33 Oxford Street ifisser mur l-indirizz s. Allura hawnhekk dan saba, lemin. Allura dak am I se kopja fil dak? Il-ħaġa dwar id-dritt, li hija Gabe, ftit g hawn, fis hawn. 

U għalhekk l-effett ta 'dik ewwel iterazzjoni tal-linja, kif inti propost, anki jekk jidher crazy aktar ikkumplikat minn kull ħaġa konna rajna qabel, huwa sempliċiment tgħid mur hawn u kopja dan il-karattru hawnhekk. Huwa giving you mappa biex żewġ postijiet. 

U aħna ser tara ħafna aktar ta 'dan. Iżda għal issa, it-tama hi biss li jintroduċu xi wħud minn dawn l-ideat bażiċi. U fil-fatt, ejja nħarsu lejn programm finali wieħed hawn, u allura l-claymation imwiegħed, li se tagħmel dak kollu dritt. Kull dritt. So let me tiftaħ up-- hemm immorru. Mela ejja me-- aħna ser terga 'lura li din l-istampa qabel twil. Let me jiftħu dan l-eżempju finali hawn. 

Allura hawnhekk huwa super, super programm li accomplishes xejn fil-ħajja li ma l-segwenti. Hija l-ewwel jiddikjara żewġ varjabbli, x u y, li mhumiex numri dan iż-żmien, per se. Huma qed mhux interi, per se. Huma apparentament int *. Allura biss xi ħadd, xi jfisser jekk tip ta 'data tiegħek, varjabbli tiegħek, huwa ta 'int tip * star? Dik hija l-indirizz ta 'int. 

So I stajt ebda idea fejn hu għadu. Dan ifisser biss "mressaq, eventwalment, l-indirizz ta 'int hawn. " 0x50, 0x88, kull fejn hija fil- memorja, l-indirizz huwa għaddej hemmhekk. U dan huwa dak y hija ser ikunu, kif ukoll. 

Jekk I issa ngħid x = malloc (sizeof (int)), dan huwa mod fancy ta 'tgħid, ħej sistema operattiva, permezz malloc, tagħti me memorja biżżejjed għall-daqs ta 'int, li huwa probabbilment ser ikunu ta '32 bits jew erba bytes. 

Allura dak li ma malloc ritorn? Malloc jirritorna indirizz. Allura x'inhu għaddej biex nikseb maħżuna fil x? L-indirizz tal-blokki ta ' memorja, l-erba 'bytes, li malloc biss sabu għalija billi tistaqsi is-sistema operattiva. 

Issa sadanittant, linja erbgħa hawn, il-* x = 42. Just biex tkun ċara, x'inhu għaddej hemm isfel? Fuq in-naħa tax-xellug, * x. li simili * 33 Oxford Street. Allura * x ifisser liema? 

UDJENZA: Mur. 

DAVID J. Malan: Mur f'dak l-indirizz. Kull fejn dik blokki ta ' memorja huwa, mur għaliha. U tpoġġi dak hemm, ovvjament? UDJENZA: 42. DAVID J. Malan: 42. Kull dritt, y *, l-istess idea. Mur fl-indirizz y. Poġġi n-numru 13 hemmhekk, imma dak li hu y fil-mument? UDJENZA: M'hemm l-ebda memorja għall y. DAVID J. Malan: M'hemm l-ebda memorja għall y. Allura dak li ma y probabbilment fihom, kif aħna kont qed tgħid? 

UDJENZA: Żibel. 

DAVID J. Malan: Xi valur żibel. Issa, il-valur żibel għadu numru. Hija xorta jistgħu jiġu interpretati indirizz. Huwa bħallikieku xi ħadd mħarrbxa xi ħaġa isfel, u I interpretawh b'mod inkorrett fis-sens xi bini fl-triq. U jekk inti biss tipprova li jmorru fis xi bini inti ma proprji, jew xi blokki ta 'memorja int ma Kien mogħti, affarijiet ħżiena jista 'jiġri. Computer jista crash, jew xi oħra imġieba mhux determinat jista 'jiġri. 

Allura l-intro, imbagħad, li Binky hija din. I still remember, 20 xi snin bil-fard aktar tard, fejn I kien meta I finalment mifhum pointers. 

Liema jiġifieri, jekk inti leave hawn fi tliet minuti u think I ma jifhmu pointers, tirrealizza Għandi mfakkar għall-20 snin għall xi raġuni crazy meta u għaliex finalment għereq fil, seduta bit-tagħlim tiegħi sħabi, Nishat Mehta fil- dahar tal Eliot Dining Hall. Issa, stajt mfakkar dan minħabba li dan kien waħda mit-temi I, fil partikolari, tħabtu ma. U allura, finalment għafast, bħal I DARE jgħidu ħafna ta 'suġġetti eventwalment se. U issa, biex jagħmlu li jħossu li l- kuntenti u l-aktar konvinċenti, ejja tagħti ħarsa finali tagħna aħħar tliet minuti hawn fuq Binky, minn ħabib tagħna, Nick Parlante minn Stanford. 

[Daqq ta 'video] 

-Hey, Binky. Wake up! Wasal iż-żmien għall-gost pointer. 

Liema-li? Tgħallem dwar pointers? Oh, Goody! 

-Well, Biex tibda, I raden aħna qed ser jeħtieġu koppja pointers. 

OK. Dan il-kodiċi jalloka żewġ pointers, li jista 'jiġbed l interi. OK. Well, I tara l-żewġ pointers, iżda dawn ma jidhirx li jkun tipponta lejn xi ħaġa. 

-li-Dritt. Inizjalment, pointers ma jurux xejn. L-affarijiet dawn jenfasizzaw huma msejħa pointees, u meta dawn jitwaqqfu l pass separat. 

-OH, Id-dritt, id-dritt. Jien kont naf li. Il pointees huma separati. Er, hekk kif taħseb li jallokaw pointee? 

OK. Ukoll, dan il-kodiċi jalloka a pointee ġdid numru sħiħ, u dan parti tistabbilixxi x-punt lilha. 

-Hey, Li jistenna aħjar. Sabiex tagħmel dan jagħmlu xi ħaġa. 

OK. I ser dereference il-pointer x biex jaħżen numru 42 fis pointee tagħha. Għal dan trick, I bzonn tiegħi Magic Wand ta Dereferencing. 

-Your Magic Wand ta Dereferencing? That-- li l-kbir. 

-Dan Huwa dak li l-kodiċi Dehra. I ser biss twaqqaf in-numru, u [POP] 

-Hey, Ħarsa. Hemm din tmur. 

-Allura Tagħmel dereference fuq x ġej il-vleġġa għall-aċċess pointee tagħha. F'dan il-każ, maħżen 42 fil hemmhekk. Hey ipprova uża dan biex jaħżnu l-għadd 13 permezz tal-pointer oħra, y. 

OK. I ser biss jmorru fuq hawn biex y, u jiksbu l-numru 13 set up. U mbagħad, jieħdu l-Wand ta Dereferencing u biss [BUZZ] 

-OH! 

-OH, Ħej! Li ma ħadmux. Say, Binky, ma naħsibx dereferencing y hija idea tajba, għaliex inti taf, twaqqif tal-pointee huwa pass separat. U jien ma naħsibx li aħna qatt ma kien. 

Punt -Good. -Yeah. Aħna allokat il-y pointer, iżda aħna qatt tistabbilixxi li jippuntaw lejn pointee. 

-Very Attent. -Hey, Qed tfittex tajba hemmhekk, Binky. Inti tista 'tiffissa lilha hekk li l-punti y għall-istess pointee bħala x? 

-Sure. I ser tuża Magic Wand tiegħi ta 'Assenjament Pointer. 

-Il Li għaddej biex tkun problema bħal qabel? -Nru. Dan ma tmissx il-pointees. Hija biss bidliet pointer wieħed biex punt li l-istess ħaġa bħat ieħor. 

-OH, Nara. Issa punti Y-istess post bħall x. Allura stenna. Issa, y hija ffissata. Hija għandha pointee. Allura inti tista 'tipprova l-Wand ta Dereferencing darb'oħra biex jibagħtu l-13 fuq. 

-Uh, OK. Hawnhekk tmur. [POP] 

-Hey, Tħares lejn dak. Issa dereferencing xogħlijiet fuq y. U minħabba l-pointers huma qsim li pointee wieħed, tnejn tara l-13. -Yeah. Qsim, ikun x'ikun. Allura aħna se jaqilbu postijiet issa? 

Oh, tħares. We qed barra ta 'żmien. 

-But-- 

Just ftakar-tliet regoli pointer. Numru Wieħed, l-istruttura bażika huwa li inti għandek pointer, u punti fuq għal pointee. Iżda l-pointer u pointee huma separati, u l-iżball komuni huwa li jitwaqqaf pointer, iżda li tinsa biex tagħtiha pointee. 

Numru Tnejn, dereferencing pointer jibda fil-pointer u ssegwi vleġġa tiegħu fuq għall-aċċess pointee tagħha. Kif nafu lkoll, dan jaħdem biss jekk ikun hemm a pointee, liema tip ta ' gets lura għall-numru wieħed regola. 

Numru Tliet, pointer assenjazzjoni jieħu pointer waħda u bidliet li punt li l- istess pointee bħala pointer ieħor. Allura wara l-assenjazzjoni, iż-żewġ pointers se jindika l-istess pointee. Kultant, li sejjaħ qsim. U li kollox hemm għaliha, verament. Bye bye issa. [END daqq ta 'video] DAVID J. Malan: Li lilha għall CS50. Aħna se tara int ġimgħa d-dieħla.