[MUSIC ifa]
>> DAVID J. MALAN: Bütün hüququ.
Bu CS50 edir.
Və bu həftə 5 başlanğıc.
Və qeyd ola bilər kimi, maddi bəzi
bir az daha artır kompleks, kiçik sıx.
>> Və xüsusilə də əgər, çox asandır Siz, bir müddət vərdiş oldum
ən aşağı cızmaq üçün çalışırıq biz bir şey, biz sinif deyərək edirik.
Amma bəlkə deyil, həyata ideal pedaqoji yanaşma
material bu cür öyrənmək üçün, və material ümumiyyətlə.
Və belə ki, biz edirik ki, CS50 öz Gheng elan
Gong hazırlamaq başlayıb Notların canonical dəsti
kurs üçün, ümid bu ki, biri
yalnız kimi xidmət arayış və resurs
material nəzərdən və gedən üçün geri material vasitəsilə ola bilər ki,
, ətrafında ilk dəfə qaçdı lakin də ki, sizin rəhbərləri ola bilər daha çox
aşağı, zaman daha qədər mühazirə üçün vaxt gəlir,
Siz məşğul ola bilər ki, daha fikirli, kimi
daha scribbly qarşı.
>> Dedi ki, siz tapa bilərsiniz nə veb bu kimi sənədlər.
Və bildiriş, sol üst, var yalnız məzmunu bir masa,
həm də vaxt kodları ki, dərhal jump edəcək
müvafiq hissəsi video online.
Və burada nə Chang görmüşdür , mahiyyətcə, sənədləşdirilmiş
nə bu baş xüsusi mühazirə.
Və mühazirələr çox artıq online indi bu URL.
Və biz qalan göndərmək üçün davam edəcəyik bu həftə sonuna qədər o,
ki, resurs istifadə etmək yoxdur.
>> Belə ki, daha ADO olmadan, biz geri soymaq başladı
olmuşdur ki, lay bir müddət string.
Və biz bir string nə demək idi əslində keçən həftə?
Belə ki, char star.
Və char ulduz, yaxşı, nə ki, həqiqətən demək idi?
Yaxşı, bütün bu vaxt, biz əgər bir funksiyası zəng edilmişdir,
GetString və saxlanılması kimi sözdə geri
bir GetString dəyəri dəyişən deyirlər
biz yazılı olduğunuz string s type up Yuxarıda kod line.
Mən görəndə və yalnız mənim yazı burada böyüdüləcək
Mən bu necə dəhşətli həyata yoxdur.
>> Lakin, ki, fərz edək, sağ tərəfində
, yenə, bir ağlabatan deyil nə təsviri
Bütün bu davam GetString vaxt.
getString, əlbəttə, bir simli olur.
Amma həqiqətən nə deməkdir?
Bu bir yığın olur deməkdir əməliyyat sistemi yaddaş
bir funksiyası zəng, malloc çağırıb.
Lakin daha sonra.
Və sonra populates yaddaş ki, yığın
hərfləri ilə istifadəçi var , çap izlədi, əlbəttə,
bir null xarakteri, və ya backslash çox sonunda sıfır.
>> Eyni zamanda, sol tərəfində Bu hekayə, bütün bu vaxt,
biz s kimi bir dəyişən elan etdik.
Və dəyişən indi nə edir Bir göstərici zəng başlayacaq.
Bu, daxilində bir qutusu deyil biz string qoymaq Daven, özlüyündə,
lakin biz ki, kvadrat qoymaq sol nə dəqiq qutusu?
Bəli?
>> Auditoriya: ünvanı harada yaddaş yerləşir oldu.
>> DAVID J. MALAN: Exactly.
Daven harada ünvanı yaddaş yerləşir.
Və Daven bütün yerləşir harada özlüyündə, lakin xüsusi olaraq ünvanı
Nə?
Bəli?
>> Auditoriya: First character.
>> DAVID J. MALAN: İlk xarakter Bu halda Daven, olan,
Mən əsassız idi təklif və unrealistically 1, OX1,
olan yalnız deməkdir 1 hexadecimal sayı.
Amma yəqin ki, olacaq daha böyük sayı üçün
biz cəlb edə bilər ki, bir prefiks kimi bir 0x ilə,
bir hexadecimal xarakter təmsil.
Və biz bilmək lazım deyil, çünki Daven simvol qalan
çünki, nə sadə dizayn qərarı bir çox il əvvəl idi?
Bəli?
>> Auditoriya: Backslash 0.
DAVID J. MALAN: Bəli, dəqiq.
The backslash 0 olsa da, sizə imkan verir xətti vaxt, simli axır,
soldan sağa gəzmək, bir loop üçün, və ya bir müddət ilə
loop, və ya bir şey kimi ki, burada, oh, müəyyən
bu simli sonu.
Yalnız bu ünvanı, simli başlanğıcı,
biz tam əldə edə bilərsiniz Bu, bütün bu müddət, çünki,
bir string bir char ulduz olmuşdur.
>> Belə ki, istifadə davam etmək əlbəttə ki, gözəl var Bu CS50 kitabxana və bu abstraksiya,
belə ki, danışmaq, lakin biz will üçün dəqiq görmək başlayacaq
neler oldu Bütün bu vaxt altından.
Belə ki, bu nümunə geri bilər, də son dəfə, 0 müqayisə,
faktiki müqayisə etmədi.
Amma biz bu həll etməyə başladı.
>> Amma bəlkə də ixtisasartırma, Mən kimsə maraq ola bilər
çəhrayı fil gün, da Chang etdi?
Necə qarşısında haqqında? [Işitilemez].
Qədər Hadi.
>> Və bu arada, Siz gəlmək kimi, edək
yalnız bir an üçün hesab nə Bu kodu həqiqətən edirdi.
Bu iki dəyişənlərin qədər elan edir top, s və t və getString zəng.
Bu, bir çox istifadəçi dostu proqram deyil Bu demək deyil, çünki nə.
Lakin biz istəyirik güman edək sulu hissəsi üzərində dayanılır.
S bərabərdir əgər və sonra biz bunu ki, printf demək lazımdır t bərabərdir,
Siz eyni şey tipli.
Hello.
Sizin adınız nədir?
>> Janelle: Janelle.
DAVID J. MALAN: Janelle, görüşmək üçün gözəl.
Sizin problem belə Bu fil əl
ilk bizə nə bir şəkil çəkmək üçün o ilk iki təmsil olunur
xətləri.
Belə ki, s və t ola bilər necə ekranda təmsil?
Və yalnız bu cəlb edə bilər Bu böyük ekranda barmaq.
>> Belə ki, iki yarıya indirir var tənlik hər tərəfi.
Belə ki, orada sol s, və sonra sağ getString.
Və sonra t, sol var və sonra sağ getString.
Belə ki, necə başlaya bilər bir şəkil rəsm ki,
neler təmsil Burada yaddaş, siz deyəcəksiniz?
Və mənə izah edək Siz getmək kimi nə edirik.
>> Janelle: OK.
Bəli, ilk, xahiş olunacaq Siz giriş string almaq.
Və təəssüf, oh store-- olardı.
DAVID J. MALAN: OK.
Yaxşı.
Və bu nə adlanır?
OK, Oh.
Davam edin.
Mən dayandırmaq demək deyil.
Janelle: Sorry.
Belə ki, daxil onu daxil edəcəklərini Ünvan əmin kontormerinin Təfərrüatlar.
Mən dəqiq sayı xatırlayıram bilməz, lakin mən 0 başlayaraq inanıram.
>> DAVID J. MALAN: Yəni bütün doğru Mən nömrələri çünki,
belə ki, heç düzgün cavab var.
>> Janelle: 0 qövs ilə başlayaraq.
>> DAVID J. MALAN: OK, belə ki, element 0.
Sure.
>> Janelle: Və sonra, əgər yalnız iki məktub kimi
>> DAVID J. MALAN: OK, geri.
>> Janelle: Belə element 0 və sonra element 1 və ya element 2.
Parça Və: DAVID J. MALAN şəkil indi rəsm?
GetString zəng?
Ya s bəyannamə?
>> Janelle: Bəyannamə s, inanıram.
Oh, getString, bu ki, çünki hər [daxil inputted? sahəsi. ?]
>> DAVID J. MALAN: Yaxşı.
Dəqiq.
Hətta bu səmərəli olsa bir sıra, geri qaytarır,
biz bir string geri almaq zaman, biz 01 və 2 istifadə edərək simli index.
Texniki, bu yəqin ki, Fərdi ünvanları təmsil,
lakin gözəl var.
>> Belə ki, güman, mən yalnız sürətli bilərsiniz biz off sol harada irəli
Sonuncu dəfə biri əgər strings, bir b e g idi
backslash 0, bununla təmsil gabe Agentliyi Giriş, necə biz indi ola bilər?
Bu ki, yaddaş əgər GetString geri edilmişdir?
>> Janelle: bu olacaq Bir qövs təmsil?
>> DAVID J. MALAN: bir qövs By?
Heç bir, yaxşı.
, Yalnız pictorially, deyirlər Mənə yalnız irəli getmək
Bu s, əgər, ki, bu təklif GetString qaytarılması dəyəri.
Və 0, 1, 2, bu tərtib etdiyiniz , mükəmməl ağlabatan deyil Çünki
kimi simli index bilərsiniz.
Amma yalnız uyğun olmaq Sonuncu dəfə mənə irəli gedək
və özbaşına bu təklif ünvan, 1 bu ünvanı 2,
Bu s ünvanı 3 və.
Belə ki, yalnız super olmaq aydın, nə olacaq
ki, nəticəsində s getmək üçün kodu ilk line, siz deyəcəksiniz?
>> Janelle: Ünvan 1?
>> DAVID J. MALAN: Exactly.
Belə ki, 0x1 müraciət.
Və eyni zamanda, mənə irəli gedək və Siz etdiyiniz nə qədər dublikat
və burada öz t əlavə edin.
Mən gəbə yazın olsaydı yenə ikinci dəfə,
GetString ilə istenir zaman, harada, Əlbəttə, gabe getmək üçün gedir?
Yaxşı, presumably--
>> Janelle: burada Like?
DAVID J. MALAN: Bəli.
Janelle: Yoxsa eyni qutuları da var?
DAVID J. MALAN: Mənə Bəli, təklif edək dəqiq, bu əlavə qutuları belə.
Amma indi nə əsas var belə ki, Mən bu olduqca yaxın tərtib etdik baxmayaraq
together-- 0x1, bu əslində 0x2-- olunur,
bu artıq, ünvanı 0x10 ola bilər Məsələn, və 0x11, və 0x12,
və s.
Və belə ki, bu halda, nə t burada sona olacaq?
>> Janelle: 0x10?
DAVID J. MALAN: Exactly.
Belə ki, 0x10.
Və indi, son sual.
Siz uzaq, iş var günə qədər bir fil üçün ən ağır.
İndi, mən kodu qoparmaq əgər yenə nə zaman, xətti üç,
s bərabərdir t bərabərdir əgər, Mən, həqiqətən, nə am biz burada tərtib etdik müqayisə ki?
>> Janelle: İki URL?
DAVID J. MALAN: Exactly.
Mən t bərabər bərabər oldu dedi alıram?
Başqa sözlə, 10 bərabər bərabər 1?
Və əlbəttə, Aşkar cavab indi heç edir.
Və bu proqram nəticədə Siz demək nə, çap olacaq?
>> Janelle: bu, ola bilər Siz eyni şey tipli?
>> DAVID J. MALAN: Belə ki s 1 və t 10?
>> Janelle: Siz müxtəlif şeyləri yazılmış.
>> DAVID J. MALAN: Exactly.
Siz müxtəlif şeyləri yazılmış.
Bütün hüquqlar.
Belə ki, bir alqış, Burada, biz bilər.
[Alqış]
Ki, ağrılı idi.
Mən bilirəm.
Gözəl işlər.
Belə ki, indi görək, əgər biz bilməz fix nə ayrı tease.
Və əlbəttə, biz bunu müəyyən zaman mən indi green-- təmsil edəcəyik
Biz burada aksesuarların bir neçə etdi.
Birincisi, bir ağlı başında olma kimi Mən ilk yoxlanılması alıram, yoxlamaq
s null bərabərdir və t null bərabərdir əgər.
Və yalnız aydın olmaq, zaman güc ya t oxşar kodu null olacaq?
Zaman və ya t null ola bilər.
Bəli?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Exactly.
Simli istifadəçi ki, əgər Yığdığınız yol çox uzun
yaddaş uyğun, və ya bəzi kimi qəribə künc halda,
biz görəcəksiniz kimi, sanki, getString Bu gün, onun sənədlərin,
kimi null qayıdacaq deyir xüsusi sentinel dəyəri,
və ya yalnız sort xüsusi simvolu ki, bir şey yanlış getdi deməkdir.
Belə ki, biz check istədiyiniz bu çıxır, çünki
ki, null çox təhlükəli dəyəri nə.
>> Tez-tez, bir şey etmək üçün cəhd edin null keçən bir funksiyası cəlb
giriş kimi ki, funksiyası instance-- üçün çox bu, qəza və bilər,
bütün proqram yazmaq.
Belə ki, bu üçüncü xətt indi yalnız bir ağlı başında olma deyil Siz əgər, səhv yoxlanılması yoxlayın.
Ki, indi yaxşı vərdiş var Bizə hər zaman almaq üçün biz
bir dəyəri istifadə etməyə cəhd ki, , potensial, null ola bilər.
>> İndi burada dördüncü xətti, "Əgər strcmp (s, t)," yaxşı,
nə istinadən var?
Bəli, biz bu çox müfəssəl a bildirib string müqayisə üçün adlı funksiyası.
Və həyat onun məqsədi müqayisə etmək ikinci buna qarşı ilk dəlil,
lakin onların ünvanları baxımından, biz bir an təsadüfən etdi
əvvəl qırmızı kodu ilə, lakin deyil, həmin iki müqayisə
Bu humanly intuitiv strings Buna qarşı, bu müqayisə ilə yol,
bu, qarşı və qarşı sonra dayandırılması zaman əgər bir və
və ya barmaqları hər bir backslash 0 edib.
Belə ki, kimsə il əvvəl həyata keçirilən strcmp Funksionalığına bizim üçün həyata
biz kazanılmış olardı ümid etdiyini yalnız iki sadə dəyərləri müqayisə.
>> İndi səmimi, mən rəsm saxlamaq Bu müxtəlif ədəd bütün.
Amma reallıq oldum ki, bütün vaxt bu qədər edilməsi.
Və mənə yalnız irəli getmək və bu həyata cızmaq
bir point etmək ki, sonunda gün və irəli hərəkət,
biz, həqiqətən qayğı fikrində deyilik nə şeylər əslində müraciət
yaddaş.
Mən bu çəkmək fikrində deyiləm qədər artıq nömrələri növ,
Mən uzaq bir bu yalnız mücərrəd deyiləm yalnız oxları ilə çox dostluq az.
>> Başqa sözlə, bir pointer əgər, yaxşı, yalnız, sanki çəkmək imkan
bir göstərici kimi, bir arrow işarə , başqa bir şey özü
və çox daha çox narahat Bu ünvanları minutia
ki, yenə, mən hər halda təşkil edib.
Amma biz o ünvanları görmək lazımdır, bəzən kodu hata zaman.
>> İndi isə, bu proqram burada düzeltmelerini, əlbəttə,
müqayisə ki, problem bu iki strings.
Amma biz başqa problem qaçdı.
Bu surəti idi son dəfə proqram
vasitəsi, Mən kapitallaşdırmaq çalışır simli yalnız ilk character.
Amma simptom nə idi biz zaman sonuncu dəfə gördüm
bir istifadəçi kimi, bir dəyər tipli kiçik gabe, s,
sonra biz t daxil s verildi orada üçüncü xətti kimi,
və sonra mən çalışdı t bracket 0 kapitallaşdırmaq?
Təsiri nə idi t bracket 0 burada dəyişir?
>> Auditoriya: Bu s dəyişdi.
>> DAVID J. MALAN: Bəli, Mən də, s dəyişdi.
Həqiqətən gedir nə çünki?
Bəli, mən təmiz olar, əgər mənə görək Bu şəkil up, aşağıdakı kimi.
>> S varsa, yenə söz g, a, b, e, backslash, 0, s
biz bir qutu kimi rəsm davam edəcəyik Burada, lakin daha çox ünvanları.
Nin şeyi edilməsi dayandırmaq bildirin.
Yalnız bir şəkil çəkmək edək dünya sadələşdirmək.
>> Mən string t ilə t bəyan edərkən, ki, yaddaş ki, yığın yaradır.
Square 32 olur ən kompüter bit.
Əslində, əgər heç bir eşitdim kompüter, 32-bit memarlıq olan
həqiqətən fantezi-danışmaq, yalnız 32-bit ünvanlarını istifadə edir deməkdir.
Və bir kənara texniki, Əgər merak etdiyiniz əgər
niyə köhnə kompüter, həqiqətən əgər RAM çox şorbası onları çalışdı,
yalnız maksimum ola bilər RAM dörd gigabayt,
yaxşı sözün, çünki, Köhnə kompüter ola bilər yalnız
4 kimi yüksək saymaq milyard, 4 milyard bayt,
Çünki 32-bit istifadə URL üçün nömrələri.
>> Amma hər halda, bu Məsələn, hekayə çox sadə.
t yalnız başqa göstərici, və ya həqiqətən char ulduz, aka string.
Və necə bu şəkil yeniləmək istəyirəm İndi kod ikinci xətti ilə,
sağda, nöqtə, nöqtə?
Mən nə zaman string t, s nöqtəli vergül bərabərdir bu şəkil necə dəyişə bilər?
Bəli?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Bəli.
Dəqiq.
Mən yalnız bir arrow qoymaq eyni ünvana t qutusu,
eyni ilk məktubu verdi.
Və ya texniki, əgər bu guy, 0x1 hələ ki
I baxmayaraq kimi bu Burada 0x1 və burada 0x1.
Ancaq yenə də, kimin umurunda URL haqqında?
İndi məsələ ki, yalnız bir fikirdir.
Belə ki, burada nə edir.
Əlbəttə, əgər t bracket Belə ki, Array notation olan 0,
of kursu və səmimi, görünür burada bir sıra var kimi,
lakin indi bu qəribə şey var.
Proqramlaşdırma dilini bilmək, C, bu xüsusiyyət təklif edir
vasitəsi, t bir olsa pointer, və ya bir göstərici,
Siz hələ ki, tanış istifadə edə bilərsiniz rahat kvadrat mötərizə
notation ilk element getmək üçün, İkinci element, və ya hər hansı element və ya
ki, pointer işarə edir ki, ehtimalla, çünki
, bu halda kimi, bəzi array işarə.
>> Belə ki, necə biz bu düzeltmek edirsiniz?
Bir aldığı səmimi, bu ilk baxışda az böyük.
Amma burada bir yeni və təkmilləşdirilmiş versiyası.
>> Belə ki, ilk alıram Bu CS50 kitabxana xilas,
yalnız həqiqətən ki, var edir ifşa bir char ulduz, yalnız bir sinonimi.
Və t da char ulduz edir.
Amma haqqında nə gedir ki, xətti sağ tərəfdən
t bir dəyər təyin olunur?
>> Malloc nədir?
Nə strlen?
Sizeof (char) nədir?
Nə heck bu yoxdur line baxmaq belə kompleks?
Nə yüksək səviyyədə edir?
Nə t saxlanılması?
Bəli?
Auditoriya: Bu ayrılması oldu bir yaddaş alanı müəyyən məbləği.
Bu, saxlamaq üçün var hərhalda, məktublar [Işitilemez].
>> DAVID J. MALAN: Perfect.
Perfect.
Bu müəyyən ayrılması oldu yaddaş alanı məbləği
, ehtimalla, gələcək məktublar saxlamaq üçün.
Və xüsusilə, malloc Buna görə də nə qayıdır?
>> Auditoriya: [işitilemez] olmusunuz?
DAVID J. MALAN: Exactly.
Ki, yaddaş ünvan qaytarılması, olan deyərək bir xülya yoludur,
Bu ünvan qaytarır ki, yaddaş ilk byte.
Mənə yadda üzrə onus edir nə qədər yaddaş Mən, həqiqətən,
ayrılmış və ya malloc istədi.
>> İndi nə qədər?
Bəli, var, baxmayaraq ki, Burada mötərizədə bir çox,
malloc yalnız bir mübahisə edir.
Mən s strlen ifadə vermək belə alıram Mənə çox bytes s var kimi,
lakin bir əlavə.
Niyə?
Bəli?
>> Auditoriya: backslash 0.
DAVID J. MALAN: Exactly.
Biz bir az Ev təsərrüfatı nə var.
Bir backslash var, çünki Belə ki, 0, biz daha yaxşı xatırlayıram ediyorum.
Əks halda, biz gedirik bir string yaratmaq üçün
xüsusi terminator yoxdur.
>> Eyni zamanda, yalnız super olmaq anal, I, sizeof (char) var
yalnız halda kimsə mənim çalışır deyil CS50 cihaz kodu,
lakin bəlkə müxtəlif kompüter cəmi yerləşir chars
Konvensiya ilə bir byte var, lakin iki bytes, və ya daha böyük bir şey.
Bu, sadəcə super olmaq üçün var, səhvlər super qarşı.
Baxmayaraq ki, əslində, bu çox güman ki, 1 olacaq.
>> İndi isə, mən irəli getmək və surəti simli, t bracket i t bracket s bərabərdir.
Mən keçən həftə üçün təxirə salmaq olacaq mənbə kodu neler görmek üçün.
Əsas paket və ancaq səbəbi, yaşıl, indi kodu qoymaq
ki, son line çünki t bracket 0, toupper bərabərdir
təsiri var hərflə olan string?
t və / və ya s?
Kodu ki, son line.
>> Nə çünki Just t, , bu dəfə baş
Mən bir az ki, son addım geri əgər, Mən malloc zəng zaman, nə edir, baş
Mən mahiyyətcə yaddaş yığın almaq ki, orijinal kimi eyni ölçüsü,
ki, hesab çünki etdim.
Mən ünvan t saxlanılması alıram yaddaş ki, yığın.
Hətta bu gözəl görünür baxmayaraq və olduqca gözəl və boş,
reallıq nə biz will var edir Burada, zəng zibil dəyərlər saxlamaq.
Yaddaş ki, yığın biləcək çox də əvvəl istifadə edilmişdir,
bir neçə saniyə, bir neçə dəqiqə əvvəl.
Belə ki, tamamilə nömrələri ola bilər yalnız qəza var və ya məktublar,.
Amma onlar qədər etibarlı deyilik özümü yaddaş bu yığın yaşayır
faktiki chars ilə kimi orada loop üçün yoxdur.
Bütün hüquqlar?
>> Belə ki, indi orgasm Bu üç nümunələri
ki, zahirən, son dəfə sınıq idi Bu Swap Məsələn, bu funksiya
mənada işləyib Bu bir və b dəyişdirildikdə ki.
Amma nə digər mənada iş deyil?
Bəli?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Exactly.
Mən bu funksiya zəng idi əgər Məsələn another-- dən,
, burada əsas kimi bir funksiya I I, dəyişən, x və y
Keçən həftə olduğu, eyni kodu, və mən x və y keçmək
Swap, sonra Swap-- zəng etmək üçün, əlbəttə, düzgün versiyası
biz istəyirik nə edir see-- bunu etməyib.
Belə ki, fix nədir?
>> Yaxşı, belə ki, yalnız olmaq aydın, mənə irəli gedək
and-- ikinci burada mənə vermək, və görmək Mən sizə son bir göstərə bilər əgər
Mən tapa bilərsiniz əgər in görək in-- olacaq Bu real fast-- OK, [Işitilemez].
OK, orada deyil.
Mən yalnız yazaraq alıram əmrləri bilməz.
Mən bunu almaq istəyirəm son dəqiqə nümunə
Son dəfə, hansı indi heç bir Swap adlanır.
>> Belə ki, heç Swap olduğu Biz son dəfə off sol
vasitəsi, I başlatılmış 1 x və 2 y.
Mən sonra 1 və 2 keçən Swap zəng.
Və sonra bu funksiya müəyyən mənada işləyib,
lakin heç daimi idi x və y təsir.
Belə ki, əl-da məsələ necə indi, nə Biz həqiqətən bu problemi həll edirsiniz?
Əl həlli nədir?
>> Bəli, bu gün yeni olan swap.c da, fərqlər bir neçə bildiriş.
x və y eynidir.
Amma nə aydın deyil line 25 haqqında müxtəlif var?
Yadınızdadırsa, nə var yeni ikinci bir əvvəl kimi baxdı nə?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Bəli.
Belə ki, Ampersands yeni parça var sintaksis yalnız bu proqram,
həm də ümumiyyətlə CS50.
Tarix, mən düşünmürəm Biz hər hansı bir örnekler gördüm
və ya, həqiqətən, hər hansı onlara danışdı bəlkə, preemptively başqa detal,
bölməsində, bu kimi bir işareti.
Bəli, bu işareti bir çıxır yeni sintaksis son ədəd
biz öyrənmək olacaq.
O deməkdir ki, bu Bəzi dəyişən ünvanı.
Nə ünvan At x yaşayır?
Amma y nə ünvanı yaşayır?
Çünki əgər əvvəl fundamental problem
ki, x və y keçib edildi biz həqiqətən etmək istəyirəm nə nüsxə kimi
bir xəzinə kimi ilə Swap təmin edir harada x və həqiqətən y gətirib çıxarır ki, xəritə
ki, RAM var Swap xəritəsi təqib edə bilərsiniz
x və ya y spot qeyd yerdə və getmək və faktiki dəyərləri dəyişdirmək 1 və 2
var.
>> Belə ki, Swap çox az dəyişdirmək lazımdır.
Və ilk baxışdan, bu qüdrət char ulduz bir az oxşar görünür.
Və həqiqətən deyil.
Belə ki, məlumatların hansı növ bir göstərici, Bu qeyd hissəsi əsaslanır?
Belə ki, bir int var.
>> Belə bir artıq int edir, bir int ünvanı var.
Və eyni, b indi gedir bir int ünvanı olacaq.
Mən indi Əsas olan Swap zəng zaman, Mən dəyişdirmək 1 və 2 vermək fikrində deyiləm.
Mən kimi vermək gedirəm Ox-bir və öküz bir şey,
səbəb olacaq ki, iki ünvanları Onların faktiki yerlərdə Swap
mənim kompüter yaddaş.
>> Belə ki, indi mənim qalan həyata keçirilməsi bir TAD dəyişdirmək lazımdır.
Nə indi açıq-aydın müxtəlif kod bu üç xətləri?
Bütün bu lənətləmək stars var yer üzərində, bütün sağ?
Bəs burada olub?
Bəli?
>> Auditoriya: Bu [Işitilemez] açıq-aydın var.
>> DAVID J. MALAN: Exactly.
Bu kontekstdə belə və bu idi Ən yaxşı dizayn qərar, etiraf,
il əvvəl.
Bu çərçivədə, olduğu Siz yalnız bir ulduz var,
və bir veri növü yoxdur, int kimi, dərhal sol,
əvəzinə aydın, bərabər işarəsi var, Bu çərçivədə, siz deyəndə bir ulduz,
ki, getmək deməkdir bir var ki, ünvanı.
Belə ki, danışmaq, xəzinə xəritə edin.
>> Və eyni zamanda, xətt 37, eyni şey deməkdir.
Ünvan a getmək və orada nə qoymaq?
Nə olursa olsun edir b ifadə edən yer.
Başqa sözlə, b gedin.
Ki, dəyəri alın.
Bərabər başına bir gedin və imza, atama operator,
var ki, dəyəri qoydu.
>> Eynilə, int temp yalnız bir int edir.
Heç temp haqqında dəyişdirmək lazımdır.
Bu Annenberg yalnız bir ehtiyat şüşə var Bəzi süd və ya portağal şirəsi üçün.
Amma, demək b getmək lazımdır.
Ki, hedef gedin və orada temp dəyəri qoydu.
Beləliklə nə?
Mən, həqiqətən, bu dəfə Swap zəng zaman Bu ilk tray burada Main təmsil
bu ikinci tray Swap təmsil zaman Mən işareti x və işareti y keçmək
Main Swap, yalnız, aydın olmaq bu yığını çərçivəsində qəbul nədir?
Bəli?
>> Auditoriya: [işitilemez].
DAVID J. MALAN: Exactly.
X ünvanı və y ünvanı.
Və bu hesab edə bilər poçt ünvanları kimi.
33 Oxford Street və 35 Oxford Street, və siz
iki bina hərəkət etmək istəyirəm həmin yerlərdə var.
>> Bu gülünc ideya sort var, lakin biz ünvan demək bütün var.
Dünyanın harasında bilərsiniz Bu iki ints tapmaq?
Dünyanın harasında siz Bu iki bina tapmaq?
Belə ki, nəhayət, əgər bütün bu vaxt I sonra bugünkü mənbə kodu daxil və tərtib
Swap və run ./swap, nəhayət, üçün İlk dəfə biz, həqiqətən, görürsünüz
mənim dəyərlər həqiqətən var uğurla değiştirilecek.
İndi, biz hətta bilər bu, demək, gdb qeyd.
>> Belə ki, mənə eyni fayl daxil edək.
Mənə irəli getmək və ./swap və gdb run edək.
İndi, Swap, mən getmək üçün gedirəm irəli və Əsas bir fasilə nöqtəsini qurmaq.
Və indi mən getmək üçün gedirəm irəli və proqramı.
Və indi mənim kodu görəcəksiniz xətt durduruldu.
>> Mən irəli və çap getmək əgər x, mən burada nə görürsünüz?
Bu bir sual var.
Daha demək?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Belə ki, təsadüfi nömrələri, bəlkə.
Bəlkə mən xoşbəxt almaq və bu 0 kimi, gözəl və sadə.
Amma bəlkə bir təsadüfi sayı var.
Bu halda, mən xoşbəxt var.
Bu, yalnız 0 olur.
Amma bu, həqiqətən uğurlar deyil qədər, çünki mən
növbəti yazın və sonra çap x ki var kod line, line 19, edam olunub.
>> Eyni zamanda, mən yazın əgər daha sonrakı və indi 2 gedirəm, y çap.
Mən növbəti yazın əgər İndi, bu olacaq bir az confusing almaq, indi,
printf görünür gedir ekran bunu kimi. x 1.
>> Yenə bunu edək.
İndi, burada harada şeylər maraqlı almaq.
Mən Swap və ya hətta bir addım zəng əvvəl onu, bir az peek almaq edək.
x, yenə 1.
Y, əlbəttə, tez ağlı başında olma edir belə ağır olduğunu, 2 yoxlayın.
Amma işareti x nədir?
Cavab, bu cür funky axtarır.
Amma parantez int ulduz yalnız Bu sözləri ÜDM yolu bir ünvan.
Bu, bir bir göstərici bir int var deyil int, və ya başqa bir ünvan kimi tanınır.
>> Bu crazy şey nədir?
Biz bir şey görməmişəm olduqca əvvəl ki, kimi.
Belə ki, bu mənim kompüter-in ünvanı x yaşamaq olur harada yaddaş.
Bu Ox-bir şey var.
Və bu səmimi, nə, Mən okları rəsm açılmış etdik,
əvəzinə nömrələri, həqiqətən qayğı çünki
Sizin int xüsusi edir ki, big ki, ki, ünvanı.
Amma bffff0c4, bu bütün var həqiqətən hexadecimal rəqəm,
f vasitəsilə 0 olan.
>> Beləliklə, biz çox qalacaqlar fikrində deyilik O şeyi nə uzun.
Amma y çap əgər, Əlbəttə, mən 2 görürük.
Amma işareti y, mən bu ünvanı görürük.
Və bildiriş, maraqlı üçün, ayrı x və y nə qədər var?
Siz ünvan ən iqnor edə bilər.
Dörd bytes.
Və uyğun deyil bizim əvvəllər int necə böyük olduğunu iddia?
Dörd bytes.
Belə ki, hər şey astarlı up kimi görünür qəşəng, yaddaş, ümid edə bilər kimi.
>> Belə ki, indi yalnız sürətli irəli edək Bu hekayə sonuna.
Nin irəli getmək və addım yazın imkan Swap funksiyası daxil dalış.
İndi mən bir yazın əgər, bu, qeyd x ünvanı üçün eyni.
I b yazın əgər, bu eyni deyil y ünvan üçün.
Mən əgər nə görürsünüz bir ünvana getmək demək?
Belə ki, bir ulduz çap.
Belə ki, ulduz bu çərçivədə, orada getmək deməkdir.
Ampersand ünvanı nə deməkdir.
Belə bir vasitə 1 ulduz.
Və çap star b mənə 2 verir.
>> Və mənə bu an üçün, fərz edək, ən azı kodu ki,
ola bilər indi icra gəlir yol vasitəsilə əsaslandırılması.
Amma biz uzun əvvəl bu fikir yenidən lazımdır.
Swap Belə ki, bu versiya indi düzgün və imkan verir
us bu veri növü dəyişdirmək üçün.
>> Belə ki, hər hansı bir sualınız sonra Swap?
Ulduz?
Ünvanı haqqında?
Və ilə, siz görəcəksiniz problem, sort, 4 qurmaq
lakin problem 5, mütləq, necə bu müəyyən şeylər faydalı və daha çox almaq
nəticəsində, onlarla rahat.
Bütün şey?
Bütün hüquqlar.
Belə ki, malloc, bu funksiya yenidən, yalnız yaddaş, yaddaş ayırır
ayrılması.
Və niyə bu faydalıdır?
Yaxşı, bütün bu vaxt, Siz malloc istifadə etdik.
İndi necə hesab əgər işləri getString, ehtimalla, bu
bir yığın üçün kimsə xahiş yaddaş, zaman istifadəçi bir string
, əlbəttə ki, biz, çünki bilmirəm, CS50 heyəti,
necə böyük o strings ki, insanlar ola bilər yazın gedir.
>> Belə ki, ilk dəfə, başlamaq edək peel geri necə CS50 kitabxana işləri,
nümunələri bir neçə yolu ilə ki, bizə rəhbərlik edəcək.
Mən gedit açmaq Belə ki, və scanf 0 açmaq
biz aşağıdakı kodu görmək olacaq.
Üçün web mövcuddur Scanf 0, bu gün kodu nisbətən neçə xətləri var
Burada 20 vasitəsilə 14.
Və bunu nə görmək bildirin.
Bu int adlı x bəyan edir.
Bu kimi bir şey, sayı edin deyir.
Və indi scanf% i, x, deyir.
Belə ki, yeni məhsullarının bir dəstə var.
>> Amma scanf, siz cür hesab edə bilər olan printf qarşı kimi.
printf, əlbəttə, ekran baskı.
istifadəçi olan trans scanf sort klaviatura bir şey o yazdığınız.
>> % I yalnız printf kimi.
Bu gözləmək deməkdir istifadəçi int yazın.
Və indi, niyə mən düşünürsünüz scanf & x keçən ola bilər?
Əgər scanf həyatında məqsədi istifadəçi bir şey almaq üçün,
mənası nədir indi bunu qəbul və x?
Bəli?
>> Auditoriya: [işitilemez].
DAVID J. MALAN: Exactly.
Nə mən, insan, mənim giriş yazın ki, yer xilas olacaq.
Bu yalnız, geri, kifayət qədər deyil biz artıq gördüm, çünki, x keçmək,
istənilən vaxt, yalnız bir xam dəyişən keçmək bir int kimi, bəzi digər funksiyası,
əmin, bu dəyişə bilərsiniz dəyişən, lakin daimi.
Bu Əsas təsir edə bilməz.
Bu, yalnız öz yerli surəti dəyişə bilərsiniz.
Lakin, əvəzinə, siz deyil Mənə faktiki int vermək,
ancaq mənə istiqamətləri vermək ki, int, mən indi, scanf olan
şübhəsiz ki, mən təqib edə bilərsiniz müraciət və bir sıra qoymaq
belə, siz də onu əldə etmək.
>> Bu proqram çalıştırdığınızda, görək.
Scanf 0 dot çizgi olun, 0 scanf.
Və mən indi bir sıra yazın əgər 50 kimi, 50 üçün təşəkkür edirik.
İndi kimi bir sıra yazın əgər mənfi 1, 1 mənfi.
Mən indi hm, 1,5 kimi bir sıra yazın.
Niyə mənim proqram mənə ignore idi?
Bəli, çünki sadəcə, mən bildirib bir int yalnız gözləmək.
Bütün hüquqlar.
Belə ki, bu bir versiyası var.
Nin bir pillə qədər şeylər götürək və Bu yaxşı deyil ki, təklif.
Və burada çox sadə nümunə yatır biz yazılı kodu başlaya bilərsiniz necə
digər insanlar istifadə edə bilərsiniz və ya pis şeyler güzəştə.
Belə ki, line 16, belə ki, oxşar ruhunda əvvəl,
amma bu dəfə int bəyan deyiləm.
Mən simli aka, bu char ulduz elan edirəm.
>> Amma həqiqətən nə deməkdir?
Mən bir address-- müəyyən etmir əgər Mən özbaşına zəng alıram, bufer,
amma simple-- olmaq, s zəng edə bilər və sonra mən bunu mənə izah,
Siz əvvəlki əsasında ola bilər, məntiq, scanf line 18 nə,
pass% s və bufer əgər, ünvanı hansıdır?
Siz müraciət əgər scanf, nə versiyası 0 kimi eyni məntiq,
burada nə üçün cəhd edir, zaman istifadəçi növləri bir şey?
Bəli?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Exactly.
Scanf, məntiq daha əvvəl, simli etmək niyyətindədir
insan tipli ki , indi bir simli var in--
Bu, güman ki, bir sıra deyil o cooperates-- əgər
və bu qoymaq üçün cəhd olacaq nə ünvanda yaddaş string
bufer müəyyənləşdirir.
Və bu, böyük bufer çünki həqiqətən bir ünvan deməkdir.
>> Amma bu proqram ilə arabası iddia çox ciddi bir şəkildə, dəyəri nə çünki
default bufer?
Mən nə daxil başlatılmış var?
Yaddaş nə yığın?
Mən, sağ?
>> Mən təsis etdik baxmayaraq artıq s deyirlər ki char ulduz,
əvəzinə deyirlər ki, buffer-- Nin dəyişən adı çəkmək imkan
Mən əgər indi buffer-- burada getString ya malloc adlı,
səmərəli o deməkdir ki, bufer yalnız bəzi zibil dəyəri.
>> İndi nə deməkdir?
Mən scanf demişəm o deməkdir ki, istifadəçi bir string gözləyirik.
Və nə bilirik?
Nə olursa olsun bu şey işarə edir to-- və mən sual işarəsi çəkmək,
lakin əslində, bu olacaq OX1, 2, 3, kimi bir şey doğru?
Bəzi saxta dəyəri var ki, yalnız əvvəl orada olmaq olur.
Belə ki, başqa bir yol qoymaq, bu bufer yalnız sanki
yaddaş bir şey işarə.
Mən nə heç bir fikrim yoxdur.
>> İndi Gabe yazın Belə ki, gedir orada g-a-b-e / 0 qoymaq üçün cəhd.
Amma kim nə bilir?
Və keçmişdə, hər hansı bir toxunmaq cəhd etdik vaxt
aid deyil ki, yaddaş Bizə nə oldu?
Və ya demək olar ki, hər zaman.
Seqmentasiya günah, sağ?
>> Bu bu arrow, heç bir fikrim yoxdur işarə. Bu yalnız bir təsadüfi dəyəri var.
Və əlbəttə, siz şərh əgər ünvan olaraq bir təsadüfi dəyəri,
Siz getmək olacaq bəzi təsadüfi təyinat.
Belə ki, gabe crash həqiqətən bilər burada bu halda mənim program.
>> Beləliklə, biz demək olar ki, kimi pis nə edə bilər?
Bu üçüncü düşünün və scanf son nümunəsidir.
Bu versiya nə mənada yaxşıdır?
Siz ilə rahat, əgər Əvvəlki problem, bu daha yaxşıdır.
Niyə?
>> Auditoriya: [işitilemez].
DAVID J. MALAN: Yaxşı.
Line 16 Belə ki, bu halda Bu mənada, yaxşıdır
biz aydın şəkildə istəyirik ki, bəzi yaddaş ayrılması.
Biz malloc istifadə edirik biz həftədə 2 istifadə etdiyiniz
yalnız bir sıra elan yanaşma.
Və biz bir string əvvəl bildirib etdiyiniz yalnız simvol bir sıra,
bu tamamilə qanunidir.
Amma bu kimi, əlbəttə, var 16, sabit ölçüsü unutmayın.
>> Belə ki, bu proqram tamamilə təhlükəsiz, mən yazın əgər
bir xarakter strings, iki xarakter strings, 15 xarakter strings.
Amma tezliklə mən 16 yazaraq başlamaq kimi, 17, 18, 1000 xarakter strings,
harada ki, simli başa gedir?
Bu qismən burada sona olacaq.
Amma sonra kim hansı başqa bilir sərhədləri kənarda
bu serialın?
>> Mən var kimi olsa var Burada 16 qutuları elan etdi.
Belə ki, bütün 16 çıxartmaq deyil, biz will yalnız mən 16 tərtib etdik ki, iddia.
Amma sonra bir string oxumaq üçün cəhd edin 50 simvol kimi, çox uzun deyil,
Mən qoyulması başlamaq üçün gedirəm a, b, c, d, x, y, z.
Və bu güman edir bəzi digər yaddaş seqment
ki, yenə səbəb ola Mənim proqram, qəza
Mən xahiş etdik, çünki yalnız 16 bayt daha bir şey.
>> Belə ki, kimin umurunda?
Yaxşı, burada CS50 kitabxana var.
Və bu çox yalnız üst qədər təlimat kimi.
Bu CS50 kitabxana, bütün bu vaxt, line 52 bu xətti var.
Biz typedef görüldü, və ya etdik Siz typedef görəcəksiniz
yalnız bir yaradır pset 4, sinonimi char ulduz daha ola bilər qovuşdurmağımız
sadəcə string kimi istinad.
Belə ki, bu biridir bir neçə təlim təkərlər
biz başlıq altında gizli istifadə etdik.
>> Eyni zamanda, burada getchar, funksiyası var.
İndi yəqin, ona heç bir orqan var.
Və əslində, mən saxlamaq əgər scrolling, Mən, həqiqətən, yoxdur
hər hansı bir tətbiq görmək Bu funksiyaların.
Bir ağlı başında olma çek kimi, niyə ki?
>> Auditoriya: [işitilemez].
DAVID J. MALAN: Bəli.
Belə ki, bu mövzu fayl.
Və header faylları prototipləri ehtiva, plus bəzi digər stuff, görünür,
typedefs kimi.
Amma CS50.c, biz var olan açıq sizə heç vaxt,
lakin CS50 cihaz olmuşdur bütün bu dəfə, dərin qovluq daxilində,
bütün var fark burada funksiyaları dəstə.
>> Əslində isə aşağı diyirləyin bildirin.
Indi üçün, onların əksəriyyəti ignore edək.
Amma GetInt üçün aşağıya fırladın və getInt necə işlədiyini görmək.
Belə ki, burada getInt edir.
Əgər, həqiqətən, qayğı əgər necə almaq int burada çalışır, sənədlərin deyil.
Və şeylər arasında bu sizə deyir deyir
dəyərlərin silsilələri Bu qayıda bilər nə.
Bu mahiyyətcə mənfi 2 milyard müsbət 2 milyard, vermək və ya almaq.
>> Və bütün bu çıxır, zaman, biz heç etdik baxmayaraq
Siz onu yoxlamaq idi, bir şey yanlış gedir əgər,
bütün çıxır ki, bu dəfə, getInt var
xüsusi qaytarılması edilmişdir , null, daimi deyil
əksinə olan INT_MAX yalnız proqramçı-nin Konvensiyası.
Burada deməkdir xüsusi dəyəri nə.
Yalnız bu yoxlamaq üçün əmin olun halda bir şey yanlış gedir.
Amma biz narahat heç etdik günə ki,
yenidən, bu, çünki asanlaşdırmaq üçün nəzərdə tutulmuşdur.
>> Amma necə getInt həyata almaq deyil?
Yaxşı, bir, heç bir dəlilləri edir.
Biz bilirik ki,.
Bu int qaytarır.
Biz bilirik ki,.
Belə ki, necə bu başlıq altında işləyir?
>> Belə ki, yəqin sonsuz var loop, ən azı görünüşü.
Biz getString istifadə edirik ki, görürsünüz.
Belə ki, maraqlı deyil. getInt öz funksiyası, getString çağırır.
İndi niyə bu halda ola bilər?
Niyə müdafiə olmaqdan burada line 165 ildə?
Nə xətti ola bilər 164, yalnız aydın olmaq?
Bu əvvəlki kimi eyni cavabı var.
Yalnız yaddaş ola bilər.
Something, GetString ilə yanlış gedir ki, idarə etmək üçün var.
Və səbəbi null qayıtmaq yoxdur ki, texniki, null bir göstəricisidir.
getInt bir int geri var.
Mən, özbaşına var , mahiyyətcə, qərar
2 milyard gedir, vermək və ya almaq xüsusi dəyər olması heç vaxt edə bilərsiniz
həqiqətən, istifadəçi almaq.
Mən gedirəm yalnız bir dəyəri var bir səhv baş kodu təmsil sərf.
>> Belə ki, indi hər şeyi bir az xülya almaq.
Və çox eyni funksiyası deyil əvvəl, lakin çox oxşar.
Mən line burada elan bildiriş 172, bir int n və char c həm də.
Və sonra mən bu funky line istifadə Bu çıxır sscanf,
klaviatura bir string scan deyil.
Bu mövcud simli dayanır ki, istifadəçi artıq çap etmişdir.
Mən artıq getString, adlanan mən yaddaş bir string var deməkdir.
sscanf nə had edir bir təhlil funksiyası zəng.
Mən var simli baxır , xarakteri ilə xarakter tipli
və faydalı bir şey yoxdur.
Ki, string line saxlanılır.
Mən yalnız gedir bilirik ki, OK, oh, burada deyərək geri,
Mən bu vaxt, lakin line çağırıb.
>> İndi bu bir az fərqlidir.
Amma bu səmərəli səbəblərdən deməkdir biz qədər, bu gün bizim əlləri dalğa lazımdır
biz yoxlamanın istifadəçi çap görmek
və int və bəlkə başqa xarakter.
Istifadəçi int tipli varsa, bu Mən deyiləm, çünki gedir, n saxlanılmalıdır
ünvan bu keçən biz bu gün gördüm yeni oyun.
Istifadəçi da çap əgər kimi 123x, o x
bir başa gedir karakter c məktubu.
>> İndi ki sscanf çıxır ağıllı, mənə izah edəcək,
neçə dəyişənlər sscanf edilib doldurmaq uğurla edə.
Bu məntiq, əgər belə funksiyası Mən GetInt həyata keçirilməsi çox alıram
amma yoxlanılması alıram, potensial, istifadəçi üçün
int tipli var başqa bir şey izlədi,
nə mən sscanf Agentliyi istəyirəm qaytarılması dəyəri həqiqətən olacaq?
Məqsədi almaq əgər yalnız istifadəçi bir int?
>> Belə sscanf yekunları əgər 2 ki, nə deməkdir?
Yığdığınız istifadəçi kimi bir şey, sanki,
Yalnız cəfəngiyatdır olan 123x.
Bu bir səhv vəziyyət var, və Mən ki, yoxlamaq istəyirəm.
>> Belə ki, bu istifadəçi növləri əgər tərəfindən Bu məntiqlə qayıtmaq sscanf nə,
Siz deyəcəksiniz?
Belə ki, çünki 2 geri olacaq 123, burada getmək niyyətindədir
və x burada sona gedir.
Amma x dolu almaq istəmirəm.
Mən yalnız uğur qazanmaq üçün sscanf istəyirəm onun dəyişənləri doldurulması.
Və belə ki, niyə mən sscanf 1 qayıtmaq istəyirəm.
>> Və bu baş üzərində bir az olduqda Bu an üçün, ki, tamamilə gözəl var.
, Baxmayaraq ki, bir həyata GetInt və GetString dəyərlər
biz bir heck edirik ki, Bu belə kimi səhv yoxlanılması çox
ki, tarixi, olduqca çox bilərsiniz klaviatura bir şey yazın,
və biz bunu tutmaq olacaq.
Və biz əlbəttə ki, heyəti deyil, mütləq olacaq
bir səhv mənbəyi ola sizin proqram, biz müdafiə edirik, çünki
axmaq bütün yoxlanılması bir istifadəçi edə bilər ki, hər şeyi,
, bir string yazaraq kimi Siz, həqiqətən, int istədi.
Beləliklə, biz gəlmək lazımdır now-- üçün bu geri long-- əvvəl
lakin bütün bu vaxt, getString və getInt var
Bu istifadə başlıq altında olub yaddaş ünvanları əsas fikir.
>> Belə ki, indi bir Şeyi edək istifadəçi dostu az daha çox.
Siz Binky sonuncu geri bilər time-- mənim siçan belə cooperate-- əgər
Biz bu kodu, olan səmimi, kifayət qədər cəfəngdir.
Bu kodu bir şey əldə faydalı, ancaq nümunəsi idi
ki, professor Parlante təmsil etmək üçün istifadə
nə gedən yaddaş cəlb program.
>> Belə ki, bu tekrar anlatmak edək hekayə super qısa.
Bu ilk iki xətləri,-da English, nə deyərdim ki, yoxdur?
Yalnız əsaslı insan, lakin az texniki şərtlər, bir zərbə almaq.
Auditoriya: [işitilemez].
>> DAVID J. MALAN: OK, siz yaradılması edirik Sizin x və y dəyişənlərin ünvanları.
Olduqca, x və y deyil, çünki ənənəvi mənada dəyişənlər.
x və y ünvanlar və ya ünvan saxlamaq olacaq.
Belə ki, bu bir daha cəhd edək.
Bir pis başlanğıc olsa da.
Bəli?
>> Auditoriya: [işitilemez].
DAVID J. MALAN: Yaxşı.
Mən bir az təmiz hesab edirəm.
Iki göstəricilərinə, iki integers elan.
Və biz onlara x və y zəng edirik.
Yoxsa biz əgər çəkmək bu şəkil kimi, yenə,
sadəcə bütün geri ki, birinci xətti ilə edirik
bu kimi bir qutu çəkərək, bu bir zibil dəyəri ilə,
və sonra x zəng, və bu kimi başqa box,
bir zibil dəyəri ilə bu, y zəng.
Biz iki elan etdik göstəricilərinə ki, son nəticədə
bir int üçün ünvan saxlamaq olacaq.
Belə ki, bütün var.
>> Binky bunu belə zaman, gil yalnız bu kimi baxdı.
Və Nick yalnız cür okları bükülü,
sanki onlar hər hansı bir işarə deyilik xüsusilə, çünki onlar yalnız
zibil dəyərlər.
Onlar açıq-aşkar başlatılmış deyilik hər yerdə xüsusilə.
>> İndi növbəti line kodu, geri, bu idi.
, Əsaslı istifadəçi dostu belə lakin bir qədər texniki English,
kodu edir bu xətt nədir?
Bəli?
>> Auditoriya: [işitilemez].
>> DAVID J. MALAN: Perfect.
Bu yığın ayrılması oldu bir int ölçüsü ki, yaddaş.
Və yarım cavab var.
Siz hüququ cavab ifadə yarısı.
Nə baş bərabər işarəsi sol tərəfində?
Bəli?
Auditoriya: Və varisləri bu dəyişən x?
>> DAVID J. MALAN: And varisləri bu dəyişən x.
Recap, sağ tərəfdən ayırdığı Belə kifayət qədər yaddaş int saxlamaq üçün.
Amma malloc xüsusi ünvan qaytarır
Siz var olan yaddaş ki, yığın ki, yalnız x saxlanılır olur təklif edib.
>> Belə ki, nə Nick Binky ilə son dəfə etdim o pointer həyata sürüklənəcəklər, gil,
yaddaş ağ yığın indi qeyd etmək ki, bir int ölçüsü bərabərdir.
And olsun ki, nəzərdə dörd bayt təmsil etmək.
>> Kod İndi növbəti line bunu, star x 42 olur.
Belə ki, 42-də sadə deyil sağ tərəfdən, həyat mənası.
Sol tərəfdən, ulduz x nə deməkdir?
OK ki gone-- çox ola bilər.
OK.
>> Auditoriya: Əsasən, [Işitilemez] getmək
DAVID J. MALAN: Yaxşı.
Auditoriya: [işitilemez].
DAVID J. MALAN: Exactly.
Sol tərəfdən x getmək deməkdir.
x ünvanı.
33 Oxford Street, və ya OX1 kimi.
Və ulduz x ki, getmək deməkdir müraciət və orada nə qoymaq?
42.
>> Belə ki, həqiqətən ki, Nick nə dəqiq var.
O, by ilə başladı mahiyyətcə, əqli
bir barmaq işarə x, arrow aşağıdakı
sağ tərəfdən ağ qutusu yan və sayı 42 qoyulması.
Lakin sonra hər şeyi var, bir az təhlükəli, sağ?
Binky nin başını itirmək.
>> Star y nə deməkdir, 13, pis luck bərabərdir?
Belə ki, ulduz y vasitələri y ünvan getmək.
Amma y ünvan nədir?
Bütün sağ, zibil dəyəri, sağ?
Mən bir sual işarəsi olaraq qaldı.
Nick bir qədər buruq arrow kimi çəkdi.
Və tezliklə siz cəhd kimi orada getmək deyərək, star y yoxdur,
lakin qanuni yoxdur ünvanı, bəzi saxta yer var,
proqram qəza olacaq.
Və Binky nin baş gedir bunu kimi, burada off uçmaq.
>> Sonunda, bu proqram belə yalnız düz həyata qüsur idi.
Bu arabası proqram idi.
Və müəyyən etmək lazımdır.
Və yeganə yolu, həqiqətən, düzeltmek üçün olardı, məsələn, bu xətt,
biz hətta almaq olmayan, çünki Proqram çox tezliklə qəzaya uğrayıb.
Amma biz bu düzeltmek üçün olsaydı, nə təsiri y bərabər x var bunu edir?
Bəli, bu, mahiyyətcə da y göstərir nə dəyəri x işarə edir.
>> Nick hekayə Belə ki, və ya Binky nin hekayə, həm də
x və y işarə edilmişdir yaddaş ağ yığın,
belə ki, nəhayət, zaman y yenidən 13 bərabərdir ulduz yoxdur,
Siz 13 qoyulması başa müvafiq yer.
Belə ki, bu xətləri bütün mükəmməl qanuni, bu istisna olmaqla,
siz əvvəl baş verən zaman həqiqətən y bəzi dəyəri təyin.
>> İndi şükürlər olsun ki, siz deyil bütün vasitəsilə səbəb var
öz məsələləri bu cür.
Mənə irəli getmək və açmaq burada terminal pəncərə up
və yalnız bir an üçün, açmaq, super qısa proqramı
də növ mənasızdır.
Bu çirkin var.
Bu faydalı bir şey əldə etmir.
Amma bu məsələləri nümayiş etmir yaddaş, belə ki, bir nəzər salaq.
>> Main, super sadə.
Bu yəqin funksiyası çağırır, f, və sonra 0 qaytarır.
Bu mess bu qədər ağır növü var.
Belə ki, Main günə qədər olduqca yaxşı.
>> Belə ki, f problemlidir.
Və yalnız çox qoymadı adlandırma daxil səy
burada kodunu diqqət mərkəzində saxlamaq üçün.
f iki xətləri var.
Və indi neler görmək bildirin.
Belə ki, bir tərəfdən burada və mənə edək
Əvvəlki ilə bu ardıcıl bir tərəfdən example--,
Sol tərəfində İngilis, nə?
Bu That
Auditoriya: bir göstərici yaradılması.
DAVID J. MALAN: bir pointer yaratmaq bir int və axtardığını x.
Belə ki, bu qutuları yaradılması oldu Mən sensor ekran üzərində rəsm saxlamaq.
İndi, sağ tərəfdən yan, malloc, əlbəttə,
yaddaş yığın ayırır.
Və yalnız aydın olmaq, necə çox yaddaş yəqin onu edir
ayrılması, əgər yalnız cür burada riyaziyyat etmək?
>> Belə ki, 40 bytes var.
Və mən bilirəm ki, mən bir bilmək yalnız, çünki int, bu CS50 cihaz, ən azı,
dörd bayt edir.
Belə ki, 10 dəfə 4 40.
Belə ki, bu x saxlanılması, ünvanı 40 ints ilk out ki,
geri yer ayrılıb, geri, geri, geri.
>> Və malloc haqqında əsas nə var.
Bu bir az yaddaş daşımır Burada, bir burada kiçik bir az burada.
Bu, yaddaş bir yığın verir contiguously, Əməliyyat dən
sistemi.
>> İndi bu barədə nə, x bracket 10 0 bərabərdir?
Kod ixtiyari line.
Bu faydalı bir şey əldə etmir.
Amma bu, maraqlı x bracket 10-- çünki?
Bəli?
>> Auditoriya: [Işitilemez]?
>> DAVID J. MALAN: x bracket 10 null olmalıdır deyil.
The null ətraflı yalnız dövrəyə girir strings ilə bir simli sonunda.
Amma yaxşı bir fikir.
>> Nə qədər böyük, hətta bu array edir I 40 bayt ayrılan etdik baxmayaraq?
Bu doğru, doqquz vasitəsilə 0 var?
Bu məlumat, 10 ints var.
40 bytes, lakin 10 ints, 0 0-dizine.
>> Belə ki, x bracket 10 nədir?
Bu, həqiqətən, bəzi unknown zibil dəyəri.
Bu mənə aid deyil ki, yaddaş var.
Mən toxunan lazım deyil byte sayı 41, 42, 43, 44.
Mən çox az gedirəm.
>> Və həqiqətən, Mən run əgər bu proqram, bu, çox yaxşı avariya bilər.
Amma bəzən, biz xoşbəxt almaq lazımdır.
Və belə ki, yalnız nümayiş üçün Hələ və səmimi,
Siz əvvəl bilirsiniz, heç vaxt it-- bu run bildirin yoxdur.
Bu, həqiqətən qəza vermədi.
>> Amma bu, dəyişdirmək əgər Məsələn, 1000 kimi olmaq
həqiqətən bu etmək qəsdən, görək
biz əldə edə bilərsiniz əgər bu dəfə qəza.
OK, bu, qəza etməyib.
Necə 100.000 haqqında?
Onu yeniden yapmak edək, və indi təkrar.
OK.
Phew.
Bütün hüquqlar.
Belə görünür, yenə bu yaddaş seqmentləri, belə ki, danışmaq
belə biz, məntiqi böyük təkrar uğurlu olsun.
Amma nəhayət, bir dəfə gülünc almaq və həqiqətən, ekranda uzaq çıxmaq
Siz, həqiqətən yaddaş toxunmaq həqiqətən sizə aid deyil.
>> Amma səmimi, bu Səhvlərindən növ gedir
çətindir və daha olacaq öz anlamaq üçün.
Amma şükürlər olsun ki, proqramçılar kimi, biz Bizə bu imkan verir ki alətləri.
Belə ki, bu, bəlkə, bir ugliest proqramları,
gdb nin çıxış daha uglier.
Amma bu həmişə bir xətt var və ya super faydalı olan iki.
>> Valgrind kömək edir ki, bir proqramdır Bir proqram debug deyil, özlüyündə,
lakin yaddaş bağlı tapmaq problemlər, xüsusilə.
Bu avtomatik olaraq üçün kod davam edəcək Siz ən azı iki şey üçün baxmaq.
One, bir şey nə idi touch yaddaş kimi təsadüfi
ki, sizə aid deyil?
Bu o hallarda tapmaq kömək edəcək.
>> Və iki, kömək edəcək deyilən bir şey tapmaq
yaddaş sızıntıları, biz malik olan tamamilə rədd, naively,
bir müddət üçün və zövqlə.
Amma bütün çıxır bu dəfə, zaman
Siz getString adlı etdik bizim proqramları çox,
Siz əməliyyat xahiş edirik yaddaş sistemi,
lakin hər hansı bir xatirə var heç verilməsi
geri, bunu unalloc, və ya pulsuz bu deyilən kimi.
Xeyr, çünki biz heç etdik bunu istədi.
>> Lakin bütün bu zaman, proqramlar C yazılı olduğunuz
yaddaş sızan edilmişdir, Bu əməliyyat xahiş
daha sistem strings və etajer üçün yaddaş,
lakin geri verilməsi heç vaxt.
Və indi bu bir az bir oversimplification,
lakin heç olsanız Mac çalıştırmak və ya çox vaxt, açılış üçün PC
proqramları çox, bəlkə, proqramları bağlanması
və hətta sizin kompüter qəzaya deyil,
Bu, çox gec əldə edir Bu həqiqətən sanki
yaddaş bir çox istifadə və ya resursları, baxmayaraq ki,
Siz değilseniz, hətta klaviatura toxunmadan,
ki be-- lakin always-- bilmədi bilər proqramlar siz yayınlıyorsanız ki,
özlərini yaddaş sızıntıları.
Və onlar daha və OS xahiş saxlamaq daha çox yaddaş, lakin bu barədə unutmadan,
həqiqətən, istifadə, lakin Buna görə də uzaq yaddaş alaraq
istədiyiniz bilər ki, digər proqramları.
Belə ki, ümumi izah edir.
İndi burada tapa Valgrind-nin deyil çıxış tamamilə
o az mənfur və eyni daha rahat.
Lakin maraqlı stuff burada sağ qədər.
Bu mənə yalnış yazmaq izah ölçüsü dörd, bu proqram olur
Xüsusilə, memory.c line 21.
>> Mən hm, orada həqiqətən, line 21 getmək əgər ölçüsü dörd yalnış yazmaq.
Niyə size dörd?
Bəli, bu bir sayı və anything-- ola bilər bir int edir.
Belə ki, dörd bayt var.
Mən dörd bayt qoyulması alıram onlar aid deyil.
Nə Valgrind var həqiqətən mənə izah olunur.
Bundan başqa, bu da olacaq biz görəcəksiniz kimi, mənə,
Bu gələcək pset run kimi, əgər siz həqiqətən yaddaş sızan etdiyiniz zaman
Mən adlı etdik, çünki mən, malloc, lakin mən, həqiqətən yoxdur
pulsuz, bu halda, adlı, biz nəhayət görürsünüz
malloc əks edir.
>> Belə ki, indi mən bir final nümunə hesab edirəm.
Belə ki, bu bir az daha çox gizli, lakin bəlkə var
ən böyük səbəbi , yaddaşlı ehtiyatlı olun
və səbəb çox proqramlar və hətta bu gün / və ya web server,
haradasa pis uşaqlar tərəfindən qəbul edilir internet birtəhər olan
Sizin server saxta paketlərin göndərilməsi hesabı güzəştə çalışır,
və ya məlumat almaq, və ya yalnız ümumiyyətlə maşın üzərində.
Bufer daşqın kimi adı, vasitələri təklif
bir int, lakin bufer coşğun.
Və bir tampon bir xülya yoludur deyərək bu yaddaş bir dəstə var.
>> Və həqiqətən, Mən bir string adlanır əvəzinə s bufer əvvəl.
Bir bufer əgər çünki, YouTube mənada kimi,
və ya video seyr etdiyiniz istənilən vaxt, Sözü buffering görmüşəm bilər,
dot, nöqtə nöqtə.
Bu inanılmaz annoying var.
Və yalnız deməkdir Sizin video player ki,
çox download çalışır bayt bytes, çox
internet bir video.
Amma yavaş var, belə ki, çalışırıq Onlardan bir dəstə download
ki, bir tampon, bir konteyner doldurmaq üçün Siz ki, sonra bilərsiniz kifayət qədər bytes var
siz video göstərmək daim duraklatarak olmadan.
Amma siz çıxır Bu böyük bufer.
Amma bu qədər məlumat qoymaq üçün cəhd edin Bu, çox pis şeylər ola bilər.
Belə ki, məsələn, baxaq Məsələn bu son teaser.
Bu başqa bir proqram ki, ilk baxışda,
super faydalı bir şey deyil.
Bu Əsas funksiyası var ki f ki, funksiyası çağırır.
Və funksiyası, f, burada var bir char array ölçüsü 12, c çağırıb.
Və sonra bu istifadə edir Yeni funksiyası strncpy çağırıb.
>> Bu, bu sadə ki, həyata çevirir kodu sadə xətti, yalnız iki xətləri,
biz, mənim bütün proqramı etdik və buna görə də, mənim bütün kompüter,
və istifadəçi hesabı, və mənim ağır hər kəs üçün potensial həssas sürücü
kim bilir və çalıştırmak üçün kifayət qədər yaxşı müəyyən bir command line ilə bu proqram
arqument.
Başqa sözlə, əgər bu pis oğlan yazaraq argvargv [1] daxilində qoyur
klaviatura bir çox xüsusi hazırlanmış at simli, abc, 123, lakin mahiyyətcə,
yürütülebilir təmsil edən ikili rəmzləri kodu, o yazırdı ki, bir proqram,
olan bu sadə proqram ilə proqramları minlərlə nümayəndəsi
ki, daresay, eyni dərəcədə həssasdırlar o, son nəticədə bütün düzəlişlər edə bilərsiniz
sabit faylları, bir almaq o bilər ki, tez yanıb-sönən
öz komutları yazın özüm üçün bütün faylları e-poçt.
Mən nə edə bilər ki, bir şey, o və ya bu kodu ilə edə bilərsiniz.
>> Biz olduqca hələ bu həll deyil.
Və əslində, bu, olacaq bir az şəkil cəlb
Bu kimi, biz tezliklə gəlmək lazımdır olan bütün yaxşı anlamaq üçün.
Amma bu gün üçün, üzrə son qoy , bir az daha ümid edirəm ki, nə
aydın XKCD zarafat, biz növbəti dəfə davam qədər.
Bütün hüquqlar.
Çərşənbə günü görəcəksiniz.
>> [MUSIC ifa]
>> HOPARLÖR: İndi, dərin Daven Farnham tərəfindən fikirlər.
Yaddaş bir qalaq daxil jumping kimi Bazar günortadan qızıl yarpaqları.
Külək əsir, tossing sizin oh hair--, mən gün when-- miss
>> [Gülüş]