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
[Мусиц плаиинг] Давид Ј. Малан: У реду. То је ЦС50, и ово је крај седмице Фоур. А једна од тема данас јесте дигиталне форензике, уметност опоравак информација. И заиста, иако сте у сред сада мира на три и Бреакоут, следеће недеље, фокус ће бити на управо овом домену. 

Тако да је један од најбољих послова које сам икада Имао се вратио на постдипломским студијама, када сам радио за локалне Миддлесек Цоунти јавног тужиоца канцеларија, раде форензичари раде. У суштини, Масачусетс Стате Полице, повремено, када се ради о случајевима би доведе ствари као што су хард дискови и дискете и меморијске картице и слично. И они би их предати мени и мој ментор, а наш циљ је био да пронађе доказе, ако постоји било каква, на овим медија. Сада сте можда видели Глимпсес на овом свету форензике у медијима, ТВ и филмове. Али сам имао посао, и Усуђујем се да кажем да је свет, није баш као да би га видели. Хајде да погледамо шта вероватно сте видели. [ВИДЕО РЕПРОДУКЦИЈА] ОК. Сада, хајде да добро погледам. 

[Мусиц плаиинг] 

Дрћи га. Рун то назад. 

Стани мало. Иди десно. Ето. Фреезе то. -Комплетна Екрана. 

ОК. Фреезе то. -Тигхтен Се на то, хоћеш ли? 

-Вецтор У на који Момак од задње точак. 

-Зоом У овде на овом месту. 

-Са Одговарајућу опрему, слика се може увећати и изоштрио. 

Шта је то? 

-То Проширење програма. 

Можеш ли јасно да се било? 

Не знам. Хајде да га побољша. 

-Енханце Одељак А6. Ја побољшана детаље, и-- -Мислим Има довољно да се побољша. Пустите га на мој екран. 

-Ја Побољшана одраз у њеном оку. -Хајдемо Рун овоме Видео проширење. 

-Едгар, Можете побољшати ово? 

-Ханг Даље. 

-Била Радили на овом размишљање. 

-Тамо Нечији одраз. 

-Рефлецтион. -Тамо Одраз човековом лицу. 

-тхе Одраз! -Тамо Одраз. -Зоом У на огледалу. Можете видети одраз. 

Можеш ли побољшати слику одавде? Можеш ли га побољшати? Можеш ли га побољшати? Можемо ли да побољша ово? Можеш ли га побољшати? -Задржите Секунду. Ја ћу побољшати. -Зоом У на вратима. -Тимес 10. -Зоом. -Мове У. -Више. Чекај, стани. Престани. -Паусе Га. -Ротате УС 75 степени око вертикалне, молим те. 

Престани. Го бацк то део О вратима поново. 

Имаш једну слику појачивач који може Битмап? 

Можда можемо да користимо Прадееп Сингх метод да видим у прозоре. 

-тхе Софтвер је стање уметности. 

-тхе Еигенвалуе је искључен. 

-Са Десно Комбинација алгоритхмс-- 

Он је предузети осветљење алгоритми на следећи ниво, и могу их користити за побољшати ову фотографију. 

-Лоцк На и увећање з-осе. 

-Енханце. Енханце. -Енханце. Стој и побољшати. [ЕНД ВИДЕО РЕПРОДУКЦИЈА] Давид Ј. Малан: Дакле, то су Све речи, али они нису били користи у реченицама правилно. И заиста у будућности, у било које време, Молим вас, чујете неко каже реч, "Побољшати", церекање само мало. Јер када покушате да побољша, На пример, то је оно што се дешава. 

Дакле, овде је предивна фотографија. То је ЦС50 сопствене Давен. И претпоставимо да смо хтели да фокусирамо на трен у његовом оку, или одраз лош момак који је очигледно заробљен од стране сигурносне камере. То је оно што се дешава када увећате слику која има само коначан број битова у вези са њом. 

То је оно што би добили. И заиста, у Давен оку је само четири, можда шест пиксела које чине тачно шта тамо Светлуцаву. Па проблем Сет четири на крају ће имати истражујете овај свет, а посебно по природи нешто зовемо Филе И / О, где је И / О је само фенси начин рекавши улаз и излаз. 

Дакле до сада, сви интеракција смо имали са рачунаром су углавном са вашим тастатура и екран, али не толико са хард диска, или чувања фајлова изнад оних које сами пишу. Ваши програми су до сада није стварање, и штеди, и ажурирање своје фајлове. 

Па, шта је фајл? Па, нешто као ЈПЕГ. То је слика и мислио имају или отпремите на Фацебоок, или види било где на Интернету. Заиста, да смо управо фото видела Давен је ЈПЕГ. И оно што је интересантно о датотекама као ЈПЕГ је да могу да буду идентификовани, типично, одређеним обрасцима битова. 

Другим речима, шта је то што разликује од ЈПЕГ ГИФ од ПИНГ из Ворд Документ из Екцел фајл? Па, то је само другачије обрасци бита. И те различити обрасци су обично на почетку тих фајлова. 

Тако да када рачунар отвара Ворд Доц, или када рачунар отвори ЈПЕГ, она обично гледа Првих неколико бита у досијеу. А ако је препозна образац, каже, ох, ово је слика. Дозволите ми да га приказали у корисник као графички. Или, Ох, ово изгледа као Ворд Доц. Дозволите ми да покажем кориснику као есеја. 

Тако на пример, ЈПЕГ, Испоставило се, су прилично софистицирани испод хаубе. Али прва три бајта већини сваки ЈПЕГ почети са ова три броја. Дакле бајт нула, један, а два су у мост сваки ЈПЕГ, 255, онда је број 216, онда је број 255. 

И шта ћете моћи да почнемо да радимо следеће недеље заправо боде испод Хоод фајлова као ЈПЕГ и као битмап фајлове, и виде оно је увек био ту за онолико дуго као што сте били помоћу рачунара. 

Али оно што је нема обично написано као децималних бројева као што је овај. Компјутерски научници не имају тенденцију да говоре децимала. Они стварно не говори у бинарни. Обично, када желимо да изразе бројева, заправо користимо хексадецималних, коју можете да се сећате од, рецимо, проблем Сет Један, који оспорава да размислите о другачијем систему. 

Ми, наравно, су упознати уз децимала, нула до девет. Разговарали смо о бинарни. А ми не стварно имати користити толико овде надаље, јер рачунари ће користити то. Али програмери ће врло често, али не увек, користи хексадецимални, што само значи имате 16 слова у алфабету, за разлику од два или 10. 

Дакле, како да рачунају на веће од девет у хексадецималном? Ти иди 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, Б, Ц, Д, Е, Ф, само конвенције. Али оно што је кључно јесте да свака од њих је један симбол. Нема 10. Нема 11, само по себи, јер је свака ваших цифара, као иу децимала И баш као у бинарни, треба само буде један лик, по обичају. 

