[Powered by Google Translate] [Həftə 4, davamı]
[David J. Malan - Harvard Universiteti]
[Bu CS50 edir. - CS50.TV]
>> Bu CS50, bu həftə 4 sonu.
Yaxşı xəbərlər və bəzi pis xəbər belə.
Bazar ertəsi No mühazirə, heç bir problem gələn həftə müəyyən edilmişdir. [Tələbələri təzahürat]
Bu hara getdiyini kimi fikrində deyilik.
Amma sonrakı çərşənbə əvəzinə bu var,
və növbəti cümə biz yolda qalmaq bilər ki, tədris proqramı 1 Cümə mühazirə başına da var.
Lakin hər şey həmişə olduğu kimi çəkiləcək, buna görə narahat deyil.
>> Və əlaqədar biz həftənin sonuna edəcəyik nə 0 viktorina üçün
Kursun ana cs50.net izahı haqqında yazmaq edilir
Birinci viktorina gəldiyi zaman olmalıdır gözləntiləri hansı.
Ümumiyyətlə, bir neçə seçim, doğru-yanlış, qısa cavab, qısa kodlaşdırma problemlər olacaq.
Siz ekvivalent həyata keçirilməsi gözlənilir fikrində deyilik
Bir pset baxın ki, bir problem, olan bir kompüter var
və ayıklama və kimi, ancaq kiçik kodlaşdırma problemlər olacaq.
>> And olsun ki, CS50 viktorina nə hissi almaq üçün ən yaxşı bələdçi kimi
cs50.net getmək edir ki, Sınavlar link getmək
və sınavlar dəyərində Son bir neçə il görürük.
Just tədris həmişə il ərzində eyni deyil bilirik.
Bəzən biz, bəzən çıxmaq əlavə
bu köhnə viktorina biri bəzi mövzu görmək əgər
Bu barədə söhbət nə heç bir fikrim yoxdur ki, biz onu əhatə ki, ya var
və ya biz əhatə etməyib.
Lakin nəzərdən forması, bu bazar, bazar ertəsi və çərşənbə axşamı
həmçinin bazar gecə bir kurs geniş baxış iclası kimi -
Kursun ana açıqlanacaq vaxtı və yeri -
bütün kurs tədris yoldaşları ilə nəzərdən imkanı
hissəsində və tam sinif, həm də bu il üçün material,
və bu həmçinin adi kimi lentə ediləcəkdir.
>> Bütün hüquqlar. Belə ki, daha ADO olmadan, pass bir comment / uğursuz və buraxın / əlavə edin.
Siz keçən gecə mənim qeyd görmüşəm bilər və bu, həqiqətən, yalnız bir əlavə əmin deyil
ki, xüsusən az rahat və ya bir yerdə arasında arasında əgər
və siz, baş üzərində yalnız bir az hiss edirik
həqiqətən olduqca normal olduğunu dərk və yerdə geniş dəstək strukturu var,
ofis saat mənim e-poçt son gece bütün daha yaxşılaşdırılması niyyəti olan biri,
və pass kimi bir seçim / bu kimi bir sinif üçün uğursuz ki, çox həyata
həqiqətən bu kimi əlbəttə kənarında çıxarmaq üçün bir mexanizm kimi nəzərdə tutulur,
Belə ki, bu 10, 15, 20 saat sərf etdiyiniz yenidən əgər
yalnız işləmək üçün bəzi pset almaq üçün çalışır və siz orada yolu 90-95% olduğunu biliyorum
ancaq bir pass bəzi lənətləmək səhv tapmaq / növ tamam olan model uğursuz bilməz.
>> Bu fikri mexanizmi ilə siz sonra digər psets diqqət getmək bilər
və ya yatmaq və ya bu diqqət etmək istəyirəm ki, nə.
Belə ki, bu gələn axşamı qədər var ki, həyata - texniki 5 Bazar ertəsi,
lakin belə, bu, gələn çərşənbə axşamı bir bayram var - pass keçid / pilləli və ya əksinə uğursuz.
Və siz sıldırım, həqiqətən istəyirik və ümumiyyətlə düşmə düşünür əgər,
mühazirə sonra məni tutmaq və ya mənə bir qeyd düşmək edin.
Siz Əlvida teklif əvvəl ən azı chat sevindim.
Bütün hüquqlar. Belə ki, ötən vaxt off təlim təkərlər alaraq başladı.
Xüsusilə, biz simli yönəlmişdir.
String ki, CS50 kitabxana elan ki, bir şey
xüsusi cs50.h adlı fayl biz bu həftə və gələcək baxmaq başlamaq bilərsiniz.
Amma string həqiqətən bir şey yalnız bir asan olur
bir az daha arcanely char * kimi təsvir edir.
Biz tanış edirik karakter. Bu yalnız bir xarakter var.
Amma Bazar ertəsi kimi * nə qeydi? >> [Tələbə] A pointer.
A pointer. Və bir göstərici var? >> [Tələbə] bir ünvan.
>> Bu ünvan, yaddaşlı bir yer kimi.
Bir ünvanı və ya yeri və ya yaddaş nədir?
Yenə hamımız bu gün çox güman ki, bir konsert və ya RAM 2 gigabaytlık ilə noutbuk var
və yaddaş dəyərində bir milyard və ya 2 milyard bytes var deməkdir.
Və həqiqətən, o, fiziki cəhətdən kimi görünür nə etməz
lakin öz laptop ki, fərdi bayt bütün SAYI bilər ki, iman etmək -
bu 0 byte, bu byte 1, bu 2 milyard bayt edir -
və dəqiq bir kompüter nə var.
Bir xarakter üçün yerin ayrılması zaman, məsələn,
o açıq-aydın, kompüter yaddaşında bir yerdə yaşamaq var
və bəlkə, 12345 byte sayı var
və kompüter yaddaş qədər burada bir yerdə var.
Və xarakterli sonra ünvan 12345.
>> İndi, indi vasitəsilə indiyədək həftə 0, biz, həqiqətən qayğı deyil
biz adətən simvol istifadə çünki yerləşir yaddaş şeyi, saxlanılır
dəyişənlər və Diziler həqiqətən bizim data əldə etmək.
Amma ertəsi və bütün daha çox gün kimi, indi olacaq
yazılı proqramları ilə bütün daha ifadəli imkanları
həqiqətən ancaq uyğun bax kompüter yaddaş manipulyasiya,
yaxşı məqsədləri və pis üçün,
bugs bu stuff öyrənmək bu nöqtədə bir çox ümumi nəticə idi.
Amma nə həqiqətən bir char * olmaq deməkdir?
Və bu gün dediyi kimi, biz Binky qayıtmaq lazımdır - nin geri davam edək.
Nin burada sadə bir misal gedək.
Bu fayl compare.c kimi saxlamaq və mənə yalnız burada şablon kodunu qoy edək
belə stdio.h daxildir, məni də özümü daxildir verək cs50.h. Mən orada zoom olacaq.
Mənə əsas əsas int, (void) yazmağa başlayın, indi mən bu kimi bir şey etmək istəyirəm edək:
printf ("Mənə bir string ver:") və sonra simli s GetString olur istifadə edəcək
istifadəçi bir string almaq üçün, sonra başqa bir istifadəçi xahiş gedirəm.
Və mən almaq GetString vasitəsilə onlara gedirəm: ("Mənə bir string ver").
Bu olduqca ümumi varsa s və s simli üçün gözəl adı sonra t gəlir, çünki mən bu t zəng edəcəyik.
Belə GetString, indi mən bir ağlı başında olma çek etmək istəyirik və mən demək gedirəm
(s == t) sonra mən yalnız ("Siz \ n eyni şey tipli") printf istifadəçi demək gidiyorum əgər;
başqa mən kimi ("Siz tipli bir şey fərqli! \ n") bir şey çap gedirəm
və ya hər hansı hökm olacaq. Belə ki, kimi bir şey.
Sonra adi kimi, mən yalnız bir şey pis oldu signified olan 0 qayıtmaq lazımdır
və mən irəli getmək və bu proqramı tərtib və çalıştırmak üçün gedirəm.
>> Amma Bazar ertəsi, biz bu proqramı qaçdı
və həqiqətən HELLO HELLO deyil və Goodbye Goodbye deyil bildirilib.
Gördük davranışı bu kimi bir az çox idi.
Mənə, mənim mənbə qovluğuna girin burada zoom, və in müqayisə edə bilərəm qoy edək.
Tamam tərtib. Müqayisə mənə run edək. Mənə bir ip verin: HELLO.
Mənə başqa simli ver: HELLO.
Siz müxtəlif bir şey çap!
Yaxşı, mənə sadə 50, 50 kimi bir şey edək. Siz müxtəlif bir şey çap!
hi, hi. Belə ki, açıq-aydın bir şey burada davam edir.
Amma nə üçün izahat nə idi?
Görünür, line 12 tamamilə dysfunctional edir.
Burada əsas problem nədir? Bəli. >> [Tələbə] Bu URL müqayisə edir.
Bəli, dəqiq. Bu, faktiki ünvanlar müqayisə edir
olan HELLO və HELLO saxlanılır.
O, təkrar HELLO məktubları müqayisə deyil
nə həqiqətən olub, çünki bütün bu vaxt biz GetString istifadə etdik -
Bu yazı taxtası, daha kompüter yaddaş
və Gəlin bir dəyişən s elan sonra GetString zəng deyirlər.
Mənim yaddaş necə görünür?
Gəlin özbaşına bu kimi görünür ki,. Bu kvadrat var.
Və olduqca çox hər dəfə ekranda yaddaş bir parça tərtib etdik
32 bit əgər mən, cihaz, çünki həqiqətən bu kimi meydanlarda rəsm olduğunuz
bir göstərici, bir ünvan, 32 bit edir. Bu int kimi eyni.
Bu kompüter sistemi əsasında dəyişə bilər.
Mac və ya PC 64 bit olması ilə yayğın tanış olan sizin,
ki, həqiqətən, sizin kompüter 64-bit göstəricilərinə istifadə etdiyini bildirir
64-bit ünvanları, və ki, upsides arasında kompüter edir
yesteryear daha çox RAM ola bilər.
Uzun hekayə qısa, geri günü kompüter yalnız 32 bit istifadə
URL təmsil etmək bytes ən böyük sayı təmsil edə
bu halda nə siz 32 bit varsa?
2, 32, 4 milyard çünki, sağa, 4 milyard belə.
Bu sayı zamanı təkrarlanan edilmişdir.
>> Yalnız 32 bit var, əgər siz arxalana bilər ən yüksək sayı təxminən 4 milyard.
Lakin bir neçə il əvvəl qədər kompüter əsas məhdudiyyət idi
yalnız 4 milyard kimi yüksək saymaq bilər, çünki
siz RAM 8 gigabayt və ya RAM hətta 5 qiqabayt satın əhəmiyyətli deyil;
siz yüksək saymaq bilməz, belə ki, faydasız idi.
Siz yalnız kompüter yaddaş ilk 3 və ya 4 gigabayt yiyələnəcək.
Yəni indi bir məsələ az, ve siz MacBook Pros və Dells ala bilərsiniz
8 RAM gigabayt və ya daha çox bu gün.
Bu proqram sadəcə bir göstərici ayrılması Lakin, bir pointer, s adlı
həqiqətən biz bu qat geri soymaq lazımdır, çünki bu ekranda bu kimi baxmaq bilər.
, Deyərək string saxlamaq, lakin Bazar ertəsi, simli həqiqətən char * edir
bəzi xarakterli ünvan.
Beləliklə, biz indi GetString istifadə davam edəcəyik baxmayaraq nin off təlim tam götürək.
Mən s bəyan etdik və bu yaddaş yığın, 32 bit edir.
Default yaddaş burada nə var? >> [Işitilemez tələbə cavab]
Nə olub? >> [Tələbə] Zibil. >> Zibil. Exactly.
Siz proqramçı bir dəyişən bir dəyər qoymaq deyilsə, kim nə bilir?
Bəzən uğurlu almaq və 0 var olan, gözəl, təmiz default dəyəri növ
biz bazar ertəsi gördüm, lakin bəzən bu, tam cəfəngiyatdır deyil
olduğu gələn bəzi həqiqətən böyük müsbət və ya mənfi sayı?
Bəli. Əvvəl >> [tələbə] funksiyası. >> Bəli.
>> Tez-tez xatırlayıram çünki əvvəl deyilən oldu ki, funksiyası,
yaddaş funksiyaları zəng kimi, onlar dibindən daha çox yer tutur
və tezliklə funksiyası yekunları kimi, yaddaş təkrar olur
adlı olur ki, növbəti oğlan ilə olan yaddaş üçün eyni dilim istifadə edir.
Və orada sol zibil əvvəlki dəyərlər, var əgər
biz, həqiqətən, biz bir şey qoymaq heç zaman bəzi dəyəri olan kimi səhv ola bilər.
Beləliklə bu nöqtədə bizim RAM bu kimi görünür.
İndi line 7 sağ tərəfində biz GetString zəng etdiyiniz
olan biz həftə indi bunu etdik, ancaq həqiqətən bunu GetString edir?
Bu CS50 heyəti tərəfindən yazılı GetString bir az ağıllı
ki, istifadəçi yazaraq düymələri və Xit daxil edin başlayır kimi
Neçə tuş vuruşlarını istifadəçi hit etdi GetString rəqəmlər həyata,
neçə simvol mən RAM ayırmaq lazımdır.
Və harada ki, RAM, gəlir kim bilir?
Bu kompüter 2 gigabaytlık və ya yaddaş etajer yerə deyil.
Amma nin kompüter burada HELLO söz üçün yer tapdı güman edək.
Mən tipli sözü H-E-L-L-O idi.
Biz simvol bir ardıcıllıqla bu çəkmək, biz bu kimi cəlb edə bilər.
Amma 1 əlavə şey etmək lazımdır. Nə C heç bir simli sonunda məxsusdur?
Biz \ 0 kimi yazmaq olan null xarakter.
Bu texniki sayı 0 var, lakin backslash bütün aydın edir
bu sözün sayı 0 ki, tam 0 ki;
siz klaviatura ilə yazın bilər ki, məsələn, quote-dırnağı bağlamaq 0, deyil.
Beləliklə, bu HELLO edir.
>> Biz bazar ertəsi nə demək ki GetString kimi bir funksiyası
həqiqətən bütün bu həftə qayıdır?
Ki, həqiqətən mənası yoxdur, çünki özlüyündə bir string qaytarılması deyil
strings yoxdur çünki. Onlar CS50 kitabxana bir quraşdırma növ istəyirik.
Daha texniki, nə həqiqətən bir simli edir? >> [Tələbə] Bu ilk xarakter var.
Exactly. Bu istifadəçi daxil yazdığınız sadəcə ilk xarakterli ünvan var
Belə ki, əgər byte sayı 123 və sonra byte sayı 124 bu başa HELLO mənim söz,
125, 126, və s, qədər 0-dan Mən sayı mənim bytes əgər,
nə həqiqətən GetString qayıdır sanki sayı 123-dir.
Belə ki, nə s qoymaq olur sayı 123 deyil, məktubu H deyil, sözü, HELLO edir
sadəcə mən HELLO ilk hərfini tapa bilərsiniz ünvan olan.
Lakin kifayət qədər kimi görünmür. Mən bir simli üçün bir xarakter siz istədi.
Belə ki, necə biz və ya kompüter ki ELLO cür H ilə birlikdə gəlib bilirik?
Biz müqavilə sort nədir? Bəli.
[Tələbə] Bu daha çox simvol tapmaq özünü izah edir. Məhz >>.
>> Siz strings ilə məşğul olan elə bu insan-kompüter konvensiya var
başqa indi char ulduzları kimi tanınan, sadəcə anlamaq üçün
həyatda hər simli sonunda həqiqətən, loop üçün onu üzərində iterating ilə olduğu
bir müddət loop, nə ki, siz simli sonunda tapmaq zaman
İndi ki, nəticə çıxarmaq olar, oh, bütün söz HELLO idi.
Əvvəl proqramlaşdırma təcrübə ilə sizin Java Bildiyiniz
yalnız. zəng uzunluğu və digər dillərdə siz uzunluğu və ya oxşar zəng edə bilərsiniz.
Dil bir çox, xüsusilə şeyi obyekt-yönümlü languages ​​adlı çünki O, var
şey uzunluğu data özü parça encapsulated daxilində növü
çox biz encapsulated kimlikleri və adları və bazar ertəsi tələbə daxilində ev istəyirəm.
Lakin C çox aşağı səviyyədədir. Əvvəl şərtlərindən eşitdim heç obyektlərin və ya siniflər var.
Siz var Bütün, həqiqətən, yaddaş ünvanları edir.
Belə ki, bu maraqlı data strukturları təmsil edən köhnə yol sortudur.
Siz ilk xarakterli ünvan kimi bir başlanğıc dəyəri
və sonra hər kəs riayət razılaşır ki, yalnız bir ixtiyari Konvensiyası.
Belə ki, simli uzunluğu həyata necə, biz təklif etdi?
Siz bəzi artıq bir neçə dəfə istifadə edən Strlen, strlen. Bu doğru, olduqca sadə var?
Bu kodu 2 xətt kimi.
Bu bəlkə bir əlavə yerli dəyişən ilə olduqca çox bir növ üçün loop var.
Amma strlen yalnız \ 0 axtarır başlamaq sonra bir göstərici almaq və var.
>> Və tezliklə tapdığı kimi, bu simli qəbul olan addımlar ümumi sayı ola bilər.
Belə ki, biz növbəti gedir nə bu nəticə çıxarmaq olar.
Mən line 10-etdiyiniz kimi t bəyan sonra düşünək.
Bu, bəzi zibil dəyəri. Kim ilk bilir?
Lakin 10-xəttinin sağ tərəfində yenə GetString zəng edirəm.
Bu başa yerləşir Kim bilir?
Gəlin özbaşına əməliyyat sistemi burada yol artıq otaq aşkar deyirlər.
Mən yenə coincidentally H-E-L-L-O yazın baş
və biz şəkil eyni cür cəlb edə bilər.
Amma redrawn bu şəkil var ki, qəsdən edir
ki, çünki bu daha HELLO fərqli.
Belə ki, burada bu yeri 456 ola bilər, bu 457 və s.
Sual işarəsi dəfə idi nə qoymaq olur?
Bu halda 456-ci ildə.
Biz bu gün sonra, çünki, həqiqətən, özbaşına bu nömrələri seçmək edirik
biz bir şey ünvan nə qədər çox qayğı fikrində deyilik.
Biz qayğı bütün biz HELLO kimi data bəzi parça ünvan anlamaq bilər.
>> Belə ki, həqiqətən yaddaş ünvanları haqqında danışarkən insanların çoxu kompüter nə
və, xüsusilə göstəricilərinə söhbət
Bu məhsulları həqiqətən olduğu kimin umurunda - 123 həyata figuring narahat deyil
biz yalnız bəzi ədədi ünvan olduğunu bilirik -
biz dünyanın sadələşdirmək və yalnız s ki, karakter işarə edir ki,
t ki, karakter işarə edir.
Və bir arrow var ki, çox qəsdən edir
sanki artıq H və t işarə edir, çünki digər H da işarə edir
Günün sonunda, bu ünvanı nə fərqi deyil, çünki
lakin kodu bəzi parça ilə ünvan ifadə etmək imkanı var ki, məsələ yoxdur.
Biz, həqiqətən, yalnız hələ bu ünvanlar manipulyasiya deyil
belə biz interject və göstəricilər ilə şeyə və sort bilərsiniz görürsünüz
amma sözün 12 indi xətt üçün nə dəyərləri biz müqayisə olunur
line 12 Bu hekayə görə?
Biz 456 üçün 123 bərabər bərabər olduğunu deyib mi? Və mütləq hal deyil.
Və hətta konseptual, bu göstərici mütləq bu kimi eyni deyil
, iki dəfə GetString adlanır və GetString ağıllı super olmaq üçün cəhd deyil, çünki
həyata cəhd deyil, oh, siz 5 dəqiqə əvvəl HELLO tipli;
əvvəl sizə verdi kimi məni eyni göstərici verək,
yalnız yaddaş, yeni bir yığın siz zəng hər zaman ayırır.
>> Biz bu problem Belə ki, necə düzeltirim?
Yüksək səviyyədə, mən strings HELLO və HELLO müqayisə etmək istəyirəm -
Mən göstəricilər haqqında qayğı yoxdur - Mən suala cavab haqqında necə getmək yoxdur,
istifadəçi eyni şey yazın idi? Burada lazımdır? Bəli.
[Tələbə] funksiyası istifadə edin. >> Mən qutusu bir funksiyası istifadə edə bilərsiniz.
Mən strcmp, s-t-r-c-m-p adlı bir funksiyası istifadə edə bilərsiniz
Simli müqayisə deyərək yalnız qısaldılmış versiyası.
Və biz getmək əgər, məsələn, bu gün sədəqə arasında olan, 2 et
Mən məhz bunu.
Mən, 26 və ya aşağı başqa hər şey xətti 1 eyni saxlanılır
və indi bu hissəsi yalnız bir az dəyişib bilərsiniz.
Bir an üçün line 28 ignore və bu yalnız diqqət edək.
Biz küç müqayisə edir ki, bazar ertəsi nə?
O, bu halda 2 göstəricilərinə, s t alaraq prosesi emal
növ faktiki olaraq, bu 2 məktublar onun barmaq qoyaraq
və nə etməliyik, loop üçün bir müddət loop və ya kimi bir şeydir
və bu eyni deyir? Əgər belədirsə, bu, barmaqları və ya irəli göstəricilərinə hərəkət edir.
Bu eyni, bu eyni, bu eyni,
bu eyni, bu eyni? Və ooh, mən s t həm də simli sonunda edirəm.
Mən heç bir ziddiyyət aşkar deyil. Bəli, bu strings eynidir.
2 strings eyni əgər küçəsi, yəqin qaytarılması nə müqayisə edir? Zero.
Belə 0 Bu halda yaxşı çünki -1 ya +1, geri əgər
edən yalnız t əlifba əvvəl və ya t sonra gəlmək olur ki, deməkdir.
Və nə ki, simli əvvəl gəlir deyir ki, bir funksiyası var faydalı olardı
və ya bir lüğət sonra?
[Tələbə] axtarış. >> Axtarışı və çeşidlənməsi.
>> Belə ki, ikili axtarış və ya bubble sırala kimi şeylər və ya sort daxil edə bilərsiniz
şeyi müqayisə var.
Bu günə qədər biz bəzi küncləri kəsilmiş növü var və yalnız çeşidlənməsi haqqında danışdı
ədəd kontekstində bu barədə danışmaq üçün gözəl və asan deyil, çünki
ancaq əlbəttə strings, alma və banan, müqayisə edə bilərsiniz
alma eyni, banan əvvəl gəlib məlum olduqda, çünki
Siz video birləşmə növ ilə idi yalnız Rob kimi yaddaş ətrafında strings hərəkət edə bilər
və biz seleksiya sort daxil sort və bubble sırala ilə səhnəyə burada etdi.
Belə ki, burada başqa biz bu edə bilər? Bu cəhd edək.
Və Gəlin sort bir an üçün dərs unutmaq və indi cəhd və aşağıdakı etmək 1.c surəti.
Line 21 Mən, çap bir şey dedi alıram
sonra, istifadəçi bir string alıram
sonra mən bu yoxlanılması alıram.
Biz, həqiqətən, hələ bu vərdiş halına kazanılmış, lakin indi bu imkan yoxdur.
Geri bu qat qabığı həqiqətən edək. Bu, həqiqətən, char * edir. Bu adam həqiqətən char * edir.
Belə ki, s == NULL əgər yoxlanılması üçün nə deməkdir?
Bu çıxır ki, siz GetString kimi bir funksiyası zəng zaman
və ya daha çox, ümumiyyətlə, yalnız, bəzi yaddaş vermək üçün kompüter xahiş
bir şey yanlış getmək bilər.
Siz crazy və yaddaş terabayt üçün kompüter xahiş edə bilər
yalnız kompüter mövcud olmayan yaddaş bytes trilyonlarca tələb edərək,
lakin GetString və digər funksiyaları siz böyle bəzi yol lazımdır
siz çox xahiş etdik əgər.
Daha çox yaddaş tələb varsa və GetString Bunu yolu
ki, super, super aşağı ehtimal belə, kompüter mövcuddur çox
Bizə heç Enter sonra bir trilyon karakterleri yazın və davam edir, çünki
lakin ola bilər, baxmayaraq aşağı ehtimalı, mən hələ də, yalnız halda onu yoxlamaq istəyirəm
xüsusi dəyər GetString, cavab və digər funksiyaları gəlirlər ki,
bir şey yanlış keçmişdir əgər bütün caps ildə NULL edir.
>> Və NULL nədir? NULL yalnız bir göstərici təmsil olur. Bu yaddaş ünvan 0 var.
Bu mənim kompüter yaddaş əgər dünya ki, özbaşına qərar - Bildiyiniz nə? -
biz hər kompüter yaddaş yalnız 1 byte oğurlamaq olacaq və bu yeri 0 deyil.
Biz NULL bir ləqəb vermək olacaq və biz vəd olacaq
biz həqiqətən var real data qoymaq heç vaxt
biz yalnız özbaşına xüsusi dəyəri, 0, NULL aka, lazımdır, çünki
bir şey yanlış gedir əgər biz users fəğan edə bilsinlər.
Əks halda 0 burada bir şey qoymaq deməkdir bilmirəm bilər
və ya bir şey yanlış getdi deməkdir?
Biz bütün NULL vasitəsilə heç bir şey qaytarılıb razılıq var
heç bir faktiki ünvan qaytarılmışdır.
İndi burada mən yalnız mən mənim insan konvensiya qəbul edirəm əsas, 1 qayıtmaq
bir şey yanlış gedir əgər.
Əsas qayıdışı konvensiya 0 yaxşı əgər qayıtmaq çünki O, var
1 və ya bir başqa dəyər pis əgər.
Amma GetString və NULL yaddaş yekunları fırsatlar bir şey pis gedir ki, əgər hər hansı fəaliyyət göstərir.
>> Okay. Belə ki, təəssüf ki, line 27, bu olsa super sadə, tamamilə simli surəti bilmir.
Niyə? Biz bu aşağıdakı kimi bilərsiniz.
Mən s surəti edilməsi və t zəng etmək line 27 iddia edirəm.
Mən 2 strings bu dəfə üçün istifadəçi isteyen deyiləm, mən yalnız s dəyəri dedi alıram
habelə t qoymaq lazımdır.
Belə ki, indi yalnız 29 irəli mən nə edirəm xətt, bu necə broken nümayiş?
T uzunluğu 0 çoxdur əgər Birinci mən yoxlanılması alıram.
Bəzi simli var. İstifadəçi daxil şey tipli
Yəqin line bunu 32, nədir?
[Işitilemez tələbə cavab] >> hüququ. Siz tipli mən bunu edir nə dedi onu nəticə çıxarmaq olar.
Ancaq texniki, bu nə edir? t [0] nə təmsil?
[Tələbə] Bu zeroth character. >> [Malan] The zeroth character.
Yoxsa, daha çox insan kimi, t ilk xarakteri, o nə, H bəlkə bu halda.
Və toupper deyir nə. Bu t zeroth xarakter capitalizes və onu dəyişir.
Bu t zeroth xarakter etmək deməkdir ki, bu böyük etmək
və həmin yeri geri qoydu.
Mən kiçik də salam yazın Belə ki, bu kapital H. üçün kiçik h dəyişməlidir
Ancaq problem xətləri 35 və Mən haqqında Ben nə 36 Bookmark s t üçün çap olmasıdır.
Və donqarlamaq nə var?
Mən, həqiqətən, Mən kiçik də salam çap görmek üçün nə edəcəyəm?
Nə çap almaq üçün gedir? >> [Işitilemez tələbə cavab] >> ki, nə var?
[Tələbə] Big H qalan kiçik. Kiçik >> böyük H və istirahət üçün, və ya t?
[Tələbə] Həm. >> Edir. Exactly. Belə ki, burada neler görmek edək.
>> Mənə davam və bu tərtib edək. Bu copy1, belə copy1 edir. Bütün hüquqlar.
Kiçik də salam: Yadda davam və copy1 run, daxil edin, bir şey De edək daxil kiçildin.
Bu surəti kapitallaşdırılır, lakin yəqin həmçinin orijinal kapitallaşdırılır
nə bu hekayə olur çünki?
Line 27 Mən, həqiqətən, simli çıxarmaq üçün görünmüyor
ancaq daxilən belə ki, ümid ola bilər, baxmayaraq ki,
Bu şəkil haqqında düşünüyorsanız, nə həqiqətən mən etmişəm?
Şəkil yarısı eyni.
T hələ xəbəri yoxdur ki, Belə ki, geri vaxtında roll imkan verir.
S hekayə mövcud ola bilər, lakin edək salam bu dəfə kiçik.
Mən həqiqətən daxil tipli nə mənə düzeltmek bildirin
Burada bu halda biz h-e-l-l-o var.
Biz simvol bir ardıcıllıqla kimi çəkmək lazımdır, burada mənim separator xətləri qoymaq və \ 0.
Belə ki, biz 24-ish vasitəsilə tezliklə xətti 1 kimi burada deyil, vermək və ya almaq, icra var.
Bu mənim yaddaş şəkil.
Mən line 27 almaq zaman nə baş verir?
Əvvəl istəyirəm Sadəcə, mən bu kvadrat kimi çəkmək lazımdır bir göstərici almaq.
Bu t deyirlər. Və default dəyəri nə var? Kim bilir? Bəzi zibil dəyəri.
>> Mən ki, uzaq bir sual işarəsi kimi mücərrəd yatıracağız.
Və tezliklə line 27 sağ icra kimi, nə t daxilində qoyulması edirəm?
S ki, eyni şey.
Bir an biz arrow bu abstraksiya aradan qaldırılması və biz demək, əgər
oh, bu t s, nöqtəli vergül olur deyəndə, yaddaşlı yük ünvan 123 deyil,
siz sözün burada 123 qoyaraq edirik.
Biz cür şəkillər ilə daha dünya sadələşdirmək İndi əgər,
nə həqiqətən etdik, yalnız dünya üçün bir arrow əlavə
ki t eyni dəqiq string işarə edir.
Belə ki, xətt 31 və 32 Mən, həqiqətən, t [0] dəyişdirilməsi getmək zaman,
t nə [0] indi ilə yəqin sinonimi? s [0]
Belə ki, bütün baş verən deyil.
Və hətta bu cür olsa hiss bir az aşağı və gizli
və bu cür bəlkə daxilən bu yalnız işləmiş olmalıdır kimi hiss -
Mən əvvəl şeyi nüsxə etdik və yalnız çalışmışdır -
siz həqiqətən bir string həqiqətən nə barədə düşünmək, bu bir char * var.
Yaxşı ki, nə? Bəzi xarakterli ünvan var.
Sonra bəlkə daha çox əhəmiyyət kəsb edir ki, bir şey etmək üçün cəhd zaman
bu kimi super zahirən sadə, siz yapýyorsun bütün çıxarmaq yaddaş ünvan.
Siz, həqiqətən, simli özü ilə bir şey məşğul deyilik.
Siz heç bir fikrim yoxdur, hətta belə ki, kodu bu problemi həll necə
yüksək səviyyədə, konseptual, biz yəqin, s həqiqi surəti ta etmək üçün nə lazımdır?
Bəli. >> [Tələbə] yeni bir yer ver? Məhz >>.
>> Biz t yeni yeri vermək lazımdır.
Biz birtəhər biz yaddaş yeni bir yığın almaq bir dünya yaratmaq üçün lazımdır
yalnız aydınlıq xatirinə Mən bu bir aşağı çəkmək lazımdır, lakin orada olması lazım deyil.
Amma eyni ölçüdə olmalıdır, mən eyni yerdə bu şaquli xətləri çəkmək lazımdır.
Bu ilkin bütün zibil əgər O, gözəl deyil. Kim nə bilir?
Mənə lazımdır Amma 1 adım çox yaddaş kimi mənə vermək lazımdır gedir
salam surəti uyğun, sonra, burada h surəti necə burada e anlamaq
burada və s l.
Ətraflı bəzi hələ mücərrəd olsa Amma bu artıq bir az aşkar hiss etməlidir.
Bu bu simli kopyalamak üçün, yalnız bir loop və ya bir müddət loop üçün var
və ya bütün çox tanış olduğunuz olan bir şey.
Belə ki, bu cəhd edək. Mənə copy2.c daxil edək.
Copy2.c biz line 27 istisna olmaqla, demək olar ki, eyni proqram var.
Bu bir az mürəkkəb görünür, lakin biz parça-parça onu qırmaq əgər
sol tərəfdən eyni.
Char * t bir sual işarəsi ilə də olsa, yaddaş bu şey yaradır
biz heç bir fikrim yoxdur, çünki mənim orada nə var.
Sağ tərəfdən biz indi yeni bir funksiyası, malloc təqdim edirik
yaddaş ayırmaq üçün, mənə yaddaş vermək
və yəqin edir neçə arqumentlər neçə mötərizə içərisində şeylər?
Mən 1 və 2 murmurings eşitdim, lakin yalnız 1-dir.
Parantez içinde yalnız 1 şey var deməkdir heç bir vergül, var.
Digər parantez var baxmayaraq, mənə qeyd edək
bu outermost mötərizə daxilində nə var, və bu ifadə var:
(Strlen (s) + 1) * sizeof (char).
Biz, həqiqətən, bu düşünmək Belə ki, bu mənə s uzunluğu vermək deyib.
Niyə uzunluğu üzərinə 1 əlavə, baxmayaraq ki, am? >> [Işitilemez tələbə cavab]
Exactly. Biz quyruq bu oğlan üçün yer yoxdur, ingilis mənası var ki, altıncı xarakter lazımdır
lakin xüsusi proqram mənası yoxdur.
>> Belə ki, bir + 1 lazımdır, çünki strlen yekunları uzunluğu insan gözləməsi
salam və ya 5, siz əlavə null xarakter vermir.
Mən əl + 1 Bu əlavə edin.
Və bu, of * ölçüsü (char), biz bu əvvəl görmədim.
Bu texniki bir funksiyası deyil.
Bu, sadəcə nə ölçüsü kompüter bəzi data növü sizə deyir ki, xüsusi bir söz var
əslində, çünki bizim bəzi 32-bit, kompüterlər var.
Mən evdə olduqca köhnə kompüter var və bu yalnız göstəricilərinə təmsil 32 bit istifadə edir.
Mən data type ölçüsü əgər Belə ki, bu 32 bit ola bilər.
Mən yeni xülya kompüter istifadə edirəm, lakin, mən 64 bit dəyəri geri almaq bilər
ünvan kimi bir şey.
Belə ki, bu halda, yalnız super təhlükəsiz, biz kimi ağır kodu şey fikrində deyilik -
yaxşı, biz indiyə qədər bildirib olduğunuz nə görə char həcmi nə qədərdir?
Biz olduqca çox 1 byte var ki, şura daxilində olduqca çox doğrudur ki, şifahi bildirib etdik.
Ancaq yenə də, fərziyyələr pis olur.
Insanlar niyyətində deyil idi yollarla proqram istifadə əgər onlar arabası proqram gətirib.
Belə edək abstrakt bu üz və daha çox ümumi olaraq demək
Mən yaddaş bu çox chunks lazımdır
və yaddaş hər yığın, bir xarakter ölçüsü ekvivalent olmalıdır
Bu halda 1-bərabər faktiki olaraq olan, lakin o, yazılı bir daha ümumi yolu.
Sözü salam əgər Belə ki, neçə bayt malloc yəqin salam ayrılan edir?
[Tələbə] Altı. >> Altı. Biz ekranda sual işarələri var olduğu kimi bir çox.
Və sonra indi GetString sizin anlaşma əsasında təxmin etmək
malloc yəqin ki, nə qayıtmaq edir? >> [Tələbə] bir ünvan.
Nə bir ünvan? Yaddaş ilk yığın edir.
>> Biz nə var heç bir fikrim yoxdur, çünki bəzi digər funksiyası
əvvəl bu yaddaş istifadə bilərdi.
Amma malloc, GetString kimi, yaddaşlı ilk byte üçün ünvan qaytarır
sizin üçün ləğv edib.
Lakin, nə bunu etmir backslash null xarakterli bu boş doldurmaq olunur
ints, simlər, diziler, siz bir şey ayrılması malloc istifadə edə bilərsiniz həyata çevrilir, çünki
üzüb gedirdi, tələbə strukturlar.
Siz tamamilə ümumi olaraq malloc istifadə edə bilərsiniz.
Bu qayğı və ya sizin üçün yaddaş ayrılması nəyi yoxdur.
Belə ki, bir \ 0 qoymaq malloc üçün lovğa olacaq
yaddaş hər yığın sonunda siz verilməsi oldu
bu \ 0 şey yalnız strings üçün konvensiya deyil.
Bu ints üçün istifadə deyil, bu, üzüb gedirdi üçün istifadə deyil, o, tələbələr üçün istifadə deyil.
Və malloc ilə gotcha yükünü siz tamamilə proqramçı olduğunu
siz ayrılan neçə bayt xatırlamaq və heç loop üçün istifadə etmək
və ya bir müddət loop və sizə verdiyi olduğunuz yaddaş yığın sərhəd keçmiş gedin.
Tez yaddaş ayrılması kimi, başqa sözlə,
Əgər əməliyyat sistemi xahiş edə bilməz, oh, yol, bu necə yaddaş yığın böyük idi?
Bu dəyər lazımdır xatırlamaq sizə tamamilə var.
>> Mən bu yaddaş istifadə üçün davam necə in görək.
Line 28 və 29-nə bunu edirəm?
Yalnız ümumi ağlı başında olma çek.
Bir şey yanlış getdi Just halda, mən yaddaş bəzi crazy məbləği tələb
və ya çox şey, yalnız kifayət yaddaş yoxdur kompüter çalışan var
kimi bir şey, mən ən azı null kontrol etmək istəyirəm.
Əslində, ən kompüter siz illüziya verəcək hər proqram
Sizin RAM tam istifadə edə bilər,
hətta, belə ki, bəlkə bəzi crazy uzun simli istifadəçi növləri əgər onlar pis oğlan edirik, çünki
və onlar, həqiqətən, bu, sizin proqram və ya hack qəza çalışdığınız
ən azı malloc qaytarılması dəyəri yoxlamaq istəyirəm və bu null bərabər olub.
Və əgər, mən bu halda nə bilmirəm, çünki nin yalnız indi çıxmaq imkan verir.
Necə simli surəti yoxdur? Bunun üçün bir neçə yol var.
Yoxdur küç C funksiyaları surəti, lakin bizə bu köhnə yol etmək üçün sadə super deyil.
>> Birinci mənə s uzunluğu nə həyata rəqəm imkan verir.
Mən loop bu qoymaq bilərdi lakin əvəzinə yalnız aydınlıq üçün burada həyata qoydu.
Belə n indi yəqin 5 olan orijinal simli uzunluğu, saklar.
Sonra üçün loop Mən n qədər 0-dan iterating alıram
və hər iteration Mən qoyulması alıram s [i] t daxilində [i].
Belə ki, mən əvvəl strings da işarə mənim 2 barmaqları ilə nəzərdə tutulan budur.
Loop üçün bu kimi iterates kimi, mən, burada daxil h çıxarmaq üçün gedirəm
burada l burada daxil daxil e bu s, çünki bu t edir.
Və sonra nəhayət, line 35-nə bunu edirəm?
Mən string t sona alıram əmin etmək lazımdır.
Mən açıq super olmaq üçün bu yolu etdi.
Lakin, ola bilər, əgər, bunu fərqli bir şəkildə kimsə təklif.
Mən, həqiqətən, line 35 ehtiyac yoxdur. Bunun başqa yolu yoxdur.
Bəli. >> [Işitilemez tələbə cavab] >> o Qaraçuxurlu söyləyin.
[Tələbə] dən az və ya bərabər. Məhz >>.
Biz yalnız daha az və ya ümumiyyətlə pis olan n, bərabər demək olar
biz hesablanması etdiyiniz şey üçün bərabər qədər getmək demək olar ki, həmişə çünki
biz çox 1 addım geri getmək.
Amma unutmayın ki, biz nə qədər bytes ayrılması idi?
Biz 6 cəmi, belə ki, 5 + 1 s strlen ayrılıb.
Belə ki, bu halda biz bu kimi bir şey edə
biz çox sonunda yalnız salam, həm də \ 0 deyil çıxarmaq edirik ki.
Alternativ olaraq, biz strcpy küçəsi surəti deyilən bir funksiya istifadə edə
lakin yaxın kimi çox fun ola bilməz.
Lakin bu başlıq altında verir bütün var.
Sonra nəhayət, biz əvvəlki kimi eyni şey.
I t kapitallaşdırmaq və sonra orijinal bu surəti kimi görünür kimi görünür ki, iddia.
Belə ki, indi bu edək. Mənə burada gedək. Copy2 olun. Biz zoom və copy2 run lazımdır.
Mən kiçik də salam yazın gedirəm, həqiqətən, Mən orijinal kimi salam kiçik almaq
lakin surəti üçün Xoşgəldiniz paytaxtı.
Amma yalnız hələ həyata deyiləm. Burada 1 son şey etmək lazımdır.
46 və 47 aydın yaddaş azad, amma əslində nə deməkdir?
Mən line 46 və line 47 zəng siz hesab edirəm ki, nə edirəm?
Nə təsir edir? Bəli.
[Işitilemez tələbə cavab] >> Exactly.
>> Siz yalnız, hey, bu yaddaş üçün təşəkkür əməliyyat sistemi izah olunur.
İndi başqası üçün istifadə edə bilərsiniz.
Burada zibil dəyərlər mükəmməl misal var.
Mən sadəcə, 2 yerlərdə salam sözü yazmaq üçün yaddaş istifadə
burada, burada, burada və burada.
Belə ki, bu h-e-l-l-o-\ 0 deyil.
Amma sonra line 46 və line 47 zəng və şəkil baxımından orada nə bilirik?
Əslində, gözləyin, bu şəkil köhnə biridir.
Biz çıxarmaq sonra, bu oğlan həqiqətən, burada işarə edir
belə yenə nömrələri aradan qaldırılması və yalnız mücərrəd üz bizim oxlar kimi edək.
Mən pulsuz zəng nə bu şəkil olur?
[Işitilemez tələbə cavab] >> Hətta.
Mən s t pulsuz zəng varsa - oyun sual növü - bu şəkil bütün dəyişmir
s zəng və zəng çünki t yalnız əməliyyat sistemi deyir
hey, siz yenidən bu yaddaş istifadə edə bilər, lakin bu null dəyişdirmək deyil
və ya xüsusi xarakterli, bu dəyişmir
bu h və ya e ya başqa bir şey ya yerdə l və ya l və ya o dəyişmir.
Şəkil baxımından, tezliklə siz pulsuz, heç bir dəyişikliklər zəng kimi.
Və orada zibil dəyərlərin mənşəyi yerləşir çünki mən sonra bu proqram
ki GetString ya malloc və ya kimi bir şey daha çox yaddaş üçün əməliyyat sistemi xahiş
və əməliyyat sistemi, əmin, Mən yalnız azad yaddaş 12 bytes var, deyir
bu istifadə, nə təqdim ediləcək?
Biz adətən cəlb ki, yaddaş yığın təhvil olacaq
sual işarələri, lakin bu sual işarələri nə var?
Onlar h-e-l-l-o, h-e-l-l-o olması baş verir.
Bu tez yaddaş pulsuz olaraq yeni zibil dəyərlərdir.
>> Bir real dünya dolayısı burada da var.
Bu RAM ilə olur, ancaq kompüter
həqiqətən disk ilə eyni şey.
Biz Suclari fokuslanan bir gələcək problem dəsti ilə xüsusilə bu barədə danışmaq lazımdır.
Sizin masa üstü bəzi həssas maliyyə fayl varsa Amma nə həqiqətən baş verir
və ya bir yarım yamalak JPEG və sizin zibil daxil sürükleyin
Siz zibil və ya zibil bin daxil sürükleyin zaman nə olar?
Mən söhbət nə bilirdi. [Gülüş]
Əgər zibil bin və ya zibil bilər daxil sübut sürüklənəcəklər sonra ne olur?
[Işitilemez tələbə cavab]
Yaxşı, belə ehtiyatlı. Bunu ne olur?
Qısa cavab doğru bir şey deyil?
Yarım yamalak ya həssas fayl hələ yalnız sabit bir yerdə orada yaşayır.
Bizim ən azı sizin zibil boşaltmaq lazımdır ki, ağır yol öyrəndim
və ya zibil bin həqiqətən faylları silmək üçün.
And olsun ki, siz sağ basın və ya zibil basın nəzarət zaman bilərsiniz
və ya Fayl, Boş Çöp və ya hər hansı seçmək
və həqiqətən zibil bilər və ya, həqiqətən, bu şəkil sonra nə zibil vedrəsi, boş?
Daha heç bir şey. Belə ki, heç bir şey həqiqətən disk üzərində olur.
>> Biz yalnız müvəqqəti sapmaq və yazmaq əgər - I'll yalnız bu geri istifadə edin.
Belə ki, indi hekayə proqramlarının mövcud olduğu olan RAM, doğru dəyişir
siz disk, onlara yayınlıyorsanız isə onlar uzun müddət saxlanılır, burada olan
hakimiyyəti indi üçün gedir belə - və biz gələcəkdə bu geri gəlmək lazımdır -
Gəlin bu kompüter sabit daxili təmsil iddia
çünki geri gün onlar çox disketleri kimi, dairəvi disklər olmaq üçün istifadə.
Bəzi həssas Excel fayl var Belə ki, bu yaddaş bu yığın up bilər
kompüter disk haqqında və mən yalnız eyni ixtiyari 1s və 0s rəsm alıram.
Sizin zibil qutusuna kimi fayl sürükleyin zaman və ya bin yeniden bilər,
Apple və Microsoft yalnız qərara çünki sözün heç bir şey olmaz
zibil bilər və zibil bin həqiqətən yalnız müvəqqəti tutucu edir.
Bəlkə nəticədə OS sizin üçün boş, lakin adətən, o, heç bir şey deyil
yer, həqiqətən aşağı etdiyiniz ən azı qədər.
>> Lakin, boş zibil və ya boş zibil bin getmək zaman,
eyni, heç bir şey bu şəkil olur.
Olur ki, bütün başqa yerdə kompüter deyil, masa, bir növ var.
Bu, resume.doc, deyək ki, deyir ki, bir az istifadə etmək hesabatı kimi sort var
sizin sabit disk yeri 123 yaşaya üçün istifadə bir Microsoft Word faylı sizin CV,
deyil yaddaş və RAM ancaq sabit disk,
və 456-da yarım yamalak JPEG yaşayır və Excel faylı 789 və ya yerdə yaşayır.
Həqiqətən, zibil və ya zibil bin boşaltma ilə silin zaman,
Bu şəkil dəyişmir. Sabit üzrə 0s və 1s yerdə getmək yoxdur.
Amma bu cədvəl, növ bu kiçik verilənlər bazası, dəyişiklik yoxdur.
Faylı bir mənada silindi sanki sizin CV silmək, o deyil,
ki şey sabit yaşadığı lakin bütün kompüter unutmaq deyil.
Sizin CV və ya digər faylları hər hansı bəstələmək ki 0s və 1s hələ bütöv var.
>> Yanlışlıkla bu idi əgər, qeyri-sıfır ehtimal hələ var
Norton Utilities və ya bir kommersiya proqram istifadə edərək, məlumatları bərpa edə bilər ki,
həyat onun məqsədi 0s və növ yetim ki 1s tapmaq
burada unudulmuş ancaq geri data ala bilərsiniz ki, burada qaldı.
Yoxsa polis və ya FBI ilə məhkəmə müstəntiqləri həqiqətən sabit edəcək
və həqiqətən, 0s və JPEGs kimi baxmaq, Excel faylları kimi baxmaq 1s nümunələri axtarmaq
və onlara kompüter orada unutmuşdur, hətta bu yolla bərpa.
Belə ki, biz gələcəkdə müzakirə edəcəyik kimi, data silmək üçün həqiqətən yeganə yolu,
ilə fayl və ya sabit disk ovucu və ya silmək üçün -
Siz həqiqətən 0s və 1s xilas edə bilməz
başqa bir gigabyte sabit başlamaq istədiyiniz çünki
siz daim silmə halda, siz bir MB sabit disk ilə başa istədiyiniz
sanki 0s və 1s.
Siz, həqiqətən, sizin musiqi əhatə etmək istəyirdi əgər Beləliklə, siz nə edəcəyik
və əsas problem hələ 0s və disk haqqında 1s var ki?
Mən sizə fiziki cihaz qırmaq ki gesticulating kimsə görürük. Bu işləyəcək.
Bir bahalı həll növü var əgər [gülüş] Lakin nə daha məqsədəuyğun olardı?
Bəli. >> [Tələbə] Onlardan yazır. >> Nə ilə yazır? >> [Tələbə] Digər məlumatlar.
Digər data. Siz yalnız 0s və ya 1s və ya bütün 0s, bütün 1s ilə disk üzerine bilər.
>> Və proqram bəzi nə həqiqətən var.
Siz proqram almaq və ya hətta pulsuz proqram əldə edə bilərsiniz
və hətta az belə Windows, bu gün Mac OS üçün inşa
təhlükəsiz silmək imkanı var.
Bu gün bütün run ev istəyirsinizsə Əslində, bir Mac və bu əgər
siz var, sizin zibil bəzi məhsulları, siz Secure Boş Çöp edə bilər
hansı dəqiq ki, yoxdur.
Əksinə burada yalnız sil faylları çox, bu, 0s və 1s burada silmək deyil
deyil, yalnız 0s və nöqtə, nöqtə, nöqtə, məsələn, hamısını dəyişir.
Belə ki, gələcək psets biri həqiqətən qəsdən data bərpa etmək olacaq -
biz kampus insanlar, yerləri və şeyi qəbul etdiyiniz fotoşəkillər
üçün biz bir digital kamera yaddaş kartı məhkəmə image etmək lazımdır
olan dəqiq eyni fikir - və həqiqətən tapmaq üçün etiraz olacaq
sizin sabit JPEGs təmsil nümunələri,
çox olan e-poçt ki, keçmiş tələbə kimi mən bir neçə həftə əvvəl oxumaq etdi
onun bacısının fotoşəkillər bərpa.
Niyə biz burada 5 dəqiqə fasilə etmək yoxdur və biz yaddaş daha regroup lazımdır.
Belə ki, burada şeyi bir az ağıl əyilmə almaq yerləşir, lakin bu çox güclü bir addım
bu bütün daha çox dərk doğru.
Burada pointers.c adlı bir proqramdır.
Bu gün örnek kod biridir.
Ilk bir neçə xətləri, 22 vasitəsilə 19, biz edirik bütün GetString kimi bir şeydir edək ki,
və s bu saxlanılması, bir ünvan qaytarılması.
Bundan pset hətta 3 istəyirsinizsə lakin pset 4 və
yerləşir, siz özünüz off bu təlim təkərlər etmək başlaya bilər
strings artıq mövcud olan iddia etmək heç bir səbəb yoxdur.
Əlbəttə ki, yalnız char * deyərək başlamaq üçün OK.
>> Bir kənara kimi, online istinadlar və kitablar siz tez-tez dəyişən yanındakı ulduz ola bilər.
Siz hətta hər iki ətrafında fəzalarda görə bilərsiniz.
O Bütün funksional doğru.
İndi, baxmayaraq ki, biz super aydın etmək üçün bu yanaşma standartlaşdırmaq lazımdır
ki, char * xarakter göstərici deyən kimi.
Bu data növüdür.
Və sonra dəyişən adı bu halda s.
Beləliklə, biz bir string kazanılmış etdik və s adlı etdik.
Və sonra aşağı burada həqiqətən kələk bir az edirəm ki, görürsünüz.
Bu super sadə növ olan göstərici hesab adlanır.
Bu yalnız göstəricilərinə nömrələrin əlavə və çıxmaq deməkdir.
Amma bu həqiqətən işləyir.
Bu proqram yəqin belə sonunda nəticəsində həmin xətt üzrə simli s 1 xarakterli yazdıran -
Məhz buna görə də biz bu hara getdiyini, korlamaq göstəricilərinə etmək göstəricilərinə run, mənə daxil zoom imkan bilər
İndi HELLO və növü daxil kimi bir şey mənə növü bildirin
və line 1 xarakterli görüntüler.
Up ikinci əvvəl qədər, biz kvadrat mötərizə notation bu edərdi.
Biz loop üçün istiyorum və biz s printf etmək istədiyiniz [i] və biz təkrar və yenidən bunu istədiyiniz
hər xətti sonunda backslash n.
Lakin bu proqram fərqlidir. Bu proqram sözün hesab istifadə edir.
Bəs burada olub?
Bu loop hətta icra əvvəl, ilk növbədə, nə, yalnız aydın olmaq, s əslində?
S var? >> [Tələbə] bir ünvan. >> Bir ünvan.
>> Və salam halda, bu ünvan var ki, söz ilk xarakter olan h.
Belə ki, s, bu misalda, h ünvan.
Belə ki, s nə deməkdir + i?
Yaxşı, i loop üçün 0 başlayır. Biz dəfələrlə etdik.
Mən yəqin ki, simli uzunluğu qədər getmək niyyətindədir.
Beləliklə, bu loop ilk iteration haqqında, i açıq-aydın 0 deyil.
Deyil, s +0- ki, açıq-aydın yalnız s var - bu ifadə s + i deyib.
Belə * burada s nədir?
İndi bir az fərqli şəkildə star istifadə edirik.
Mənə davam və biz t və s surətləri söhbət tamamlayın çünki t xilas edək.
İndi biz yalnız s cəlb hekayə demək istəyirəm.
Əvvəl idi çox kimi və bu anda növü simli sonra, bizim dünya baxır
yalnız s h ünvan saxlanılması və ümumiyyətlə salam simli da işarə ilə.
İndi * kimi bir xətt varsa (s + i), bu cəhd edək.
Belə * (s + i). Bu 0 çünki mənə bu sadələşdirmək ki, bu * (s +0) edir.
Yaxşı, bir dəqiqə gözləyin. Daha sadələşdirmək. Bu * (s) təşkil edir.
Yaxşı, indi parantez axmaq növü var, indi yalnız bunu * s bildirin.
Beləliklə, bu loop, qeyd edir ki, xətt, 26 ilk iteration-ci ildə,
bu çap olduqca çox bərabərdir.
* S data type nədir?
Ulduz, s özü yanında olmaq olur Bu baxımdan, çünki
lakin daha dəqiq desək, biz artıq, s bəyan çünki
biz artıq bir dəyişən yaratmaq deyilik, line 26 char * heç bir qeyd var
söz simli heç bir qeyd yoxdur, biz yalnız, s adlı dəyişən istifadə
indi ulduz mənası çaşdırıcı, admittedly qədər müxtəlif və çıxır.
Burada * s var nə s ünvan və çap getmək deməkdir.
Beləliklə s burada * s - sort oluklar və Nərdivanlar kimi, bu arrow edin - burada.
Belə ki, bu * s.
>> Belə ki, xətt 26 ki loop ilk iteration nə çap olur?
Mən bir xarakter üçün tutucu olan% c, çap
sonra yeni bir \ n. * (S + i) i 0 yalnız bu deyil yerləşir.
Belə ki, nə char mən% c üçün yer yoxdur? H.
Bu hara getdiyini yəqin bilərsiniz - - loop növbəti iteration ildə
növbəti iteration i açıq-aydın 1, belə ki, bu vasitə s +1,
İndi ulduz demək lazımdır, çünki sonra indi parantez lazımdır
yaddaş ünvan s +1 gedin.
S nədir? Vaxt geri gəzmək və bu arrow indi həqiqətən hər hansı ne'mətlərini bunu deyil demək edək.
Bu sayı 123 saxlanması demək xüsusilə edək
Bu simli başlanğıc hello, bu ünvan 123, çünki bu s 124, və.
Mən s +1 dedi alıram zaman ikinci iteration haqqında ki, 123 +1 deyən kimi
başqa 124 kimi tanınan, char ikinci iteration çap olur nə belə?
Yaddaş ünvan 124 at E.
Burada almaq əvvəl Sonra + yenidən, 125, 126, 127 və bu loop təşəkkürlə dayandırır
Mən çox yüksək saymaq deyil əmin etmək strlen kullanıyorum çünki.
Belə ki, çox deyil.
Yenə, bu, bir həftə əvvəl etdiyi kimi, baxmayaraq ki,.
Biz də bunu istəmirəm baxmayaraq mənə line aşağıda yazın edək.
Bu artıq eynidir.
>> Belə ki, həftə üçün zəng etdiyiniz kimi, bir string olsa, s həqiqətən char * edir.
Biz super anal olmaq istəyirəm əgər, bu spesifik xarakterli yazmaq həqiqətən müvafiq deyil
Bu rəqəmli ünvanları və bu ulduz operator istifadə İTH yerdə,
amma açıq, bu, yalnız çox təmiz. Beləliklə, bu, pis deyil.
, Heç bir səbəblə burada line 27 bunu dayandırmaq, lakin 26 funksional eyni
və biz bu günə qədər müzakirə etdik ki, məhz səbəblərdən funksional eyni.
Və nəhayət, 29 yalnız yaxşı təcrübədir.
S pulsuz Zəng indi GetString sizə verdi ki, yaddaş geri ötürür o deməkdir ki,
yenidən, mən həftə GetString, Bazar ertəsi qeyd olunduğu kimi, çünki
kodunuzu daxil bir səhv təqdim edilmişdir.
Həftə üçün kodu yaddaş sızıntıları var
vasitəsi yaddaş üçün GetString xahiş etdik lakin geri verilməsi heç vaxt etdik.
Və qəsdən pedaqoji bizim seçilmişdir ki,
bu erkən düşünmək yalnız çox, çünki.
Amma indi biz daha simmetriya lazımdır.
Yaddaş üçün kompüter soruşsanız, kimi, GetString olduğu
kimi işə, malloc üçün yəqin ki,
siz pset 4 gələcək üçün pulsuz bu cür yaddaş artıq olmalıdır.
Bu int n deyərək fərqli edək.
Siz GetString zəng çünki bu azad ehtiyac yoxdur
və malloc zəng etməyib.
>> Biz nəhayət görürsünüz və hətta, GetInt adlı əgər
Həqiqətən integers ətrafında keçə bilər, çünki GetInt üçün yaddaş ayrılması deyil
və biz həftə məşğul olduğunuz yalnız yolu üzüb gedirdi və chars.
Həqiqətən onlar çox chars ilə concatenation edirik çünki Strings baxmayaraq, xüsusi var.
Belə ki, onlar chars və üzüb gedirdi və ints yalnız müxtəlif istəyirik və s.
Ancaq biz əvvəl uzun qayıda bilərsiniz.
Hər hansı bir sualınız sonra göstəricilərinə bu əvvəlində haqqında? Bəli.
[Işitilemez tələbə sual]
Ah, çox yaxşı sualdır.
C həqiqətən sizin üçün bir neçə biri olan, rahat
bu ölçüsü data type edir nə üçün rəqəmlər
və sonra üçün vurma bu cür edir.
Demək olar ki, həmişə bir char 1 byte, çünki bu, chars halda əlaqəsiz deyil
bu yalnız çalışır.
Lakin müzakirə naminə həqiqətən integers çap edilmişdir
və siz bəzi dəyəri nin tam da işarə edilmişdir ki, çap çalışır
bir int 4 bayt edir * i yalnız çünki eyni + 4 etmək lazımdır deyil.
Pointer hesab C və compiler sizin üçün bütün riyaziyyat etmək deməkdir.
Haqqında qayğı bütün insan mənada cür hesablanması edir. Bəli.
[Tələbə] Siz loop üçün daxili bir string bəyan etsəniz, daha sonra azad etmək lazımdır?
Sual Yaxşı.
>> Siz loop üçün bir simli daxilində elan etsəniz, daha sonra azad etmək lazımdır?
Siz yalnız GetString ya malloc ilə ayrılması pulsuz yaddaş lazımdır.
Yalnız bir şey istəyirəm demək əgər - bütün kodu bağlı mənə indi qıvrım aşırma qoymaq bildirin.
Bu kimi buggily olsa bir şey, əgər, char * t = s,
t malloc ya GetString hər hansı qeyd daxil deyil, çünki siz pulsuz t ehtiyac yoxdur.
Siz bunu əksinə varsa, GetString, sonra bəli, pulsuz t lazımdır.
Və əslində, bunu etmək üçün yalnız imkanı daxilində eyni məsələ, bu loop içərisində indi
biz keçmişdə müzakirə etdik.
Əks halda, yaddaş ayrılması yaddaş ayrılması, yaddaşlı ayrılması olarıq
və proqramın sonunda ki, loop kənarda edirik, çünki
t mövcud deyil, lakin əməliyyat sistemi bildirib heç
artıq yaddaş lazım deyil ki.
Və uzun əvvəl, pset 4 və ya 5-biz Valgrind adlı proqram ilə təchiz edəcəyik
olan, bu gizli interface qədər var ki, ruhunda gdb kimi
amma həyat onun məqsəd sizə kömək edir.
Və Valgrind gələcəkdə proqramları axtarış bir proqram
yaddaş sızıntıları axtarır, GetString ya malloc olan olub,
olan biz kimi çox CS50 kitabxana istifadə dayandırmaq kimi daha çox istifadə edəcəyik.
Nəhayət, indi söz sort və nəzəriyyəsi əqli model sort var
bu broken proqram həll olan.
>> Beləliklə, bu broken proqram, svop, svop daxilində işləyir
əsas x və y, geri keçmişdir, çünki bu, həqiqətən, əsas işləyib heç
və bu belə danışmaq, dəyərləri tərəfindən qəbul olunmuşdur.
Onlara surəti dəyişdirmək verilmişdir.
Svop sonunda, bir və b həqiqətən mübadiləsi edilmiş,
lakin əlbəttə biz bazar ertəsi müzakirə kimi x və y, olmayıb.
Mən burada həqiqətən həll ki, burada yaşıl təklif.
Və həqiqətən, məni yalnız ardıcıl olmaq mənim ulduzları hərəkət imkan
baxmayaraq, yenə funksional bu məsələ deyil.
Zaman və nə üçün məsələ deyil, gələcək həftə biz izah edəcəyik.
Belə ki, yaşıl, indi bir həll edir.
Mən bu ulduz bütün çünki Açığı, bu, bütün çox Messier görünür.
Mənə bir şey qeyd edək.
Bu int * Bir və int * b deyir burada ən line
həmişə olduğu kimi əsaslı eyni şey edir.
Bu dəyişdirmək üçün 2 dəlilləri və ya parametrləri elan edir
bir int göstərici olan ilk adlandırıb
olan ikinci b adlı int göstəricisidir.
Bu baxımdan yeni olan tək şey bir ulduz var olmasıdır.
>> Ki, nə deməkdir? A int deyil, b bir int deyil.
A int üçün ünvan və b müxtəlif int və ünvanı.
Mən C confusing olur etiraf yerləşir Down burada bu.
İndi biz bir ulduz istifadə etdiyiniz, lakin bu çərçivədə müxtəlif mənası vardır.
Biz burada kimi biz göstəricilərinə elan deyilik, çünki
burada şeyi dereferencing olunur.
Belə ki, texniki, svop daxilində birinci, ikinci və üçüncü xəttinin bu çərçivədə ulduz
yalnız deməkdir dereference operator, orada getmək edir.
Mənim barmaq h üçün ok sonra, Belə ki, yalnız kimi
* Bir deməkdir ki ünvanına getmək və mənə var ki, int tapa bilərsiniz.
* B vasitələri ünvan getmək və orada nə mənə keçir.
Belə nin bazar ertəsi indi çərçivəsində bir yığın istifadə şəkil redraw edək,
hansı alt bir əsas olacaq
olan üst bir, svop olacaq
bizim dünya bu kimi, yalnız bazar ertəsi kimi görünür ki,.
Burada əsas istifadə edir ki yaddaş yığın edir.
>> Proqram yalnız 2 dəyişənlərin olduğunu Bazar ertəsi Xatırladaq,
bir x və y adlı bir adlanır və orada nömrələri 1 və 2 qoymuşdu.
İndi kimi dəyişdirmək zəng zaman bazar ertəsi etdi
Mən bu proqramı qırmızı versiyası istifadə əvvəllər zaman, hansı ki, bu kimi görünür
I 2 parametrləri, bir və b var və biz burada və burada nə yazdın?
Yalnız 1 və 2, sanki x və y nüsxə.
Bu gün biz dəyişir.
Bu gün əvəzinə ints keçən bir və b biz 2 ünvanlar keçmək olacaq.
Bu URL ints qeyd etmək nə, ancaq bu URL özləri ints deyil.
Onlar ünvanları var. Bu əvəzinə poçt ünvanı kimi.
Belə ki, indi biz yalnız özümü ekranda bir az daha ətraflı vermək lazımdır.
Bütün gün oldu bu mənim kompüter yaddaş.
İndi biz bir ixtiyari nömrələmə sxemi lazımdır.
Belə ki, bu yaddaş ünvan 123, 124 ki, yalnız təsadüfən, yalnız deyək.
Gəlin məhz bu 125 demək, bu, 126 və s, lakin tamamilə əsassız deyil.
Biz yalnız mənim yaddaş bəzi nömrələmə sxemi lazımdır.
Belə ki, indi mən, həqiqətən, x və y keçmək zaman, mən x və y keçmək niyyətində deyiləm;
Mən x və y, belə ki, danışmaq üçün poçt ünvanı keçmək gedirəm
belə nə burada və burada saxlanılan olur 1 və 2 deyil ki,
Mənim small mətn bilərsiniz ancaq, nə burada və burada qəbul olur?
[Işitilemez tələbə cavab] >> Exactly. 123 bura qoymaq olur və 124 bura qoymaq olur.
>> İndi, çünki üst qədər burada bu çox ilk line şəkildə star istifadə
mənim proqram yalnız onlar açıq-aydın integers olmalarına baxmayaraq ki, 123 və 124 bilir
hər hansı bir insan hiss edə bilər ki, onlar ünvanları rəqəmli ünvanları kimi təfsir olunmalıdır.
Onlar ints və özlərini deyil, onlar, ünvanlarını edirik
Mən aydın şəkildə orada ulduzları qoymaq çünki ki.
Belə ki, indi nə burada baş faktiki kodu mənim birinci, ikinci və üçüncü line?
Nin şəkil qalan cəlb edək.
Tmp yalnız bazar ertəsi idi kimi. Tmp haqqında xüsusi bir şey.
Bu, sadəcə bir yerli 32 bit dəyişən və daxili ki, mən yəqin * bir dəyəri saxlanılması edirəm.
İndi yalnız o, həmin tmp = a, burada nə qoymaq olar? >> [Tələbə] 123.
123. Amma mən edirəm nə deyil.
Mən tmp dedi alıram = * a. Star vasitəsilə getmək.
Belə ki, burada, 123-dir. Necə getmək yoxdur? Bir arrow var kimi Pretend.
Bəli, orada, 1-dir. Belə görünür, tmp nə saxlanılır olur? Yalnız 1.
Belə ki, başqa sözlə, tmp * bir * vasitəsi bir anda olduğunu ünvan getmək deyil,
olan yəqin 123-dir.
>> OK, burada biz yeri 123 var ki, sayı 1 bax
Mən orada 1 nömrəli qoymaq üçün gedirəm.
İndi line 2-nə etməliyəm, * a = * b?
Bir nə indi, çünki bu bir az daha cəlb edir? Bu 123 var.
Belə * bir haradadır? Sağ əvvəl oldu. Belə ki, orada getmək. Okay.
İndi nəhayət, sonra nəhayət, bu, ümid edirəm ki, mənada başlayacaq
* B b nə deməkdir? 124. Mən 2 olan, getmək lazımdır.
Mən burada nə qoymaq bilərəm?
* B * bir gider çünki 2 burada gider. Mən bunu edəcəyik.
Və artıq biz çox yaxın olduğunu, bəlkə də görə bilərsiniz
ilk dəfə doğru bu axmaq, sadə probleminin həllinə
indi biz hələ x nə bir xatirə, çünki,
biz, y, etiraf, 2 nüsxədə var
lakin 3 satır indi * b deyir.
Belə ki, burada b var. * B vasitəsilə getmək. Belə yeri 124 haradadır?
Burada yəqin var. Mən burada nə qoymaq bilərəm? Aydındır ki, tmp.
Belə ki, indi bu yoxdur. Mən burada 1 burada və 2 var.
İndi nə bütün bu ki, 123, 124 və 1 haqqında?
Qısa svop qaytarır, bu yaddaş itirilmiş kimi yaxşı
kimi tezliklə svop yekunları, əməliyyat sistemi kimi çünki
gələcəkdə daha yaddaş istifadə üçün pulsuzdur.
Bu sözdə yığını altında yalnız əsas xatirəsinə ətrafında sərvətdən.
>> Və nəhayət, biz indi bir iş versiyası var.
Mənə swap.c daxil və aşağıdakı qeyd edək.
Proqramın üst Mən prototip olmaq değiştirdik int * Bir və int * b.
Mən pis olan qırmızı, yaxşı olan yaşıl getmək dəyişdi yalnız Belə ki,
Mən bu gün bu ulduz əlavə olunur.
Amma sonra aşağı burada özünü dəyişdirmək mən surəti idi, yalnız slayd idi nə yapışdırıb.
Mən burada bir ulduz var, burada star - ki, prototip oyunları -
və sonra bu şeyi indi tmp başqa ulduz var
müvəqqəti dəyişən istifadə, çünki yeni bir şey var var.
Mən yalnız bir int müvəqqəti saxlama lazımdır.
Beləliklə, biz bir ulduz ehtiyac yoxdur.
Biz özbaşına sərhəd bu cür keçmək bilər ki, biz yalnız ulduz lazımdır
mənim kompüter yaddaşında bu 2 çərçivəsində arasında.
Amma son bir şey dəyişdirmək üçün var, və siz artıq glimpsed ola bilər.
Hansı xətt indi açıq-aydın müxtəlif edir? >> [Tələbə] & x.
>> Bəli, belə ki, 25 mən işləmək üçün bu dəyişiklik lazımdır kodu son xəttidir.
Bir həftə əvvəl və hətta bazar ertəsi line 25 Bu kimi baxdı, x və y, dəyişdirmək
siz demək əgər, çünki bu yalnız qırıldı svop (x, y)
siz, sonra öz şey bunu ki, dəyişdirmək üçün x və y surəti verən
ancaq əslində x və y özü dəyişən heç edirik.
Siz kodu də işareti ilə əvvəl bu xarakterli görməmişəm Belə ki, hətta,
yalnız bir tahmin edir. Bu işareti görünür, nə edir?
[Tələbə] ünvan edir. >> Ünvan edir.
Belə ki işareti mənə x ünvanı vermək deyib.
Olduğu Kim bilir? Bu 123 olmaq olur. Mən qayğı yoxdur. Just me x ünvan verir.
Və y me y ünvan vermək deməkdir.
Və hekayə şəkil ilə mükəmməl uyğun olduğunu nöqtədə bir an əvvəl çəkdi.
>> Mən ilk bu təlim başladı Mən, mənim üçün əlbəttə ki, göstəricilər qəbul edəcəyik
mütləq ətrafında fikrimi kesmek üçün ən ağır şeyi biri idi.
Lakin, biz hər şeyi bu cür oynayan saxlamaq xüsusən, həyata
siz bu super sadə sort üçün qırmaq əgər intellektual problemləri maraqsız
yalnız göstəricilər ilə qarışıqlıq bir çox ətrafında cavab ədəd hərəkət
həqiqətən bu çox əsas mexanika əldə edilə bilər.
Burada bir ünvan var. Ulduz var gedin.
Və ya əksinə, burada bir işareti var. Ünvan həqiqətən nə anlamaq.
Bütün hüquqlar.
Belə ki, bu yaddaş bütün gəlir?
Biz bu şəkil bir neçə dəfə tərtib etdik və mən buna qayıtmaq lazımdır perspektivli saxlamaq
lakin burada kompüter yaddaş təmsil edir
ki, burada bir az daha etiketli bizim Kara Tahta çox var.
Üst mətni seqment proqram ilə bağlı nə təmsil?
[Işitilemez tələbə cavab] >> Bağışlayın? Yenə deyirəm.
[Tələbə] aktual proqramı. >> Faktiki proqramı.
>> Bu 0s və C kodu yazılı sonra tərtib ki, 1s və sonra qaçaraq cingilti Belə
və 0s və 1s başa yaradan yaddaş var tucked olmaq
Siz ikiqat Mac və ya PC bir icon basın zaman, çünki
və ya 0s və 1s disk, sizin sətirinə mario kimi bir funksiyanı çalıştırın
kompüter onları manipulyasiya ki, yaddaş instantly almaq
və daha tez yerinə.
Belə başlatılmış data və uninitialized data, biz bu barədə çox danışmaq olmaz
lakin bu yalnız qlobal dəyişənlər var.
Başlatılmış siz dəyərlər verdi ki, qlobal dəyişənlər deməkdir;
uninitialized siz hələ dəyərlər vermədi ki, qlobal dəyişənlər deməkdir.
Sonra mən tamamilə mənim əl dalğa olacaq bu mühit değişkenleri var
lakin onlar var və istifadəçi adı kimi mağazalar şeylər
aşağı səviyyəli məlumat və digər növ.
Lakin yaddaş nin planının juiciest ədəd yığını və yığın adlanan bu şey.
Daha yığını, aydın olmaq, funksiyaları deyilir zaman istifadə ki, yaddaş
yerli dəyişənlər var zaman
və zaman parametrləri ətrafında orada qəbul olunur.
Ki, bütün yığını olur.
Bu yığın biz danışdıq, lakin yığın istifadə edən bir tahmin etmək deyil.
Yaddaş Bir başqa yığın.
Bu üst burada çəkiləcək olur, ancaq bir ixtiyari şəkilli konvensiya var.
Kim yəqin həftə yığın olan yaddaş istifadə edir?
Bu texniki siz lakin dolayı var. >> [Tələbə] GetString.
GetString və malloc. Belə ki, burada əsas fərq var.
>> Siz yaddaş lazımdır, yalnız bir dəyişən bəyan edir ki, son bir neçə həftə bilirik.
Yaddaş çox ehtiyac varsa, sağ daxilində funksiyası bir sıra bəyan edir.
Siz yerli daxili funksiyaları dəyişənlərin elan Lakin əgər biz qarşıya saxlanılır sorunu edir
kimi tezliklə funksiyası yekunları kimi, nə yaddaş və o dəyişənlər olur?
Bu yalnız sort sağ, sizin artıq var? Bu yalnız konseptual növ yox.
Bu açıq-aydın, fiziki hələ, ancaq artıq istifadə etmək hüququ var.
Həyat funksiyaları yazmaq istəyirsinizsə, bu açıq-aydın problemlidir
həqiqətən yaddaş ayrılması və dərhal geri vermir ki.
Point halda: həyatında GetString məqsədi əvvəlcədən heç bir fikir var ki,
necə klaviatura ilə yazın gedirəm bir simli böyük,
lakin bu David ya salam keçirilməsi yaddaş ayrılması etmək üçün var
istifadəçi daxil yazdığınız bilər ki, ya bütün esse
Belə GetString malloc istifadə edir.
Malloc səbəbdən heç yığını istifadə edilməlidir;
əvəzinə yığın adlanan bu şey istifadə edir.
Yaddaş haqqında müxtəlif bir şey yoxdur. Bu sürətli və ya yavaş və ya bu kimi bir şey deyil.
Bu fərqli yeri yalnız fiziki deyil.
>> Amma qayda olduğunu yığın ayrılmış olan yaddaş
zəng qədər uzaq qəbul heç vaxt - bir tahmin etmək - pulsuz.
Əksinə, hər hansı bir yaddaş yalnız bir sıra elan yığını haqqında xahiş
və ya həftə məşğul olduğunuz kimi bir dəyişən elan
ki ismarıcları yığını qədər çatır.
Və o rarer hallarda vaxt böyük 90% çalışır, ancaq
siz yaddaş ayrılması və onun ətrafında saxlamaq istədiyiniz
sonra malloc kimi bir funksiyası istifadə etmək lazımdır.
Yoxsa öz növbəsində malloc istifadə edən GetString kimi bir funksiyası istifadə.
Bu qırmaq və sonra Binky bir peek bilər harada görmək edək.
Biz gələcəkdə də ki, geri qayıtmaq lazımdır.
Burada ilk 2 xətləri nə bir super sadə proqram var?
İngilis dili, kod bu ilk 2 xətləri daxilində əsas nə etməliyəm?
[Işitilemez tələbə cavab]
Diqqətli. Mənə x və ya y ünvanı vermir.
[Tələbə] ints üçün göstəricilər verir. >> Yaxşı. Integers mənə 2 göstəricilərinə verin.
Başqa sözlə, mənə bu gün rəsm saxlamaq yaddaş 2 chunks vermək
baxmayaraq mən meydan kimi, indi silinə.
Mənə yaddaş 2 chunks verin, bir x adlı bir y çağırıb -
əvvəllər mən onları s t adlanır - və yaddaş ki, yığın növü nədir?
Bu ünvan saxlamaq olacaq.
Bu növü int * var.
>> Belə ki, bir int üçün ünvan nəhayət, x yaşayacaqdır
bir int üçün ünvan nəhayət, y yaşayacaqdır
lakin əvvəlcə, x və y daxilində nə var? Kim bilir? Zibil dəyərlər.
Bu göstəricilər ilə heç bir əlaqəsi yoxdur.
Biz orada həqiqətən nə bilir orada bir şey qoymaq yoxsa?
İndi x. Burada olur? X bir pointer Çünki indi legit edir. Bu int * var.
Mən x yaddaş bəzi yığın üçün ünvan bilər deməkdir.
Malloc nə geri edir? Mükəmməl, o, ünvanlarını qaytarır
yaddaş bütün yığın ilk byte və ünvanı.
Bu yəqin cihaz da, məsələn, neçə bayt ayrılması olunur?
Bir int həcmi nedir? 4.
Siz həftə 1 geri düşünüyorsanız, bu, həmişə yadda mühüm super deyil
bu halda o, 4 bayt bilmək faydalıdır.
Belə ki, bu yığın 4 bayt üzrə bölüşdürülməsi olunur
və özbaşına mənə ilk bir ünvan qaytarılması oldu.
İndi x nə edir?
A * x = 42 nə edir?
Biz bir zibil dəyəri ilə bu kimi görünür hansı x, var, hekayə bu nöqtədə edin
bu artıq xətt 3-I 4 bayt ayrılan sonra, indi bəzi zibil dəyəri y edir.
Bu şəkil mahiyyətcə bu kimi görünür.
Bu ixtiyari ünvan 123 əgər və ya daha dəqiq desək, bu, bizim hekayə indi kimi görünür.
* X = 42 indi nə deməkdir? Ünvan 123 getmək və sayı 42 qoymaq deməkdir.
Biz strings məşğul deyilik, çünki bu xətlər çəkmək lazım deyil.
>> Mən bu kimi yazılı və yalnız nümayiş xatirinə olmalıdır
Bir int tipli 42, 4 bayt yer çox tutur.
Belə ki, orada baş verən nə, ancaq bir problem indi yoxdur.
* Y = 13. Burada nə olacaq?
Bu problem bizim sadələşdirilmiş dünyada * y yalnız y də ünvanına getmək deməkdir.
Y nedir? Bəzi zibil dəyəri.
Belə ki, zibil dəyəri kimi dəli bir şey 5551212 edir ki, fərz edək.
* Y vasitələri 5551212 müraciət gedin.
Yəni burada artıq kimi. Bu, məsələn, mövcud deyil.
Belə * y burada 13 çəkmək çalışıram 13 vasitəsilə alır. Bu mövcud deyil.
Mən yazı taxtası seqmentində aştınız. Mən nə etməliyəm?
Mən yaddaş qoymaq çalışıram Çünki sirli mesaj seqmentasiya günah
mövcud deyil ki, bir yerdə 13 kimi bir dəyəri.
Proqramın qalan deyil ki nöqtə qədər tamam, lakin iş bilər.
Belə ki, bu hekayə izah edək.
Biz ki, hex danışıb sonra qayıda bilərsiniz.
Bu geri Binky adlanan bu şey ilə bağlamaq edək
olan geri, claymation oynayan evdə oturan Stanford professor
məhz həmin proqram hekayə demək.
Bu, sadəcə uzun təxminən 3 dəqiqə var. Burada Binky var.
[Video kişi natiq] Hey Binky, ardınca gedən. Bu göstərici əyləncə üçün vaxt var.
[Binky] Nə olub? Göstəricilər haqqında məlumat əldə edin? Oh, goody!
[Kişi natiq] Bəli, başlamaq üçün, biz bir neçə göstəricilərinə lazım olacaq danışarlar.
>> [Binky] Okay. Bu kod integers qeyd edə bilərsiniz 2 göstəricilərinə ayırır.
[Kişi natiq] Okay. Yaxşı, mən 2 göstəricilərinə görmək, lakin onlar bir şey işarə etmək görünmür.
[Binky] doğru. İlkin göstəricilər bir şey qeyd etmir.
Onlar qeyd şeyi pointees çağırdı və onlara müəyyən bir ayrı addım deyil.
[Kişi natiq] Oh, sağ, sağ. Hesab edirəm ki, bilirdi. Bu pointees ayrı.
Er, belə necə bir pointee ayrılması edirsiniz?
[Binky] Okay. Bu kod yeni tam pointee ayırır və bu hissəsi x onu qeyd etmək edir.
[Kişi natiq] Hey, daha yaxşı görünür.
Belə ki, bir şey etmək. >> [Binky] Okay.
Mən dereference göstəricisidir x onun pointee daxil sayı 42-saxlamaq üçün yatıracağız.
Bu oyun mən dereferencing mənim sehrli wand lazımdır.
[Kişi natiq] dereferencing Sizin sehrli wand? Bu harika.
[Binky] Bu kodu kimi görünür. Mən sayı qurmaq və bilərsiniz ... [Səs yaratma]
Baxmaq [kişi natiq] Hey, orada gedir.
Belə x bir dereference edir, ox onun pointee daxil olmaq üçün aşağıdakı
bu halda orada 42 mağaza.
Hey, digər göstərici, y vasitəsilə 13 saylı saxlamaq üçün istifadə edin.
[Binky] Okay. Mən y burada artıq getmək və 13 saylı qurmaq almaq lazımdır
və sonra yalnız dereferencing və çubuq almaq ... [Cızıltı səs] Whoa!
[Kişi natiq] hey Oh ki, işləmədi.
>> Binky De, mən y dereferencing yaxşı bir fikir olduğunu düşünmürəm
bu pointee yaradılması ayrı bir addımdır, çünki
və biz heç bunu düşünmürəm.
[Binky] Hmm, yaxşı bir nöqtəyə.
[Kişi natiq] Bəli. Biz göstərici y ayrılan amma pointee qeyd etmək müəyyən vaxt.
[Binky] Hmm, çox müşahidəçi.
[Kişi natiq] Hey, siz Binky, orada yaxşı arıyorsanız.
Bunu düzeltmek olar ki x eyni pointee üçün y bal? >> [Binky] Sure.
Mən göstərici təyinatlı mənim sehrli wand istifadə edəcəyik.
[Kişi natiq] əvvəl bir problem olacaq ki?
[Binky] Xeyr, bu pointees toxunmaq deyil.
Bu yalnız başqa eyni şey qeyd etmək bir pointer dəyişir. [Səs yaratma]
[Kişi natiq] Oh, mən görürəm. X eyni yerə İndi y xal.
Beləliklə, gözləyin. İndi y müəyyən edilir. Bu pointee var.
Beləliklə, siz 13 göndərmək üçün yenidən dereferencing və çubuq cəhd edə bilərsiniz.
[Binky] Ah, tamam. Burada gedir. [Səs yaratma]
[Kişi natiq] Hey ki, baxın. İndi y işləri dereferencing.
The göstəricilərinə bir pointee mübadiləsi, çünki, onlar həm 13 görürük.
[Binky] Bəli, mübadiləsi. Neyse.
>> Belə ki, indi yerlərdə keçid gedir?
[Kişi natiq] göz Oh, biz vaxt həyata edirik. >> [Binky] Amma -
[Kişi natiq] 3 pointer qaydaları Just xatırlayıram.
Sayı 1, əsas struktur bir göstərici var və bu pointee üzərində göstərir.
Lakin göstərici və pointee ayrı-ayrı və ümumi səhv bir pointer qurmaq üçün
lakin pointee vermək unutmaq.
Sayı 2, pointer dereferencing göstəricisidir başlayır və üzərində arrow aşağıdakı
onun pointee daxil olmaq üçün.
Biz bütün Bildiyiniz kimi bir pointee olarsa, bu, yalnız işləri
hansı növ sayı 1 istisna geri alır.
Sayı 3, pointer tapşırıq bir pointer edir və dəyişir
başqa göstərici eyni pointee qeyd etmək.
Belə ki, tapşırıq sonra, 2 göstəricilərinə eyni pointee qeyd edəcək.
Bəzən paylaşım deyirlər.
>> Və həqiqətən var hamısı. Indi Güle güle.
Bu Binky edir. Bu CS50 edir. Gələn həftə görəcəksiniz. [Alqış]
>> [CS50.TV]