Тако да је, дакле, алфабет имамо на располагању за хексадецималне. Па шта ЈПЕГ изгледам ако ми требало је да написати прво оне три бајтова не као децимала али, на пример, као хексадецимални? И зашто је Хек и све то корисно? 

Па, брз поглед на пример. Дакле, ако сам написати битове које представљају ове децималног нумберс-- То може бити мало зарђао сада од неколико недеља уназад, али лева и прави су прилично лако. 255 је био највећи број се могла представљати са осам бита. То је било све оне. Тако да једина која је благо Занимљиво је један средњи. А ако мало раде из математика, ви ћете закључити да је, заиста, да образац једног и нуле представља 216. Дакле, хајде да само предвиђају за Сада да су тачни. Али зашто је ово интересантно? 

Па, бајт, наравно, јесте осам бита. И испоставило се да, ако мислите једног бајта као два комади четири бита, овако. Само да додам мало простора. Дакле, пре, после. Управо сам додао мало белог простора ради визуелизацију је овде. Како би сада представљати у, рецимо, сваки хексадецимални Куад бита, Сваки сет од четири бита? 

Тако на пример, на левој Сада имамо 1111 у бинарном. Који је тај број у децимала, ако то урадите кроз математику? Имате оних место, двојки место, четворке место, а осмице место. 

Публика: 15. Давид Ј. Малан: То је 15. Дакле, ако радимо осам плус четири плус два плус један, добијамо 15. Тако да сам могао записати 15 испод 1111, али је поента овде је хексадецимални, није децималне. Дакле, уместо писања доле 15, 1-5, Ја ћу да напишем да је у хек, који, ако мислите назад, ако имате нула кроз Ф, што се 15 ће бити? Публика: Ф. Давид Ј. Малан: Тако испада да је то ф. И можете да радите да од стране говорећи, добро, ако је 10, онда у реду, ф 15. Дакле заиста, могли бисмо да препише Овај исти низ бројева, као Ф ф. И онда ако урадимо мало математике, ћемо закључити да је то ум. Осам је прилично лако, јер смо ми имају један у осмог месту. А онда, имамо још пар Ф Ф је. 

Па шта људи имају тенденцију да уради Конвенцијом када користе хексадецимална им је само ово пишем мало више језгровито, отарасити већину тог белог простора. И само да буде супер јасно читаоци да се то хексадецималном Симпле Конвенција међу људи је пишете нуле к, која нема значење другог од визуелног идентификатор, овде долази Хек број. 

А онда, ставите две цифре, ф ф у овом случају, онда д, тада је ф ф. Па скратим причу, хексадецимална само тежи да буде користан јер сваки од његових цифре, нула до Ф, савршено линије са обрасцем четири бита. 

Дакле, ако имате два хексадецималних цифара, Зеро кроз Ф, поново и поново, који вам даје савршено осам бита или један бајт. Дакле, то је због тога тежи бити конвенционално корисно. Нема интелектуалне садржај заиста више од тога, осим њене стварне корисности. 

Сада ЈПЕГ нису једини формата за графику. Можда се сећате да постоје фајлова као што је овај у свету, најмање од пре неколико година. 

Дакле, то је у ствари инсталиран у оперативном систему Виндовс КСП на милионе рачунара широм света. И то је било Битмап фајл, БМП. И Битмап датотека, као што ћете видети Следећа недеље, само значи да образац тачака, пиксела јер они зову, мапе на бита, стварно. 

Па шта је занимљиво, међутим, о овом формату, БМП, је да испод хаубе, то има више од три бајта да састави свој заглавље, тако да говоре, првих неколико залогаја. То је у ствари изгледа мало компликовано на први поглед. А ви ћете видети у П сету. И добијање нешто Посебно од овога сада није толико важно, јер само чињеница да на почетку сваке битмапа Филе, графички формат, постоји читава гомила бројева. 

Сада Мицрософт, аутор овог формата, тежи да позове оне Ствари не интс и знакова и плута, али речи и д речи и жуди и бајтова. Тако да су само различите врсте података. Они су различита имена за исту ствар. Али видећете да је у П четвртим сетом. 

Али ово је само да кажем да ако човека Доубле-кликне неки .бмп фајл на свом или њен хард диск, а отвара се прозор до њега или њу да је слика која приказује, то се десило јер оперативни Систем вероватно приметили, не само екстензија .бмп фајл у име датотеке, али и чињеница да постоји неки Конвенција на узорак битова на самом почетку те битмап датотеке. 

Али хајде да сада фокусирамо на таква компликована датотека, већ на нечему овако. Претпоставимо да овде у гедит, ја само почетке програма који је прилично једноставно. Имам неке укључује горе. Сада имам #инцлуде "струцтс.х", али Вратићу се на то за тренутак. Али ово је корисно за сада. Тако да је ово програм која ће да спроведе као базе података секретара. Тако да база података ученика, и сваки ученик у свету има име и кућу и вероватно неких друге ствари, али ми ћемо га задржати једноставно. Сваки студент има име и кућу. 

Дакле, ако сам желео да напише Програм чији је циљ у животу је само да прелазили из нула на до три, ако има три ученика на Универзитету Харвард. И ја само желим да се, користећи ГетСтринг, име и кућа сваког ученика, а онда само штампају оне напоље. 

То је нешто као Веек Оне, Тво Веек ствари сада, где ја само желим за петља, или тако нешто. И желим да позовем ГетСтринг неколико пута, а затим одштампате ф неколико пута. Па како би ја то, ипак, када су име и кућа су укључени за сваког студента? 

Дакле, моја прва идеја би бити да уради овако нешто. Први пут сам могао рећи, па, дај ми, кажу, низ стрингс називају имена. А ја не желим хардцоде три овде. Оно што желим да тамо стави? Тако да студенти, јер то је само константа проглашен на врху, само да не морам да хардцоде три у више места. На овај начин, могу да га променити једно место, и то утиче на промену свуда. А онда, можда радим стринг куће студената. 

И сад, можда нешто слично фор (инт и = 0; и <студената; сам ++. Тако да сам брзо куцање, али ово је вероватно упознати синтакса сада. 

А сада, то је било новије. Ако желим да ставим у И-ог име ученика, мислим да радим ово. А онда, а не имена али кућа у заграде и. Ја радим ово, ГетСтринг, и нека вратим и поправити ову линију. Слажу? Не слажем се? То није врло разумљив. Нисам рекао корисника шта да ради. 

Али сада, ако ја такође желео да касније, немојмо рецимо, принт ове ствари оут-- тако ТОДО касније. Ја ћу да радим више са ово-- ово вероватно јесте исправна имплементација добијање имена и кућа, три од њих укупно сваки, од корисника. 

Али ово није добар дизајн, зар не? Шта ако студент није само име и кућа, али и матични број, и број телефона, и е-маил адреса, и можда хоме паге, и Можда Твиттер ручка, и било који број других детаља у вези са студентом или лице, уопште. Како бисмо почели да додају функционалност овог програма? 

Па, осећам се као најједноставнији начин би могао бити нешто као, рецимо, инт ИДС студената. Тако да могу ставити све своје исправе тамо. А онда, нешто као и бројеве телефона, Нисам сигуран како да представљају то још увек. Па идемо напред и само позив Ова Твиттерс Студенти, који је мало чудно, али-- и гомила још поља. 

Ја сам почео да се ефикасно копирај овде. И то ће се прилично расти незграпно прилично брзо, зар не? Зар не би било лепо да је било у свету структура података познати не као инт или стринг, већ нешто виши ниво, апстракција, тако да говори, познат као студент? Ц није дошао са уграђеним функционалност за студенте, Али, шта ако сам хтео да дам било што? 

Па, испоставило се, ја ћу отворите фајл који се зове струцтс.х овде, а ви можете да урадите управо то. И ми ћемо да почнемо да радимо ово сада. А испод хаубе П поставио три, сте већ то сада ради. Не постоји таква ствар као што је г опсег РЕЦТ или г овални у програмском језику Ц. 

Људи на Стенфорду спроводи оне типови података коришћењем овог приступа овде, проглашавајући своје нове податке типови користе нову кључну реч позвао Структ и други једна се зове типедеф. И заиста, иако синтакса изгледа мало другачије од ствари смо раније видели, у принцип, то је супер једноставно. 

То само значи "дефинишу тип." То ће бити структура, и структура је као контејнер за више ствари. И да се структура иде да има стринг зове име, а стринг зове кућу. И назовимо, само за удобност, цела ова структура података ученик. 

Па у тренутку када дођете до -зарез, сада имате створио своје податке Тип се зове студент да сада стоји поред инт, и пловак, и знак, и стринг, и Г правоугаоник, овалне и Г, и било који број других ствари људи су измислили. 

Дакле, шта је корисно за ово Сада је да ако се вратим на струцт 0 и завршити ово имплементације, што сам написао унапред овде, приметио да су сви неизбежног збрци која је требало да почне дешава као што сам додао бројеве телефона и Твиттерс и све ове друге ствари у Дефиниција ученика, сада је језгровито увијено као само један низ студената. 

И сваки од тих ученика сада има више ствари у њему. Тако да само оставља једно питање. Како се добити на име, и кућа, и ИД, и шта год друго је унутар студента? Супер једноставан, као добро. Нова синтакса, али једноставна идеја. 

Једноставно индекс у низу, као што смо урадили прошле недеље и ово. А шта је очигледно Нови комад синтаксе? Само., Што значи "ићи унутра Структура и да се поље зове име, добити поље зове Хоусе, добити поље под називом студената. " 

Дакле, у П поставио три, ако сте и даље ради на томе, и већина људи још су, схватају да као и ти почети са коришћењем ствари као што г рецтс и г овала и друге ствари које не изгледа да долазе из недеље нула, један или два, схватају да је то због тога што Станфорд прогласио неке нове типове података. 

И заиста, то је управо оно што ћемо уради, као и, у П четвртим сетом, када почнемо да се бавимо стварима попут слике, сличице, и још много тога. Дакле, то је само задиркивање и ментални модел за оно што ће доћи. Сада сам процрастинатед мало јутрос. Био сам радознао да видим шта Мицрософт валлпапер ствари изгледа данас. И испада неког у 2006 заправо је отишао на скоро прецизно исто место да фотографише у стварности како изгледа то ових дана. Поље је сада мало зарасла. 

Тако да говоримо сада слика, хајде да вратимо овамо Давен на екрану и Николаја, и само да вас подсетим да, ако желите да нам се придружите на ручку петак, идите на нашем уобичајеном УРЛ овде. 

Па где смо стали у понедељак? Увели смо овај проблем, зар не? То је био наизглед исправна имплементација свап, при чему водиш два Интс, један се зове, једна се зове Б, замене их, баш као и Лаура урадио овде на сцени са млеком и водом, помоћу привремени променљива, односно празан Цуп, тако да смо могли ставити Б у и а у Б без збрку. Користили смо променљиву. То се зове Темп. 

Али оно што је основни Проблем са овим кодом у понедељак? Шта је био проблем? Да. 

ПУБЛИКА: То заузима више простора. 

Давид Ј. Малан: заузима више простор, јер ја користећи променљиву, и то је у реду. То је истина, али ја сам да кажем да је то у реду. То је само 32 бита у Гранд шеми ствари, тако да није велика ствар. Друге мисли? ПУБЛИКА: То је само свапс променљиве на локалном нивоу. Давид Ј. Малан: Тачно. Он само свапс променљиве локално. Јер сваки пут када назвати фунцтион-- када сам имао тацне од Анненберг последњи пут, имате главни на дну. Чим позвати функцију која се зове свап, свап не добије Кс и И, на првобитне вредности. Шта свап добије, зар тврдимо? Публика: копије. Давид Ј. Малан: Па копије њих. Тако да добија један и два, ако је вама подсетити пример из прошлог времена, али копија један и два које су успешно заменили. Али, нажалост, на крају, Те вредности су увек исти. Тако да можемо да видимо са нашим нови пријатељ, надам ГДБ, да или подгрупа и Ца да имамо вас води ка на следећи начин. 

Тако да нема свап Рецалл изгледа као-- хајдемо отвори ово-- изгледа овако. Иницијализовани Ми к на један, И на два. Имао гомилу Принт Ф је. Али онда, тастер за позив овде је да замени, која је управо код смо Управо сам видео малопре. Што је тачно на први поглед, али је функционално, Овај програм не ради, јер је не трајно замени Кс и И. 

Па хајде да видимо ово, брзо топло овде са ГДБ, а ./носвап. Гомила неодољив информација које Ја ћу се отарасити са Цонтрол Л за сада. И сад, ја ћу да само напред и покрените га. И нажалост, то није то корисно. Он водио програм унутар ове Програм под називом ГДБ, а дебуггер, али није дозволите ми џаку около. 

Па како да ја заправо паузирати Извршење у овом програму? Тако сломити. И ја могли сломити на било линије број, један, 10, 15. Али исто тако могу сломити симболично рекавши бреак Маин. Као и да ће поставити паузу Поинт, очигледно у ред 16 у главној. И где је линија 16? Хајдемо до коду и идите до носвап. И заиста, ред 16 је Први у програму. 

Тако да сада, ако само напред и тип рун овај пут, Ентер, она застаде. Па хајде да џаку около. Принт к-- зашто је к нула? И игнорисати знак долара. То је само за одгајивача употреба програма. Зашто је к нула у овом тренутку? Да. 

ПУБЛИКА: То је застао пре него ред 16, не баш на линији 16. Давид Ј. Малан: Тачно. ГДБ, по дефаулту, је застао Извршење непосредно пре линије 16. Тако да није извршила, која значи да је к неког непознатог вредности. И имамо среће да је то нешто попут чиста нула. Па сад ако сам типа Следеће, сада је извршена 16. То ме чека да изврши 17. Пусти ме само напред и Принт к. То је једна. Пусти ме само напред и Принт год. Шта сада треба да видимо? 

ПУБЛИКА: [неразумљиво] 

Давид Ј. Малан: Мало гласније. 

ПУБЛИКА: [неразумљиво] Давид Ј. Малан: Не баш консензус. Тако да, видимо неку вредност за смеће. Сада, и је 134514064 тамо. Па, то је само нека вредност смеће. Мој програм користи РАМ за различите намене. Има и других функција. Други људи написао у мом компјутеру. Дакле, те бита се користе за друге вредности, и шта ја видим је остаци неких прије употребе тог сећања. 

Тако да није велика ствар, јер чим као што сам следеће врсте, а затим одштампате и, то је иницијализован вредност коју желим. Тако да сада, хајде да идемо напред мало брже. Н за следећи. Хајде да то урадимо поново. Хајде да то урадимо поново. Али ја не желим да удари овде, јер ако ја желе да виде шта се дешава унутра своп, шта је команда? 

Публика: кораци. 

Давид Ј. Малан: кораци. Дакле, ово ме је кораке у функција је, уместо преко њега. А сада, мало је Цриптиц искрено, али то је само ми говори да сам у реду 33 сада. И хајде да поновимо ово. Принт Темп. Смеће вредност, негативна овај пут, али то је само још вредност смеће. Па хајде да урадимо следећи, штампања темп. То је иницијализован на 1, која је била вредност Кс, ака. 

Сада, где су наша ак долази? Па, приметити у главни, ми смо зове Ове вредности к и и. Затим смо прошли их замене на следећи начин. Кс је дошао први, зарез год. А онда, Свап могло назвати Кс и И. Али због јасноће, то је називајући их и б. Већ и б су сада ће бити копије од Кс и И, респективно. 

Дакле, ако се вратим у ГДБ иде, Темп је сада један и данас је једна. Али, ако сам следеће да урадим, а сада принт , већ су прешли. Млеко је сипа у бивше Стакло сок од поморанџе, или обрнуто. 

И ако ја Следеће поново, и сада ако сам одштампате као проверу исправности, је и даље два, а Б је сада један. Искрено, то је још увек тамо. Не занима ме шта је температура. Али чим сам сада куцате, рецимо, наставити да се вратим, сада сам на крају Програм. И нажалост, к је и даље један и и је још увек два. 

Дакле, шта је корисност ГДБ тамо? То није да ми помогне да поправим проблем пер се, али ми надамо помоћи разумеју га схватајући да јесте, моја логика је у праву, али је Моја код није коначно има стални утицај. Дакле, то је проблем смо сад да реши данас. 

Али хајде да доћи путем ове. Стринг је лаж. То, такође, није тип података који постоји у Ц. То је био синоним за неке време за нешто друго, и можемо откривају да као што следи. 

Пусти ме само напред и отвори програм под називом упоредите-0. И уместо да куцате ово напоље, ћемо почети да ходамо кроз коду Већ сам написао, али је То је само неколико редова. Дакле, ово је поредити-0. И прва ствар коју радим добија линију текста. 

Али погледајте шта сам ради по први пут. Оно што је другачије јасно о линији 21? Заправо, чекај мало. То је копија два. То није ни у реду програма. У реду, спојлер узбуна. У реду, тако да никада не смета. То је одговор на питање будућег. 

Овде је сравни-0, и ја сам о томе да се линију текста. Програм је много једноставније. Дакле, ово је једноставно. То је као Веек Оне, Тво Веек ствари у овом тренутку. Стринг с = ГетСтринг. Сад, ја да поновим овде. стринг т = ГетСтринг. А онда, последња ствар у томе Програм, као што јој име сугерише, је ћу покушати да их упореди. 

Дакле, ако с, први стринг, једнака = т, онда сам ће рећи да куцате исту ствар. Друго, ја ћу да кажем куцате различите ствари. Па хајде да састави и покренути овај програм. Па будите упоредите нула. Изгледа добро. Нема Цомпилатион грешке. 

Пусти ме да идем напред сада и укуцајте ./цомпаре-0. Пусти ме само напред и рећи нешто : Давен и нешто: Роб. И куцам различите ствари. До сада, тако добро. Програм изгледа да је тачна. 

Али хајде да пробамо поново. Реци нешто: Габе. Реци нешто: Габе. У реду. Можда сам ударио размак или нешто фанки. Хајде да то урадимо поново. Тако Замила. Замила. Различите ствари. Дакле, шта се дешава? 

Дакле, имамо ове две линије код, ГетСтринг се зове двапут. А онда, једноставно сам сам покушава да упореди с и т. Али оно што је заиста тада се дешава? Па, мој рукопис је о томе да заклати овај пример донекле. И хајде да ствари бацају ово овде, као добро. 

Дакле, имамо линију као Стринг с = ГетСтринг. Дакле, то је просто први Занимљиво линија из тог програма. Али шта све ово време је било дешава испод хаубе? Па, са леве стране је ниска, која је нека врста променљиве, и то се зове с. Тако да знам да је ово користи меморију, или РАМ, некако мом компјутеру. Па ћу апстрактно извући то као квадрат. 32 бита, испоставља се, али више о томе у будућности. И онда, шта се дешава овде? 

Па, очигледно ГетСтринг добија стринг од корисника. И добио ГетСтринг Замила или Гејб или Давен. Па хајде да изабере први оних, који је био Давен. Тако ефикасно, шта имам ГетСтринг ми у том првом случају је Д--В-Е-Н. И онда, шта још урадио То ми даје тајно? ПУБЛИКА: [неразумљиво] Давид Ј. Малан: Да, / 0 или нулл карактер. Тако да ми је ефективно дало низ. Али ми већ знамо из последњих Изгледа да је низ само низ ликова, и то је прекинут од Ова посебна Сентинел лик, / 0. 

Али, ако је ово истина и ово је квадрат, То је јасно много већи правоугаоник. И заиста, ово је, Ја тврдим, само 32 бита. И то је јасно више него 32 бита, јер ово је вероватно осам плус осам плус осам плус осам плус осам, само због бајтова у АСЦИИ. Како дођавола ћемо да се уклопе Давен у ову малу кутију овде? 

Па, шта је заправо ГетСтринг ради? Па, ово овде представља Мрежа Меморија Мој рачунар или РАМ-а. Дакле, хајде да кажем да ако самовољно сваки од њих представља бајт, онда можемо да мислимо једни бајт да имају адресу, као 33 Окфорд Стреет, односно 34 Окфорд Стреет, или 35 Окфорд Стреет. 

Па као куће имају адресе и зграде имају адресе, то појединачне бајтова меморији адресе или бројеве да их идентификовали. Сада, ово је произвољна. Али да то буде једноставно, ја ћу користе хексадецимални само Конвенцијом, али не значи ништа друго 0к него "то је хексадекадни." а ја ћу да тврде да "Д" завршава у Бите један у меморији. 

Немам ништа што се догађа у Меморија, па Давен добио прво место у Бите Оне. То је, дакле, ће бити 0к2. Ово ће 0к3. Ово ће бити 0к4. Ово ће 0к5. Ово ће бити 0к6. 

Али када почнете да размишљате о томе шта раде рачунара испод хаубе, можете да почнете да закључити како сте, пре неколико година, зар су имплементирали Ц себе. Шта је ГетСтринг вероватно ретурнинг-- јер њега осећа као да није повратак Давен, по себи, јер он то сигурно не иде да се уклопи у овој малој бок-- Дакле, шта је ГетСтринг вероватно враћа? 

ПУБЛИКА: [неразумљиво] 

Давид Ј. Малан: локација Давен. И то је било то ради Откако Веек Оне. Оно што је заиста ГетСтринг повратка није ниска, по себи. То је један од Литтле Вхите Лиес. То је враћање на адресу стринг у меморији, јединствена адреса. Давен живи на 33 Окфорд Стреет. Али више језгровито, Гавин живи у 0к1, адреса Број Један. 

Дакле, шта добија ставио у ово мала кутија онда, да буде јасно, је само адреса тог низа. Дакле, све ово време, овај траје. Али шта то наговештава Сада је да ако све с је је број унутар ње, ко је да вас заустави, програмер, од стављања било који број Свака променљива и само скакање на тај комад меморије? И заиста, видећемо То је претња следећи пут. 

Али за сада, то изгледа недовољно. Ако кажем, да ме стринг, дај ми Давен. Али не баш ми дати Давен. Све што ми дају је Давен адреса. Како да онда знам сигурно где почиње и Давен ендс-- Прича постаје веирд-- где Давен почиње и завршава, а затим, следећи стринг у меморији почне? 

Па, ако сте делили ми почетак Давен, у суштини, како да знам где је крај његовог имена је? Да специјални нулл карактер, што је све важнија ако стрингс испод Худ су једноставно идентификовани јединствено по својој локацији у меморији. Дакле, све ово време, то је шта се дешава. 

Дакле, када смо сада на изгледају код овде, објасни ако би грешка у линији 26. Зашто је Замила и Замила другачије? Зашто је Гејб и Гејб другачије? Да, позади. 

ПУБЛИКА: Они имају различите адресе. 

Давид Ј. Малан: Једноставно зато што они имају различите адресе. Јер када зовете ГетСтринг Опет, што ћу се брзо урадити овдје, ако је ово друга линија, стринг Т, као што сам у том програму, једнако други позив ГетСтринг. Следећи пут кад зовем ГетСтринг, идем добити другачији комад меморије. 

ГетСтринг је дозвољено да пита радом систем за све више и више меморије. Неће да користите исту шест бајтова сваки пут. То ће добити нови комад меморије, која значи т ће добити неке друге вредности овде. 

Дакле, када радим с једнако = Т, ти не у поређењу Д против тога и против ово и В против тога. Ти упоређивањем ово против тога, што искрено је прилично усефул-- уселесс-- је прилично бескорисна, јер ко стварно брига где су жице су у меморији? 

И заиста, нисмо. И ми не идемо у старт посебно брига. Само у мери у којој може доћи до грешке и безбедносне претње могу настати вољу ми заправо почети да брине о томе. Па хајде да решите овај проблем. Испада, да га поправиш супер једноставно. 

И нека је заправо, пре него што опет откривају да је, што би ви ако у ЦС50 класи, а ви морали да спроведе поређење против две жице. Ви очигледно не можете једноставно користити ова једнака = т. Али само логично, како да ли би упоредите овај низ Против овог низа коришћењем Ц код? Да. 

ПУБЛИКА: Уради за петљу [неразумљиво] Давид Ј. Малан: Савршено. ПУБЛИКА: [неразумљиво] Давид Ј. Малан: Да. Само користите за петљу или док петље или било шта друго. Али само применити основну идеју да, ако ово је комад меморије или низа и то је, поновити преко оба у исто време. И само упоредите слова. 

И мораш бити мало опрезни, јер не желе један прст да иде поред другог јер један је стринг дуже од друге. Па идете да желите да проверите Ова посебна вредност на крају, нулл. Али то је заиста, у крај, као једноставан као тај. И искрено, ми не треба поново измишљати точак. Ево Верзија Два. И шта ћу да кажем јесте да је уместо поређења с износи = т, Ја уместо тога ћу рећи, ако је стринг поређење с зарезом т = 0 једнака. Сада, шта је стринг упоредити? 

Испоставило се, то је функција која долази са Ц, чији је циљ у животу је да упоредите две жице. И мешајте упоредити, ако прочитајте ман страница или документацију или ЦС50 Референце, то ће Једноставно вам кажем да пометњу сравни враћа било негативне број или позитиван број или нула, гдје нула значи да су једнаки. 

Зато само претпоставка. Шта би то могло да значи да стир упоређивање враћа негативна вредност или позитивна вредност? ПУБЛИКА: Већи од или мање од. Давид Ј. Малан: Да, већа од или мање од. Дакле, ако сте желели да сортирате целину гомила жица у дицтионари-- Као што ћемо на крају низ роад-- савршен функција за потенцијално коришћење, зато што ће то урадити поређење жице за вас, и реци ти не дође раније Б, или не Б долазе пре абецедном реду. Можемо да урадимо управо то. 

И приметите сам једну другу ствар у овом примеру. Шта друго се променило више у овој основној функцији? Цхар *. А то је да други Вхите Лие. Све ово време, када сте пишем стринг, смо потајно преписивање стринг као цхар *, тако да заиста цланг разуме се. 

Другим речима, у ЦС50.х и као што ћемо видети на крају, смо направили синоним зове стринг то је иста ствар као цхар *. И за сада, знам само да *, У овом контексту, барем, значи адресу. 

Адреса чега? Па, чињеница да сам рекао цхар *, а не инт * или флоат *, значи да је цхар * адреса на цхар. Па ова мала кутија овде, звани стринг, је стварно типа цхар *, што је једноставно фенси начин да се каже, у овом пољу ће ићи адресу. И шта се то односи на број? Очигледно, знак. 

Али ми апсолутно могли имају инт * и друге ствари. Али за сада, цхар * је заиста највише директан и један од интереса. Тако да овај проблем се дешава да расте, мада, опет. 

Претпостављам да отворим овај програм. Да видимо да ли сада можемо предвидети шта није у реду са овим кодом. Дакле, у овом програму, цопи-0, ја сам ићи напред и поново позвати ГетСтринг и чувајте вредност у с. 

А онда, зашто ја ово радим, Подсјећања ради од неколико недеља прошлости? Ми смо то рекао ГетСтринг Понекад враћа нулл. Шта то значи, ако ГетСтринг враћа нулл? Нешто није у реду. То вероватно значи стринг превише велика, од рачунара меморије. То се дешава супер, супер, супер ретко, али се може десити. Желимо да проверите за њега, и то је све што ми радимо. 

Јер ћемо да видимо сад, ако не почети проверу стално за ствари као нулл, и мислио заправо почињу да иду на адресе у меморији који су неважећи. И ти ћеш почети изазивања све више и више сегментације грешке. Или у Мац или ПЦ, само изазива рачунар да се друже или програм за замрзавање, потенцијално. 

Тако да сада, ја тврдим на цопи-0.ц, да сам Идем да копирате те жице путем линије 28. А онда, ја идем захтеву на дну овде да идем да се промени један од њих. 

Тако приметити. Зовем наш стари пријатељ стрлен. И само објасни на енглеском Шта ова линија 34 ради? Шта т брацкет 0 представљају на левој. Да. 

ПУБЛИКА: Први карактер Т? Давид Ј. Малан: Први карактер Т. То је то. Први карактер Т, желим да доделите велико верзију првог карактера у Т. Дакле, ово је капитализацијом прво слово. А онда, последња ствар коју ја радим У овом програму је да тврдим овде оригинални, с, а овде је копија, т. 

Али на основу приче коју смо управо рекао о томе шта жице заиста јесу, оно што је линија 28 стварно ради, и шта је резултира Буг иде да се на екрану? 

Дакле, прво, прво питање, 28. Шта је стринг т = С стварно ради? Ако имамо на левој сиде овде стринг т = С; то ми даје једну кутију овде и једна кутија овде. А претпостављам да је ова адреса 0к, рецимо, 50 овај пут, произвољно. Шта стринг т = с урадите испод хаубе? 

ПУБЛИКА: [неразумљиво] 

Давид Ј. Малан: Он чува сећање адреса тамо, па 0к50 иде тамо. Дакле, ако сад, ја идем у први лик у Т и велика је, Шта ја радим ефективно да с? Стварно радим исту ствар, зар не? Јер ако Адреса 0к50-- и само ја немају много простора на броду овде, али претпостављају да је то 0к50 овде, негде у меморији мог рачунара. 

И ја сам, на пример, Габе малим словима овде, овако. И ја сам рекао Т конзола 0 добија капитализују. Па, т носач 0 је прво слово у Т. Тако мало г ће се постала велики Г. Али проблем је, шта с такође указују на? 

Публика: Исти. 

Давид Ј. Малан: исти посао. Тако једноставно објашњење можда, чак и ако синтакса мало чудно. Па хајде да урадимо ово. Направите Цопи-0 и потом ./цопи-0. Реци нешто: Габе. И нажалост, како њих су сада капитализована, али за то лежи у основи Разлог што смо једноставно ми сада се бави адресама. 

Па како да почнемо да аддресс-- Но Пун интендед-- како да почнемо да се обрати Овај посебан проблем? Па, у цопи1.ц, ствари иду да се мало компликованије. Али ја бих тврдим концептуално једноставно решење. 

Тако тешко добити на први поглед. Неће бити лако за први пут када га откуцати, можда, Али, ако је проблем што Једноставно радите т = је само копира адреса, шта, Опет ако могу изабрати на тебе, ће бити решење за стварно копирање низ? 

ПУБЛИКА: Вероватно ћемо користити поново петљу. 

Давид Ј. Малан: Да. Па ћемо поново морати петљу. И зато што ако желимо да копирате Стринг с у други стринг, вероватно желите да урадите лик по карактеру. Али проблем је, ако То је првобитно с, Сада ми треба да почнемо експлицитно доделу меморије за т. 

Другим речима, хајдемо прекраја овај последњи пут. Ако је ово Стринг с = ГетСтринг. И хајде да стави ово овде, као добро. То је ГетСтринг. А онда, слика за нешто као да ће бити као пре, г-а-б-е-/ 0. То изгледа нешто овако. И С дакле, ми називамо 0к50, као и да ће бити 51, 52. 

Дакле, ово је 0к50. И онда, ја стринг т. У меморији, то је само ће дај ми мало квадрат овако. Па шта је кључни корак сада? Ако желим да копирате С у Т, оно бланк ми треба да попуните овде? Или шта ми је потребно да се уради на високом нивоу? Да? Неко? Да. 

ПУБЛИКА: Морамо да [неразумљиво]. Давид Ј. Малан: Да, ми смо Потребно је да попуните овај празан. Ја не могу копирати, а затим капитализује име Габе а док не питам оперативни систем за још један комад меморије То је барем велика као оригинал. Тако да нас оставља са питањем. 

Како да поставим оперативни систем не само за једноставне мало поинтер-- јер то се зове, адреса, поинтер-- не за једноставно малу кутију овако зове стринг? Како да поставим радом систем за велики комад меморије? До сада сам само стечен то назад индиректно позивом ГетСтринг. Па како је ГетСтринг чак и добија своју меморију? 

Па, испоставља се да постоји Ова друга функција овде да се сада ћемо почети да користи. Сада, ово изгледа много више шифровану тхан-- и ја сам једини који може да види то-- Ова линија изгледа много више Цриптиц онда би требало да на први поглед. Али, хајде да га задиркује Апарт. 

Са леве стране, ја имам знак * т. Дакле, у енглеском, почнимо да формулишу Пропер реченице у жаргон. Дакле, ово је расподелу променљива типа цхар * звао т. Сада, шта то заиста значи? 

Па, то значи, шта ћу ставити у ове променљиве зове т? Адреса на цхар. Дакле, то је само једноставније, више разуман начин опише на левој страни. Тако да ствара ова кутија овде само. Тако да десна страна, По свој прилици, иде да издвоји да већи комад меморије како? Па хајде да задиркује ово одвојено. 

То је неодољив на први поглед, Али шта се дешава унутра? Прво, ту је маллоц, која је очигледно наш нови пријатељ, "Мемори издвојити". Дакле, ово је аргумент који прошао у њега, тако да је прилично велики аргумент. Па хајде да задиркује ово одвојено. 

стрлен од С, наравно, представља до-- ПУБЛИКА: број знакова. Давид Ј. Малан: Само број карактера у С. Тако да дужина с, оригинални стринг. Дакле, Г-а-б-е. Тако да вероватно четворо у овом случају је. Зашто ја радим +1 после називајући стрлен С? ПУБЛИКА: [неразумљиво] Давид Ј. Малан: За то Посебан нулл карактер. Ако ме питате шта је дужина Име Габе, ја ћу да кажем четири. Испод хаубе, мада, морам да пети бајт за нулл карактер. Зато ја радим +1. 

Сада само у случају да се ради ово Програм на осим рачунара, кажу, ЦС50 апарат, где величина цхар може бити другачији из мог цомпутер-- Испоставило се да могу да зовем оператор сизеоф, само питајте рачунар, шта је величина цхар на овом рачунару? 

И множењем пет у овом Пример од величине цхар, који на већини рачунара ће само је једна, маллоц ће да издвоји за мене ово велико комад меморије овде на десној страни. И то ће се ретурн-- то је фунцтион-- тако да је ће да се врати са мном шта? ПУБЛИКА: адреса? Давид Ј. Малан: адреса чега? ПУБЛИКА: меморије је додељен? Давид Ј. Малан: Од Меморија је додељен. Тако да немам појма, искрено, где је овај ће се завршити. Ја ћу да предложи да то ће завршити у 0к88. Потпуно произвољно, али негде осим 0к50, јер оперативни систем, што Виндовс и Мац ОС учини за мене, је уверите се да је то давање ми различити комади РАМ. 

Дакле, ово је вредност где је комад меморије може завршити. Дакле, ово је оно што заврши овде, 0к88. Тако да сада јасно, ја могу да разумем да ово није исто као ово, јер они показујући на различити комади меморије. Дакле, ако ја сада заиста желим да копирате ово у, хајде да урадимо свој предложено решење. 

Хајдемо, стварају за петљу, и не т држач ја добија ова конзолу и. Јер сада могу да користим Овај низ налик нотација, јер иако веома маллоц генерално ми додељује меморију, Меморија је само суседних бајтова. Бајт, бајт, бајт, бацк то бацк у леђа. 

Ја сигурно може као програмер третирати га као низ, који значи да могу да користе ово коначно познато нотација само неке угластим заградама. 

Дакле, дозволите ми ту паузу, јер је То је много одједном, чак и иако је основна идеја да се подсетимо је да стринг, све ово време, није нови тип података по себи. То је само такозвани поинтер, адреса карактера, што само значи да је број да је људском Конвенцијом смо склони да пишу као 0к нешто. 

Али то је само број, као 33 Окфорд Стреет, што се дешава да се Адреса ЦС зграде. Сва питања о овим детаљима? Да? 

ПУБЛИКА: Зашто ми проверити за т једнак нулл? 

Давид Ј. Малан: Зашто смо урадити проверите т једнак нулл? Ако читамо доцументатион-- Греат куестион-- за маллоц, то ће рећи у ситним словима, Понекад може да се врати маллоц нулл, баш као ГетСтринг. И заиста, ГетСтринг враћа нулл Ако, пак, маллоц враћа нулл, јер ГетСтринг користи маллоц. 

Као и да би се могло догодити ако је ОС, Мац ОС, Виндовс, шта год, је просто из меморије за вас. Дакле, то је оно што се тамо догодило. 

И дозволите ми да открије једну другу ствар да би само одушевити или потпуно сувише далеко преко линије. Али, дозволите ми попети исто за петљу за копирање, што малочас, рецалл био ово. Т носач сам добио с конзолу и. 

Лепо и разумљив. Осећа као Недеље двоје опет. Али је ова верзија заправо може да буде преписивати јер то, што изгледа загонетан. То је техника зове показивач аритметика, адреса аритметика. Али зашто ово функционише? 

Сада досадно, Аутори Ц истрчава * симбол за различите намене. Видели смо да је једном већ у употреби, цхар *, што значи "Дај ми променљиву то ће да садржи адреса на цхар. " Дакле, цхар * у том контексту значи "дај ми променљиву." 

Нажалост, ако користите * Без реч испред њега, као што цхар, сада се зове дереференце оператер. Па ћемо видети још раније дуго. Али то само значи "ићи тамо." То је као да кажеш, да ме неко предао на парчету папира "33 Окфорд Стреет," ако урадим "* 33 Окфорд Стреет," То значи да "Иди доле низ улицу до зграде ЦС." 

СО * само значи отићи тамо ако нема речи испред њега. Дакле, шта је Т, да буде јасно? т адреса комад Меморија која је враћена на мене. с је адреса које, да буде јасно, у примеру смо разговарали, о малим словима Габе? с је адреса од-- Публика: стринг. Давид Ј. Малан: оригиналних назива Габе екипе. Тако да је адреса овај комад меморије. Дакле, ако ја кажем Т + ја--, обавештење, је само наш стари пријатељ. То је само индекс променљива који је итератинг од нуле на горе на дужину гудачког с. Тако да ће бити нула, онда се, затим два, па три, па четири. Па хајде да окупи ове нове Сцратцх-попут комада пуззле, ако хоћете, иако, опет, синтакса је далеко више него што волшебни нуле. Па т је адреса + Ја ће ми дати број, јер су сви бројева које смо цртање као Хек. Али они су само бројеви. 

Дакле, ако адреса Т рекосмо је 0к88, 0к88 плус шта је нула. Чак и ако нисте удобно са хекс још, да претпоставите. 

Публика: Оригинал. 

Давид Ј. Малан: Још 0к88. Дакле, шта * 0к88 значи? То значи, "тамо", што значи ефикасно, "стави прст овде." А сада на десној страни Овај израз, * а затим у паренс, с + и значи с, што је адреса овде малог г. с + 0 је, наравно, с, с је год. 

Тако да је сада, то је * С, који баш као и * 33 Окфорд Стреет значи отићи на адресу с. Дакле, овде је то прст, десна рука. Дакле, шта ћу да копирате у шта? Ствар на десној страни, који је Габе, мали г овде, у овде. 

И тако ефекат који Прва итерација петље, као што сте предложили, иако изгледа Црази компликованије од свега смо раније видели, једноставно говорећи идите овде и копирај тај лик овде. Је ли га даје мапу обе локације. 

Па ћемо видети много више од тога. Али за сада, надамо се само да увести неке од ових основних идеја. И заиста, хајде да погледамо један коначни програм овде, а затим обећао Цлаиматион, што ће учинити све у реду. У реду. Дакле, дозволите ми отворим тамо идемо их--. Па хајде ме-- ћемо се вратити на овој слици пре дуго. Дозволите ми да отворим ову Последњи пример овде. 

Дакле, овде је супер, супер програм који остварује Ништа у животу који ради следеће. Прво објављује две варијабле, к и и, који нису бројеви овај пут, по себи. Они нису цели бројеви, по себи. Они су очигледно инт *. Тако да било ко, шта то значи Ако ваш тип података, ваш променљива, је типа инт * звезда? То је адреса једног Инт. 

Тако да немам појма где се ради. То само значи "пут, на крају, адресу неког инт овде. " 0к50, 0к88, где год да је у Меморија, адреса иде тамо. И то је оно што је и ће бити, као добро. 

Ако ја сада кажем к = маллоц (сизеоф (инт)), То је фенси начин да се каже, Хеј оперативни систем, путем маллоц, Дај ми довољно меморије за величину једног ИНТ, што је вероватно ће бити 32 бита или четири бајта. 

Дакле, шта маллоц врати? Маллоц враћа адресу. Дакле, шта ће да се чува у Кс? Адреса комад меморије, четири бајта, то маллоц Управо фоунд за мене тражећи оперативни систем. 

Сада у међувремену, линија Овде четири, * к = 42. Само да буде јасно, шта се дешава тамо доле? Са леве стране, * к. то је као * 33 Окфорд Стреет. СО * к значи шта? 

Публика: Идите на. 

Давид Ј. Малан: Иди на ту адресу. Где год да се комад меморија, идите на њега. И ставио шта ту, очигледно? Публика: 42. Давид Ј. Малан: 42. У реду, * и, иста идеја. Идите на адресу у И. Ставите број 13 тамо, али оно што је и у овом тренутку? ПУБЛИКА: Нема меморије за и. Давид Ј. Малан: Тамо није меморије за и. Дакле, шта год ради, вероватно садрже, као што смо говорили? 

Публика: Гарбаге. 

Давид Ј. Малан: Неки вредности смеће. Сада, вредност смеће је и даље број. Још увек може бити у заблуди за адресу. То је као да неко скициране нешто доле, и ја га погрешно тумачи као значење неке зграде низ улицу. А ако само покушате да иде у неки објекат не поседујете, или неки комад меморије нема дат, лоше ствари може да се деси. Рачунар може да се сруши, или неки други неутврђен понашање може да се деси. 

Тако увод, а затим, да Бинки је ово. Још увек се сећам, 20 неке чудне година касније, где сам био када сам коначно разумео показиваче. 

Што ће рећи, ако оставити овде у три минута а да ја не знам разумеју показиваче, схватају Ја сам се сетио за 20 година за неког лудог разлога када и зашто је коначно потонуо у, седи са мојим наставе колега, Нисхат Мехта у Назад на Елиот трпезарији. Сад сам се сетио зато што је то било једна од тема сам, у Конкретно, борила са. И онда, коначно кликнуо, као да сам се усудио рећи доста тема на крају ће. А сада, да се да се осећају све срећнији и све уверљивији, хајде да коначан изглед у нашем Последња три минута овде у Бинки, од нашег пријатеља, Ницк Парланте из Станфорд. 

[ВИДЕО РЕПРОДУКЦИЈА] 

Хеј, Бинки. Пробуди се! Време је за забаву показивача. 

Шта је то? Сазнајте више о тројке? Ох, добро! 

Па, за почетак, мислим да смо Требаће пар показиваче. 

ОК. Овај код издваја две тројке, што може да укаже на целих бројева. ОК. Па, ја видим две тројке, али они не изгледа да се указује на било шта. 

То је у реду. У почетку, показивачи не указују ни на шта. Оно они указују да се зову поинтеес, и постављање их'С одвојени корак. 

Ох, да, да. Знао сам то. У поинтеес су одвојене. Ер, па како издвојити поинтее? 

ОК. Па, овај код додељује Нови цео поинтее, и овај део комплета к да укаже на то. 

Хеј, то изгледа боље. Па да га уради нешто. 

ОК. Ја ћу се дереференце показивача Кс да меморишете број 42 у његовом поинтее. За овај трик, ми треба мој Чаробни штапић за Дереференцинг. 

Твој Магиц Ванд од Дереференцинг? То-- то је супер. 

Ово је оно што код изгледа. Само ћу поставити број и [ПОП] 

Хеј, погледајте. Ту иде. 

Па радиш дереференце на к следи стрелица за приступ свој поинтее. У овом случају, продавница 42 тамо. Хеј покушајте да га користите да сачувате број 13 преко другог показивач, год. 

ОК. Само ћу овде да и, и добити број 13 поставку. А онда, узмите штапић Дереференцинг и само [БУЗЗ] 

Ох! 

Ох, хеј! То није успело. Кажу, Бинки, не мислим дереференцинг и је добра идеја, јер знате, успостављање поинтее је посебна корак. И не мислим да смо икада урадили. 

Добро Поинт. Да. Издвојила смо показивач и, али ми никада није подешен да укаже на поинтее. 

Врло придржава. Хеј, ти изгледаш добро тамо, Бинки. Можеш ли да поправиш, тако да и бодова на исти поинтее као и Кс? 

Наравно. Ја ћу користити свој чаробни штапић о птичарима доделу. 

Је ли то ће бити проблем као пре? Не. То не дирати поинтеес. То је само један мења показивач указују на исту ствар као други. 

Ох, видим. Сада и указује на истом месту као и к. Чекај. Сада, И је фиксна. Има поинтее. Тако да можете пробати штапић Поново Дереференцинг послати 13 Овер. 

Ух, ОК. Ево га иде. [ПОП] 

Хеј, погледај то. Сада дереференцинг радова на и. И зато што су показивачи деле да један поинтее, обојица виде 13. Да. Дељење, год. Тако да ћемо сада заменити места? 

Ох, види. Ми смо више времена. 

-Бут-- 

Само запамтите три правила показивач. Број један, основна структура је да имате показивач, и указује више на поинтее. Али и показивач поинтее су одвојени, а честа грешка је да подесите показивач, већ да заборавите да му дати поинтее. 

Број два, Поинтер дереференцинг почиње у показивача и прати његову стрелицу око да приступите свој поинтее. Као што сви знамо, ово ради само ако постоји поинтее, која врста врати се Правило број један. 

Број три, Поинтер задатак траје један показивач и мења га да укаже на Исто поинтее као други показивачем. Дакле, после задатка, два показивачи ће указати на исту поинтее. Понекад, то се зове дељење. И то је све што је потребно, заиста. Цао-цао сада. [ЕНД ВИДЕО РЕПРОДУКЦИЈА] Давид Ј. Малан: То је то за ЦС50. Видимо се следеће недеље.