[Музика тема] ЗВУЧНИЦИ 1: Привет секого. Добредојдовте назад на секција. Прекрасен ден out-- која е причината зошто, јас сум сигурни, постојат само четири од вас тука а не нашите вообичаени пакет. Јас сум бил болен овој викенд. Па јас немам звездообразования за вас момци. И јас може да започне кашлање страшно во текот на овој. Па само го носат со мене. Одам да навистина се обиде и да добијат Прв преку ова, иако, пред да имаат кашлица напад. Но само да биде лесно за мене малку bit-- тоа е сè што можам да прашате. Значи, нашата програма за раз сегодня само reminder-- вашиот квиз е следната недела. Јас ви кажав ова минатата недела, па тоа не би ве фати исклучи стража. Па јас сум ти потсетувајќи повторно. Следната недела вашиот квиз. За таа цел, следната недела дел ќе биде многу повеќе of-- Ќе се обидам и да работат во некои преглед. Значи, ако вие може да ми помогне од страна на испраќање на мене работи кои вие сте удобно со тоа, дека сте загрижени за, теми кои би сакале за мене за да се покријат, тоа би било одлично. Па јас може да се обидете и да работат нив во нашата секција следната недела или да ви испрати екстра материјал или првично дека вие не би можеле да добијат на друго место. Да! Повеќе луѓе се доаѓа! Мислев, никако не можев да го правам тоа лошо последните недела, дека никој не сака да се врати? Јас сум исплашена. Па од друга три работи дека ние сме ќе одат над се редирекција, датотека I / O, и после покажувачи и динамичка меморија. Сигурен сум дека вие сте сите супер возбуден околу pointers-- омилена тема на секого, така едноставна да се разбере. Сигурен сум дека сте момци сите добив тоа, нели? Па првите нешта прво, redirection-- ова е во основа само начин да се контролира како можете влез работите во вашата програма, како можете излез работите од својата програма. Главните начини на кои можете момци се во интеракција со тоа е само преку стандарден излез со вашиот печатење екран тука. Но, постојат начини да се pipe-- како што гледаме тука е еден од нашите words-- вид на цевка дека информации или дека податоците во датотека од датотека. Тоа е само различни начини на добивање на работите во вашата програма и надвор од вашата програма, наместо само да ги печати на овој екран или внесување работи од командната линија. Па првата е малку поголема од каретката. Така output-- тоа само отпечатоци излез до датотеката, наместо на вашиот екран. Значи, ако сте имале нешто што печатени "Здраво, свет!" на екранот, ако го стави, наместо до output.text, дека создава оваа датотека наречена output.text. И кога ќе го отворите, тоа ќе каже "Здраво, свет!" во таму. Ова може да биде супер корисни ако имате еден тон грешки всушност, како што гледаме во оваа. Ако го направите две карета, тоа ќе печати пораки за грешка. Значи, ако имате проблем со составување, што има голем број на грешки а ти си добивање заглавени во обидот да се движите низ во вашиот командната линија преку сите нив, можете да само да ги печати во датотека, отвори таа датотека, така што ќе да се движите низ нив полесно. Јас всушност се користи дека многу кога бев дебагирање ми 181 psets за машинско учење. Па тоа може да биде супер корисни подоцна. Тоа е исто така корисни ако имате програма дека можеби е генерирање на библиотека или генерирање на некои сет на стрингови, и вие треба да биде во можност да се види дека тоа е да ги генерира правилно. Ова е начин да го направите тоа. Значи, ако сте ги печати во датотека, можете полесно да ги испита, нели? Наспроти се обидува да дојдете преку вашиот командната линија. А потоа една работа е да се напомене е во тоа што само со поголема од карета, ако пишувате до датотека која веќе exists-- па како ако ние трчаше оваа прва време, ние ја стави output.text, и тогаш имавме втората програма дека печатени тоа како програмата два и направи поголема отколку да output.text, Таа ќе ги запише that-- така презапишете она што беше некогаш во таа датотека да се започне. Значи, ако сакате да го додаваат на датотека, како што гледаме тука, можете само да направите две поголема од знаци. И тоа ќе се додаде на тоа. Тоа нема да го презапишете. Значи, ако ви треба да се кандидира повеќе програми и вид задржи пратите на она што сите од нив се се враќа на вас во датотека, тоа е начин да го направи тоа. Ако не ви е грижа што е во вашата датотека и тоа е дозволено да бидат препишани, вие само може да се користи еден поголем од. Дали тоа се направи смисла на сите? ПУБЛИКАТА: Како точка коса црта здраво поголема од излезните точки на текст, како и двапати, тоа само ќе го прикажува само на излез точка текст вториот time-- ЗВУЧНИЦИ 1: Токму така. Значи тоа ќе основа, само целосно презапишете она што беше таму да почне. Ако оваа датотека тука, output.text веќе постои, во основа она што ќе се јавите дека повторно со еден поголем од што само може да се мисли на тоа како што е како да го замени на датотеката. Како кога сте заштеда на Word документ и вие зачувате како, и да се задржи на истото име, и тоа целосно it-- презапишува ова е истиот вид на работа. Секој имате било какви прашања во врска со само произведување на датотека? Страшни. Па очигледно, ако се јават на стрелка насока, тоа може да се направи влез. Па кога вие момци имаа како Цезар или Visioneer и ти мораше да го внесете нешто, сте имале командната линија аргумент кои, всушност, внесување на неа. Ова е уште еден начин да го направите тоа. Така, наместо на чекање за командната линија, како кога ќе се праша за вашата порака во Цезар или Visioneer, ако сте имале текстуална датотека кој имаше вашата порака, може само да го напишете во тоа. Значи, ако ова беа како точка коса црта Цезар 3 помалку од стрелките на внесување на текст, кој е вашата порака, дека да се кандидира само парична казна. Кога вашиот Цезар програма всушност побарано за влез од страна на корисникот, тоа веќе ќе го имаат, бидејќи сте ја внеле во оваа датотека. Тоа е само уште еден начин. Само обратна од output-- само влез за вашите податоци. А потоа последната е цевка. Така што ова е прилично кул. Поради тоа што ви овозможува да се изведува на излезот на еден програма и го стави како влез за да се друга програма. Јас не знам дали некој од вас игра со дешифрира дека CS50 може да има со оглед на вас, но тоа ќе ви овозможи да земе некои мостра поднесе, внесете го во вашиот енкрипција, а потоа од таму тип на дека во вашиот декрипција да бидете сигурни дека тоа испадна истото. Така, тоа е вид на како три начин јамка. Одат за тоа. ПУБЛИКАТА: Ако програмата има повеќе влезови, има ли начин да го кажете кој влез да се користи текст датотека или излез за? ЗВУЧНИЦИ 1: Таа има повеќе влезови. Без оглед на поднесете input-- кога е со барање за влез што прв пат, тоа е ќе да се претпостави, мислам дека тоа е случува да цевка во целата датотека. Значи, ако имате повеќе влезови, вие сте ќе биде цевки во повеќе датотеки. Значи, ако сте прашува за пораки три пати во вашиот код, сте ќе треба да се стави во три различни датотеки. И го добива лудо. И вие не треба да се се грижите за тоа во моментов. Но, тоа е идејата. Така да, цевка е само производство на еден програма ја користи за внесување во друг. Секој добро таму? Кул. ОК. Вие веројатно нема да има да го направите премногу со него. Но треба да се разбере начини можете да го користите овој. И има некои случаи кои можеби ќе сакате да го користите. Така поднесе I / О- Знам дека она што сте saying-- ние сме навикнати да ги читам од и пишување на нашите екран таму, што е стандард во и стандарден излез. И тоа е она што вие момци биле прави од почетокот на класа тука. Но вие исто така може да чита и да пишува датотеки, која е на сите датотека I / O-, така да поднесе влез, производство е сите што го застапува. Така што ова во основа значи дека можете да ги чувате вашите податоци сега. Кога ли само го испечатите да екран, тоа е во основа нема, нели? Веднаш штом ќе се направи "Здраво свет "и да ја стартувате" Здраво светот " тоа отпечатоци "Здраво светот" на екранот. Но ти навистина не може да го направи нешто со неа од таму. Ако ги чувате во текст датотека, а потоа одеднаш имате овие податоци дека сте дозволено да манипулира или да го стави во датотека, или да го стави во програмата подоцна. Една од причините, зошто го правиме тоа е само како начин да се сместат податоци за подоцна употреба. Имам неколку чекори тука само одење преку стандардни I / O. Во првиот чекор, вие треба да се создаде референца до датотеката со сите капи ДАТОТЕКИ ѕвезда датотека. Така што создава покажувачот во датотека. Па тогаш ќе сакате да го отворите. И ќе се каже, буквално, само датотека е еднакво fopen. И ова се случува да се врати Покажувач на датотеката која само отвори. Видов неколку од вас момци на работното време. Но една од работите е remember-- совети може да има некои адреса или нула, нели? Ако некогаш има случај каде што нешто може да се врати нула, она што ние треба да направите пред ние некогаш да го користам? Ние треба да се провери дали тоа е нула или не, нели? Затоа што некои од вас можеби имал прашање, каде што и објект беше да се врати во Збег е нула. Сте се обиделе да се изврши некои функција на неа. И вашиот компјутер сајт обвини. Нели? Се обложувам неколку од вас можеби имал тоа прашање. Значи со fopen, fopen или ќе врати покажувачот на датотеката, или ако нешто тргне наопаку, тоа се случува да се врати нула. Така што секогаш треба да се провери дека тоа не се врати null пред да се обиде да направи нешто друго. Ова е како стандарден парадигма дека ви се случува да треба овде. Ако има некогаш шанса дека нешто може да се врати нула, проверете, за да бидете сигурни дека тоа не пред да продолжите. Друго, си оди да се добие прекрасен сајт грешки. И никој не сака да се справи со нив. Така како што гледаме тука, првиот аргумент е само патека до датотеката. Ако таа датотека не постои, тоа се случува да се создаде таа датотека. И тоа е само ќе биде празно. А потоа на вториот аргумент е режим кој сакате. Дали сакаме да се чита од оваа датотека? Дали сакате да се напише од него? Дали сакате да додаваат? Така всушност она што јас само said-- ако не постои датотеката и ти се обидуваш да се прочита од тоа, тоа се случува да се фрли грешка. Ако датотеката name-- допаѓа, ако file.text сеуште не постои и сакате да се напише на него, тоа ќе се создаде празно фајл наречен file.text за вас. И ако сакате да го додаваат, што треба да го прават истото. Дали тоа има смисла? Ако се обидуваш да се прочита од датотека која сеуште не постои, тоа ќе фрли грешка. Во спротивно, тоа ќе се создаде датотека за што го правите она што сакате да го. Кул. Сега ние може да се чита од датотеката. И ова е само вид на оди преку различни функции дека имаме за датотеката I / O. Оваа волја да бидат неопходни во PSET оваа недела, ако се сеќавам точно. Да, тоа апсолутно ќе биде неопходни во PSET оваа недела. Така fgetc враќа следниот знак. fgets само се враќа линија на текст. Тоа ќе се врати ништо до нова линија, и тоа ќе се скрши. Така FREAD чита одредени број на бајти и ги става во низа, што е нешто што може да сакате да го направите со ре-размер-- може да биде корисно. Колку луѓе се прочита PSET спецификации, патем? ОК. [Нечујни] ЗВУЧНИЦИ 1: ОК. Добре. Дефинитивно читаат that-- тоа е забава PSET. Можеш да закрепне избришани меморија card-- навистина возбудливо кога таа работи. Но, дефинитивно, почнам со читање тоа. Доаѓаат разговара со мене, ако сте имате прашања во врска со тоа. Добро, така како што јас го кажувам, FREAD чита одреден број на бајти. Тоа е некои произволен број дека си оди за да се постави. А потоа FSEEK само потези до одредена позиција. Па можеби и не ви е грижа за следните 10 бајти. Вие само сакате да ја прескокнете напред. Не ви е грижа за нив. Сакате да прочитате почеток во бајт 11. FSEEK ви овозможува да го направите тоа. Така што ви овозможува да биде селективен за тоа што ти ја читаш. Затоа што fgetc, fgets и FREAD читање од едно место во датотеката. Еден начин да се размислува за ова е ако ова Наша датотека, кога за прв пат ја отвори, имате оваа позиција во датотеката која започнува на почетокот. Секогаш кога ќе се јавите fgetc, fgetf или FREAD, тоа се случува да започне од оваа позиција маркер. Да речеме, ти само сакаат да читаат ова парче на памет овде. Вие не може само да се јавам. Вие мора да бараат овде а потоа читаат од таму или да прочитате, добива, или ЕОКП, во зависност од она што го сакате. Така бараат само ви овозможува да прескокнете делови од меморијата. И тоа е само начин можете да го прескокнете работи без читање нив во вашиот тампон. Дали тоа се направи смисла на сите? Очигледно, има многу паралелни here-- нашите излез или влез пренасочување, сте читаат и пишуваат. Така fputc само пишува карактер во датотека. fputs пишува линија. Fprintf отпечатоци форматирана излез. Значи, ако имате јазичиња, или простор, или какво ли не. А потоа неуспешно пишува некои низа од бајти во датотека. Па ова е на ист начин запишување и FREAD се аналогни opposites-- fgets, fputs, и тогаш fputc и fgetc-- многу луди, брзо работи. Само вид на се задржи овој handy-- ќе имаат различни времиња каде што можеби само сакаат еден карактер во исто време. Можеби сакате цела линија. Со вашиот речник pset-- кој е во две psets, Верувам, ние ви даде целата речник во текст формат која има секој збор одделени со линија. Значи, ако си сакал да го прочитате со еден збор во исто време, она што може да го користите ако читаш и тие се сите разделени на нови линии, а вие само сакате еден збор во еден момент? ПУБЛИКАТА: fgets ЗВУЧНИЦИ 1: Токму така. Fgets-- затоа што тоа се враќа се што е во една линија. И ако секој збор е неговата сопствена линија, можеме да го користиме fgets. Кул. Дали тоа има смисла, секој? Кул? Да, ние ќе треба да се дојде до на забавата дел со покажувачи Многу наскоро, каде што натера да направи некои математика. И тоа ќе биде одлично. Последните step-- затворите вашата датотека. Со толку многу работи, еден од нашите парадигми е ако тоа може да се врати нула, провери за ништовни. Ако ви се отвори нешто, ќе е подобро да го затворите. Добро, па вие не сте направиле додека не сте направи освен ако не сте го затвори. Вид на како тоа не е над до масти дама пее. Тоа е како затворање на датотека. Како што се вели тука, само да повторам, секогаш го отворите вашиот датотека, пред да сте читање или пишување на него. И секогаш го затворите ако сте го отвори. Сите нели? Кул. Па еве еден пример. Така tiny-- јас не знам дали сте момци може да се види дека многу добро. Ако само ние може да се зголеми осветленоста некако. Дозволете ми да всушност го направите ова, ако можам. Добро, вие момци навистина не може да види дека на сите, може да ви? Добро, ние ќе треба да го направите ова, тогаш. [Нечујни] Претпоставувам ова е многу подобро да се види. Секој може да се види каде ми глувчето отиде е прашањето? Ах, таму is-- она ​​што се бори! ОК. Во суштина, вие момци треба да имаат вид на идеја за она што ова се прави. Тоа не е совршен. Но јас повеќе би го објаснам од трошат повеќе време обидувајќи се да ја форматирате правилно. Во суштина, како што гледате овде, ние започнуваме со датотека отворени. И ние имаме некои база на податоци датотека што ние сме отворање на кој се вели дека тоа е нашите студенти. И ние си оди за да пишувам за неа. Па се разбира, се врати NULL. Значи ние треба да се провери за ништовни. А потоа, ако тоа не е нула, ние одиме преку. И како што гледате, ние сме looping низ овде. Существуют студенти. Студентите е хаш дефинира како три. И она што го правиме е ние сме печатење на датотека, нели? Значи она што треба печатење на нашиот датотека? ПУБЛИКАТА: резултати кои се во низа? ЗВУЧНИЦИ 1: Да. Оценките кои се во array-- точно. Значи ние сме отворањето на оваа база на податоци датотека, која Претпоставувам е некој вид на оценки база на податоци. И ние сме само печатење на резултати на секој ученик во таа датотека. Кул? Добро. Страшни. ОК. Да се ​​вратам to-- ПУБЛИКАТА: Имам брзо прашање. Е printf не во за телефонска линија? Тоа е само во ако јамка? ЗВУЧНИЦИ 1: Не, тоа е во за телефонска линија. Не можам да видам мојот глушец многу добро тука. Па јас сум се борат да формат, кој правилно. Оваа заградата треба да се качил. Тоа треба да биде овде долу. Тоа е она што е во вашиот за јамка. Там. Сега е доста. Па тоа е како тоа треба да be-- освен за тоа минатата заградата дека сум отпуштен. ОК. Дали тоа се направи смисла на сите? ОК. Ние ќе треба да се движи следното нешто then-- кои, всушност, си оди да треба да се види код. Па јас сум само ќе копија од тоа над сега. ОК. Па јас ќе одам да ви покаже момци овој код. И јас сакам вас да се обиде и фигура од она што би требало да се направи. Па со оглед that-- потрае една минута или така. Се обиде да дознаам што се случува тука. Сите идеи? Ние знаеме дека имаме најмалку две аргументи на командната линија, нели? I ја преземе еден од кои ќе биде дека [нечујни] на нашата програма е а потоа нешто друго. Затоа што ако [нечујни] е помалку од две, ние се развикам нив. Нели? И од употреба, тоа изгледа како тоа се случува да биде некој вид на датотека. Ние сите се согласуваат со тоа? Па сега, она што го прави циклусот? Што е тоа се случува преку? ПУБЛИКАТА: Сите датотеки. ЗВУЧНИЦИ 1: Токму така. Тоа се случува преку сите додадени фајлови: дека ние сме влез таму. Значи за секоја датотека, тоа е отворањето некои низ таму. Тоа е отворање на таа датотека. Нели? И тоа е читање од него. Се разбира, проверка дали тоа е нула. И тогаш тоа е печатење. Ако тоа е нула, тоа е само ни кажува дека тоа не е датотека која постои. Затоа што се сеќавам, со прочитајте ја нашата датотеката мора да постои. Нели? Со запишување и дополнување, можете да се извлечеш со тоа. Но, со читање, нашата датотеката мора да постои. А потоа, ако тоа не постои, она што правиме тука? Ајде само започне тука. Што е ова do-- овој прв карактер. Што да направам? Тој добива еден знак, нели? Па што е ова се прави? Тоа е добивање на првиот карактер. Некој знае EOF? ПУБЛИКАТА: Крај на датотека? ЗВУЧНИЦИ 1: Крај на file-- точно. Па затоа се случува да поминат низ на целата датотека, нели? А потоа тоа се случува да се ажурира од страна на добивање на секој понатамошен карактер. Нели? И она што го прави? ПУБЛИКАТА: Ставање дека in-- ЗВУЧНИЦИ 1: Putchar отпечатоци на вашиот монитор. [Нечујни] карактер. И тогаш кога [нечујни] ова ќе се затвори на датотеката. ПУБЛИКАТА: Не ви треба [? друго? ?] ЗВУЧНИЦИ 1: Не е задолжително. Мислам, тоа е вид на имплицирана во ова. Бидејќи ова се враќа, иако, како што долго тоа не го фати овој, ти си во ред. Мислам тоа е веројатно добра практикуваат да се направи на друго место. Но друг не е секогаш потребно особено ако имате нешто како возврат, кој значи дека во овој случај, ако тоа фаќа тоа, вашата програма ќе заврши и тоа никогаш нема да дојде до ова. Тоа е повеќе за случај кога сте не мора да значи враќање нешто. Затоа што ако ова не беше враќање ништо, тоа би значело дека ако ова беше вистина, го остатокот од овој, сепак, ќе се кандидира. И во овој случај, би сакал лажни. Ако тоа е враќање, и крај на вашата програма, друго не е потребно сите од времето, во зависност од контекстот. Јаков, дали имате некое прашање? ПУБЛИКАТА: Да. Па не fgetc добие следната карактер? Како не се зголеми карактер? ЗВУЧНИЦИ 1: Да. Така fgetc добива следниот знак. Можете да мислам на тоа како C ++ во некоја смисла. ПУБЛИКАТА: Па што е EOF? ЗВУЧНИЦИ 1: EOF е крајот на датотеката. Тоа е само показател дека ви овозможува да знаете дека сте на крајот на вашата датотека. Така што тоа се случува да се печати до вашиот стандарден излез. А потоа тоа се случува да се затвори датотека кога тоа е направено. А потоа да одиме да следната датотека, нели? Па во целост, што значи оваа програма направам? [Нечујни] ЗВУЧНИЦИ 1: Да. Тоа само отпечатоци од сè што постои. Значи, ако вие момци некогаш сте се користи КАТ а потоа името на некои file-- Јас не знам дали некој од вас има некогаш направено тоа на вашиот терминал. Но ако некогаш се користи команда CAT-- Ц-А-T-- а потоа без оглед на датотека имате there-- го отпечатоци ја на вашиот терминал, кој може да биде супер корисна за некои работи. Јас тоа многу го користите. Дали тоа се направи смисла на сите? Кул? OK, па вашата задача now-- или од страна на сами или со луѓето околу you-- е само да се напише едноставна програма дека само ќе пишува "Здраво, свет!" до датотеката. [Нечујни] [Нечујни] ЗВУЧНИЦИ 1: јас бев како, дали Јас го правам тоа лошо минатата недела? Јас не мислам дека тоа беше толку лош. Мило ми е што се сите тука. Тоа навистина ме прави среќна. Јас сум една девојка од едноставни задоволства. Јас само се допаѓа кога ми секција посетува. Па јас сум само добивање на овој отворени за вие момци, така што можеме да го кодот заедно. Не ми се допаѓа ставање некој на место освен ако не сакате да биде. ПУБЛИКАТА: За квиз, дали ние треба да се напише програма? ЗВУЧНИЦИ 1: Може да биде побарано да пишува едноставни програми со рака. То. ПУБЛИКАТА: квиз е следната недела, нели? ЗВУЧНИЦИ 1: квиз е следната среда. Тоа значи дека таму е една прекрасна [? ПТ?] надградба на капацитетите на партијата потоа која значи дека ќе ја добиете вашата резултати назад дека night-- во кое време? Кој знае? Но тоа ќе биде таа ноќ. Добре. Како сакаме да се започне ова? Јас ќе ви даде hint-- започнува со оваа. ПУБЛИКАТА: Вие треба да се отвори датотеката. ЗВУЧНИЦИ 1: Да. Значи она што го сакате да се јавите ова? Дали само сакаат да го нарекуваат "датотека"? Ајде да го прават тоа лесно. Така fopen-- она ​​што е наша излез тест ќе биде? Наречи го тоа "Здраво". И каква е нашата режим? Што правиме До оваа податотека? ПУБЛИКАТА: Прочитај. Пишување. ЗВУЧНИЦИ 1: Ние сме пишување на него. Убава. ОК, па ние имаме оваа датотека сега. Она што ние треба да направам? ПУБЛИКАТА: Проверете дали тоа е нула. ЗВУЧНИЦИ 1: Проверете дали тоа е null-- точно. Тоа е она што ми се допаѓа да се слушне. Тоа треба да биде автоматски, особено доста од оваа точка. Ако почнете segfaulting, што веројатно не се провери за ништовни некаде. Девет пати од десет, тоа е ќе биде вашата грешка. Па ако може само да добие на навика, секогаш проверете дали тоа е нула, твојот живот ќе биде убаво и easy-- или полесно. Па провери да се види дали тоа е нула. Па ако тоа не е null, што е она што тресне е еднаква на означает: не null-- тоа е валиден. Што сакаме да направите? Ние само сакаме да се печати во таа датотека, нели? Па што сме случува да се користи? ПУБЛИКАТА: Fprintf ЗВУЧНИЦИ 1: Fprintf-- убава. И fprintf потребни двајца arguments-- каде тоа се случува и она што сакаме печатени. Значи она што е првиот? Каде е? ПУБЛИКАТА: датотеката. ЗВУЧНИЦИ 1: Тоа се случува да поднесе. И што сакаме печатени? "Здраво, свет!" Добре. Имаме една последна thing-- уште една голема парадигма тука. ПУБЛИКАТА: Затвори. ЗВУЧНИЦИ 1: Затвори. Там да одите. ПУБЛИКАТА: Дали е ова случување доколку датотеката е null? SPEAKER 1: Не, тоа е ако тоа не е null. ПУБЛИКАТА: О, и ако тоа е не-- ОК. За fopen и потоа два аргументи кои одат во внатрешноста, што значи првиот аргумент значи повторно? ЗВУЧНИЦИ 1: Аргументот е исто како и името на датотеката кој сакате да отидете. Па по ова работи, што би имаат некои фајл наречен "здраво" дека е "Здраво, свет" во неа. Тоа е се. Само името. ПУБЛИКАТА: И бидејќи тоа е пишување, датотеката не треба да постои. Дали е тоа она што го рече? ЗВУЧНИЦИ 1: Токму така. Точно. Ако "Hello" како датотека не постои, сепак, тоа е се случува да се создаде датотека со име Здраво "и пишува за тоа за вас. ПУБЛИКАТА: Кога ќе си кажува програмата да пише на датотеката, зошто ти пишувам "датотека", наместо на Името на датотеката и fprintf-- SPEAKER 1: бидејќи во овој случај, ние треба дека голем FILE-- сите во caps-- ѕвезда, датотека. Така што е покажувачот на датотеката дека ќе зборуваме за. Ова е начинот на кој ние само се однесуваат на него. Значи во овој случај, може да мислам на file-- ага, можеме да го користиме this-- датотека тука се однесува на отворање на "Hello" и допуштајќи ја пишувам. ПУБЛИКАТА: Може ли да се стави "Здраво" наместо [? на само?] е датотека? ЗВУЧНИЦИ 1: Не, бидејќи "Здраво" треба да бидат отворени и записваеми. Поднесе тука е како одредници кој се вели дека во ред, ние имаат оваа file-- hello-- дека ние сме во потрага на. Исто може да се отвори. И ние ќе се обидеме да напишете на него. Ако само користење "Здраво", што е внесен во него. Па затоа се случува да навивач надвор. Мислам, можете да ја нарекуваат. Вие би можеле да имаат направено датотека, ѕвезда "Здраво", е еднаква на тоа. Но целата поента е дека вие треба датотеката ѕвезда покажувачот за за да може да се користат овие функции. ПУБЛИКАТА: Можете ли да го прават датотека, ѕвезда, датотеки, "Здраво" или не треба да се стави поднесе ѕвезда, датотеката со тоа? ЗВУЧНИЦИ 1: Можете да направите датотека, ѕвезда, "Здраво". Можете да го промените ова без оглед на името што го сакате. Тоа е сосема произволна она што име е. Можете да го именува ништо. Името го летање шпагети, ако си сакал. ПУБЛИКАТА: Што е "W" во наводници за? ЗВУЧНИЦИ 1: "W" е само на владата. Па ние сме пишување на оваа датотека. Секој добар? Јасно? Да. ПУБЛИКАТА: Значи, кога го пишува ова поднесе, каде тогаш ќе најдеме таа датотека? ЗВУЧНИЦИ 1: Тоа ќе биде во иста директориумот, која сте моментално во. Ако сте во PSET три и да го извршите ова, во рамките на вашиот PSET три folder ќе биде овој фајл наречен "Здраво". Кул? Секој добар? Се чувствувам како сте сите добивање на тоа, што е одлично. ОК. Па се враќам на слајд show-- Сакам кога работите работа. Добро, pointers-- Дали сте момци возбудени? Покажувачи се големи. Тие потрае малку да заврши вашата глава околу. Ова е мојата втора година настава совети. И мислам дека конечно го добив. Значи, ако сте се борат, тоа е во ред. Како што реков претходно, цртање слики помага многу со работите во CS, колку што мислам дека луѓето имаат тенденција да се размислува о, ние сме на компјутер. Ние треба само код. No-- цртање слики навистина ќе ви помогнат. И јас навистина ве охрабруваме да се сместат во вашиот детската градина страна и изнесовте пастели или маркери и нерешено. Бидејќи тоа ќе ви помогне. И ако ме види на работното време, јас ќе се носи околу Купишта на хартија со пенкала цртање работи надвор. Па особено со pointers-- сликаме. И сигурен сум дека ние сме всушност ќе биде цртање некои слики тука. Па вие момци сите дојдоа да го гледаат Бинки, овој кул claymation работа. И мислиме дека тоа е навистина смешно кога тој експлодира во еден куп на парчиња. Тоа е некој стрип олеснување за класа. С [нечујни] ова голема способност да бидат во можност да го контролира меморијата. И тоа е една од работите што навистина прави таква моќна јазик. Но со голема моќ доаѓа голема одговорност. И луди работи може да се случи ако не сте внимателни. Значи, кога сте со користење на покажувачи, вие сакате да бидете сигурни дека навистина се разбере точно она што го правиш. Се надевам дека следниот малку време ќе ви помогне да навистина се разбере совети, како да ги користат, и како да се манипулира со нив. Така memory-- сигурен сум дека ние сме види овој дијаграм пред. Така што ова е само едноставен дијаграм на како работите би можеле да се чуваат меморијата. Така што во основа ги имаат овие огромен низи на еден бајт блокови е она што го имаме here-- лек чекори на зголемување од страна на еден секој пат. Ова е во хексадецимален [нечујни] така осум-битен блокови. И секој блок е поврзан со некои хексадецимална адреса. Значи, ако некогаш сте се види 0x, тоа е само notating дека е хексадецимална адреса. Може да се претпостави ова значи некои адреса во меморијата. Ние зборуваме за мемориски адреси секогаш кога ќе види хексадецимален. Имаме целочислените се променливи, плови се променливи кои чуваат. Така целочислените продавница целочислените. Плови плови продавница. Така и ние имаме совети таа продавница мемориски адреси. Тоа е еден вид на мапирање. Покажувачи се исклучиво за мемориски адреси. Па тоа е како вашиот тип таму. Вашиот уред е 32-битна, што значи дека Вашата мемориска адреса е четири бајти. Па секоја покажувачот дека имате е, исто така, ќе биде четири бајти. Или на друго место, ако тоа е четири бајти, меморијата е четири бајти. Покажувачи продавница меморија. Затоа, тие се четири бајти. Cool-- само сакаат да се зајакне тоа. Треба да се добие овој стрип сега. Не знам колку од вас се XKCD навивачи, но сакам XKCD. Тоа е одлично. Добре. Па создавање pointers-- како што реков, тоа е доста само се допаѓа ништо друго. Имате тип. Имате име. Нели? Тоа е она што го имаме таму. [? Хексадецимален?] Ѕвезда значи дека е покажувач, а потоа она што сакате да го нарекуваат. Па тип претставува она што може да се сместат. Сите нели? Во истиот начин на кој ако правиме целочислените, знаеме ние сме чување int таму. Со покажувач, тоа има мемориска адреса. Но, она што значи тоа е that-- тука е местото каде цртање се случува да дојде во рака. Значи во овој случај, ние треба некои value-- да речеме четири. Четири е на адреса едно. ОК? Овој прв едно овде значи дека тоа е покажувач 2х. Нели? Тоа е некој покажувачот х. х може да биде нешто, сеедно. Без оглед на х is-- велат x е четири. Тоа се случува да се сместат меморија адреса тука. Така int, ѕвезда, x-- ова е некои други слот во memory-- кој знае што е оваа. Но тоа се случува да се сместат адреса тука. Така што ова ќе биде like-- во овој случај, без разлика, се складира на 0x1-- што и да се чуваат на адреса која ни покажувачот држи, мора да се совпаѓаат со она што ние сме назначен. Па на 0x1, во овој случај, тоа е x. Овој само што никогаш не може да биде int, а ние сме со користење на овој. Слично на тоа, ако имаме друг 1г, без оглед на се чуваат адреса со y има да биде char-- истото со z. Во истиот начин, кога и да се обиде да направи intx е еднакво на 0,4, тоа се случува да се развикам и да биде како не, ти рече си сакал Int. Ова би требало да биде int. Престане да се обидува да го плови направи. Па ајде работите да биде она што тие сакаат да бидат. Дозволувам работите сами да биде. Така голема работа е само без оглед на типот на покажувачот е тоа, што тоа е единствениот нешто што може да се сместат таму. ОК? Со практиката, како и со минатата недела, сè чини дека навистина вид на абстрактна. Ние ќе треба да направите некои пракса. Тоа треба да се направи повеќе смисла. Така референцирање и dereferencing-- тоа е навистина важно да се добијат овие исправен. Јас се уште треба да ги обновите на секои сега и тогаш. И јас сум како чекање, кои еден го сакам? Така го симболот, всушност, ќе им даде на ви референца или адреса на. Па тоа се враќа на адреса во меморија на која променлива е зачувана. Па затоа се случува да се, всушност, се врати за вас хексадецимален, додека разыменование го е, всушност, ќе ви даде податоците кои се складирани таму. ОК? Значи ние се случува да погледнеме еден пример навистина брзо, или, всушност, до следната. ОК. Значи ние треба да се размислува навистина внимателно за тоа. Па тука имаме некои цел број x. Одам да се обиде и да се подготви ова до најдоброто од мојата способност. Па ние ќе да ја имаат оваа слот х. И тоа е складирање на пет. Адреса е 0x4. Кул? Сите добри. Така, сега имаме овој покажувач. Тоа беше овде. И симболот ни дава адреса на нешто. Па, во овој случај, тоа е адреса на x. Што е адресата на х? 04-- и овој покажувач е на 0x08. Кул? Па можете да се размислува за ова покажувач, 04, само укажува овде. И тие се наречени совети бидејќи, како што ние се повеќе во ова, си оди за да се види покажувајќи на нешта. И еден блок покажувајќи на друга блок ќе се направи многу повеќе смисла. Значи тука се две. И тогаш имаме некои копија, која е что-- 0x0c. И тоа се случува да разыменовывать нашите покажувач. Па што го кажува е Добро, тука е нашата покажувач. Вредност, таа ги зачувува е 0x04, и она што тоа е велејќи дека се оди на оваа адреса и да ми кажете што е во него. Значи тоа е ефикасно што е ова стрелка прави. Можете да мислам на тоа како вашата ѕвезда. Така во ред, кога правиме ѕвезда, тоа значи дека го следат. Оди на оваа адреса. И тоа е во основа, само следната стрелката на оваа меморија парче. И ни го даде она што е во него, што е 5. Тоа е зошто нашите примерок е еднаков на 5. Дали тоа има смисла? Дали некој треба мене да одат преку дека повторно, или повеќе бавно? Сакате мене да одат низ него една повеќе време? ОК. Ние се случува да го прецрта повторно. Кога ќе почнеме, сите се согласуваме имаме некои парче на меморија, која е променлива x што ние во собата еднаква на 5. Ние не се контролира, каде што е во меморијата. Така што ова место е само произволно се доделени. Добро таму? ОК. Тогаш ние го иницијализирам покажувач Int. Тоа е зошто тоа е дозволено да се укаже на х бидејќи имаме int тука. Имаме уште една парче меморија, бидејќи овој покажувач е променлива, исто како ништо друго. Тоа е произволно се доделени некои простор во меморијата. И што таа ги зачувува е адресата на x. Симболот значи адресата на х. Значи она што е адреса на х? ПУБЛИКАТА: Тоа е zero-- ЗВУЧНИЦИ 1: 0x04. Така then-- последен. Имаме некои copy-- повторно само уште една променлива. Па ајде да му ја додели некои произволни место. И ние разыменовывать нашите покажувач. Ѕвезда значи одат на адреса чуваат во мојот показалец. Кажи ми што е таму. Така адреса чуваат во нашата покажувачот е 0x04. Па ќе одиме на таа адреса. Тоа е покажувајќи на таа адреса. Она што е внатре оваа меморија блок? Тоа е пет. Значи тоа е она што ние го додели на нашите копија. Секој добар? Кул. Again-- слики. Така следење на вредностите here-- Јас сум се случува да ги споделите со вас момци мислите за ова. Ние може да се направи уште една слика. Но јас сакам вас да се обиде и причина преку тоа на свој за една минута. Бидејќи тие не даде ни еден пример адреса, Јас сум само ќе да се направи симболот x-- кој треба да помогне вози дома. Симболот значи адреса. Така што во првите еден, секој оди со првата линија. Некои х множество е five-- некои случаен слот во меморијата. Int ѕвезда покажувачот е еднаков на адреса на х, нели? Int ѕвезда покажувачот создава овој блок, го нарекува покажувач, и го доделува на адресата на х. Јас сум страшно во амперсанды. Сега она што го правиме е ние велиме Добро, разыменовывать нашите покажувач. Па ние одиме во ред, она што е во нашата покажувачот? Тоа е симболот х. Одат на симболот х и повторно тоа. Па сега, симболот х ќе биде 35. Значи, во основа, кога сте разыменование, ќе одат во ред. Си оди за да се цртање слики како оваа. Си оди за да се цртање стрелките над каде што е. Па оди на овој слот во меморијата и или ми даде таа вредност назад, или да се измени тоа. Во овој случај, бидејќи ние сме во ова вредност, ние сме го доделуват на 35. Додека во последните една, ако забележите, ние беа доделување она што беше тука за да се нешто друго. Така што тие имаат оваа неверојатна маса. Тоа не е толку лошо. Вие момци работат на тоа. Одам да го извади на табла. Ние ќе треба да го пополните заедно, во ред? Значи имате некои хартија, го дофати партнер, да почне да работи. Одам да се добие поголем дел од креда. Затоа што тоа се случува да биде многу. ОК. ПРОФЕСОРОТ: ОК. Да почнеме со првиот ред. Ние ќе почне таму, тогаш вие момци можеби можат да работат преку некои повеќе. ОК. е еднаква на b пати c така што е? Тоа не е трик прашање, јас ветувам. СТУДЕНТСКИ: 4 пати 5. ПРОФЕСОРОТ: 4 пати 5. 20. Значи она што е б? СТУДЕНТСКИ: 4. ПРОФЕСОРОТ: И в? СТУДЕНТСКИ: 5. ПРОФЕСОРОТ: 5. И тогаш ова е само ќе се Амперсант, симболот б, симболот C, нели? Не е лошо. Тоа е едноставна. ОК. Па следниот. Е еднакво на пати c, во случај некој е доволно запознаени со тоа. Е секој запознат со времето е еднакво? ОК, сето ова означает: ова е стенографија за еднакво на пати c. Вие исто така може да го направи тоа со поделба, со тоа, со одземање. Можете да го направите сите биле еднакви, или плус е еднаква на в значи е еднакво на плус c, односно минус еднаква c ќе биде еднакво на минус c. Тоа е само синтаксички шеќер. Па, во овој случај, односно е еднаква на пати в би ни што даде? Повторно, не трик прашање. СТУДЕНТСКИ: 100. ПРОФЕСОРОТ: 100. Дали нешто друго се промени? Не. Можеби и јас конечно ќе добие подобро во мојот амперсанды. СТУДЕНТСКИ: Добро, извини, како дојде 100? ПРОФЕСОРОТ: ОК. Па еден е еднаков на пати c, така што пати c. СТУДЕНТСКИ: Ох, ти си користење за previous-- ПРОФЕСОРОТ: Да. Значи овие се нашата најновите вредности. Овие се она што треба да биде користење како што се движи надолу, ОК. Значи, б е единственото нешто се менува, нели? Па ајде да се пополни во сè друго. Б. Што е б ќе биде? За да се биде или да не биде. Па што е ова се прави? Што е ѕвезда па правиш? СТУДЕНТ код за локацијата на годишно ниво. СТУДЕНТСКИ: Не, не сосема. Па ова е d референца. СТУДЕНТСКИ: Значи б му се предаде вредност на годишно ниво. ПРОФЕСОРОТ: Да, така ра адреса на, нели? Така, тоа е велејќи Оди до каде е чуваат и ја даде таа вредност. Значи она што е б? СТУДЕНТСКИ: 100. ПРОФЕСОРОТ: 100. Совршен. Добро, така компјутер е она што се менува. Се друго останува исто. Она што се компјутер ќе биде? Едноставна задача. Компјутер е еднаква на годишно ниво, и она што е на годишно ниво? СТУДЕНТ го симболот. ПРОФЕСОРОТ: Совршена. Сега ние сме добивање интересно. Добро, ајде да се скрши оваа надолу. Прво, она што е б пати в, бидејќи тоа е лесен дел од ова, нели? Б пати в is-- СТУДЕНТСКИ: 500. ПРОФЕСОРОТ: Да, така Што е ова една прави, ако тоа е ѕвезда Pb, она што се менува? СТУДЕНТСКИ: Што има во the-- ПРОФЕСОРОТ: Што си? СТУДЕНТСКИ: Што е во просторот дека ФБ е да се покажува. ПРОФЕСОРОТ: И Гр е да се покажува to-- СТУДЕНТСКИ: Б. ПРОФЕСОРОТ: Б. Значи само нешто менување е б, нели. Па b пати c, 500. Значи тоа е она што се менува сега. Кул. Убава. Вие момци се прави одлично. Сите права, кршење на оваа надолу. С се менува, нели? Па ние може да се пополни во сè друго. Ајде да видиме. ОК. Ние знаеме дека в е и ќе биде производ на два броја, нели? Она што два броја, иако? СТУДЕНТ и в? Професор: Значи е право за првиот. Па ние сме D референцирање р, нели? P на поени на една, па ние се знае дека ова се случува да биде 100 пати што? Пати она што го прави PC точка за? Укажува. Па 100 пати 100 е 10.000. Дали тоа има смисла? Кул. Дома водат, момци, последниот ред. ОК. Она што се менува тука? СТУДЕНТСКИ: А. ПРОФЕСОРОТ: А. совршен, па се друго може да остане иста. ОК. И она што е? Така што е време она? Ова е ѕвезда Гр. Па ѕвезда Гр значи тука е ФБ, ФБ точки б. СТУДЕНТСКИ: 500. ПРОФЕСОРОТ: 500. Па ние имаме 500 пати 100. Тоа е 50.000. Whew! Се погледне во тоа. СТУДЕНТСКИ: Зошто имаме на & c за last-- ПРОФЕСОРОТ: За жал. СТУДЕНТСКИ: О, во ред. ПРОФЕСОРОТ: Мојот лошо. Многу пишување. Секој добар? Не е премногу лошо, нели? Само се малку додека да работат преку. Ако го прекине, се разбере она што секој дел се однесуваат to-- како со сè тоа е, yes-- го срушат на мало проблеми, а потоа се здружат, и што можете да направите некои страшни нешта. Существуют одговори, но ние го сторивме тоа. Покажувачот аритметички. Ах. Моите раце се сите варовит. Па додавање или одземање int прилагодување на покажувачот од страна на големината на видот на покажувач. Се сеќавам како секој тип има различна големина? Па како двојна или долго долго се применува осум и int е четири но char е еден. Значи она што сакате да го направите is-- една работа е да се запамети е само тоа колку вашиот покажувачот вредност, всушност, се менува ќе зависи од тип на покажувач е тоа. Секој добар со ова? Може ли да го избрише? Ние сме добро? Страшни. Значи, ако имаме некои покажувачот that-- ова ќе be-- Јас сум се случува да го int покажувачот направи. Тоа продавници ова. Ако сте биле да се каже покажувачот плус еден, што тоа се случува да се направи се тоа се случува да го ажурирате то од страна на големината на int затоа што тоа е тип на покажувач е тоа. Со C, сè е многу строги и регулиран. Int покажувачот се случува да се ажурира од страна на износот на просторот int ќе се земе. Int е четири бајти. Така што ова ќе се претвори во? Сте само додавање на четири на ова. Сега вашиот покажувач ќе be-- ОК. Значи, ако тоа беше знак и ние го сторивме покажувачот плус еден, што би било тоа сега? Ако го started-- преправа ние started-- во моментов тоа е 0x08. Ајде сега да се каже дека ова е char покажувач, и додадовме еден. Она што ќе го промени да? Колку бајти е знак? ПУБЛИКАТА: Еден. ЗВУЧНИЦИ 1: Еден. ПУБЛИКАТА: Значи 0x09. ЗВУЧНИЦИ 1: Значи тоа ќе биде девет. Па само нешто да се запамети. Само кога ќе додадете еден, тоа не е додавање на една, освен ако тоа е знак. Тоа е додавање колку бајти од типот дека е тоа, која е причината зошто имаме оваа равенка тука. Па тоа е int пати поголема од големината на видот на покажувач. Па ние имаме пример тука. y беше доделен на таа вредност, 0x4, кога ние го сторивме у плус е еднаков на една. Она што е во него, она што е в x, не се менува. Што значи промена е она што е во y. Адресата складирани во y се ажурира од страна на четири бидејќи постојат четири бајти во int и тоа е int покажувач. Добре. Така, сега имаме уште една вежба. Значи, прашањето е што ќе се печати. Сите идеи? ПУБЛИКАТА: Бројот на ликови во среќен мачка? ЗВУЧНИЦИ 1: Токму така. Па се допаѓа со вашата низ. Дали секој се добие тоа? Дали сакаме да одиме низ него? Да, во ред. Па што имаме here-- јас вака така многу повеќе. Јас не мора да се [Нечујни] смешно. Па ние имаме низ тука, среќен мачка. Убава. Имаме некои контра дека ние сме следење на. Па ние имаме некои char * покажувачот дека само е поставена еднаков на ул. Што ова е тоа е тоа е доделување на некои покажувачот до на почетокот на својата низ. Бидејќи сигурен сум дека, како што беше споменато во предавање, ние сме ви даде момци ова тип на податоци се нарекува низ. Но, навистина жици се само низа of-- како char *. Тоа е покажувач на еден куп на ликови кои се соседни во меморијата. Па ова само го поставува еднаква на која било низа е идентификувани од страна на која својата прва карактер е. Така што ова е само поставување одреден момент еднаков на почетокот на низа. Секој добро таму? Кул. Значи ова е разыменование нашите покажувач. Така, тоа е, всушност, ќе да ни даде некоја вредност во тука, во нашата стринг што ние зборуваме за. И ние сме велејќи дека се додека тоа не е нула терминатор. Па продолжувам да одам додека не се добие до крајот на низа. Ажурирајте го вашиот покажувач по еден. Така г, тоа, всушност, ќе се ажурира од страна на еден секое време, бидејќи ова е знак, char *. Па затоа се случува да поминат низ. Тоа се случува да се ажурира. Па прв пат оваа истече, тоа се случува да бидам тука во ч. Тоа се случува да се ажурира. Тоа ќе биде. Тоа ќе биде p, y, и така натаму и така натаму. Ние ќе се ажурира шанкот. Кога ќе се достигне на крајот тоа, само отпечатоци колку далеку е дојден. Да. ПУБЛИКАТА: Значи тоа се брои простор како еден, нели? ОК. ЗВУЧНИЦИ 1: мислам така. Е дека question-- ПУБЛИКАТА: [нечујни]. ЗВУЧНИЦИ 1: Не се грижи. Ова го правам тоа. Сите права, па едно нешто можам разбере е дека со низа, исто така можете да го третираат како покажувач, бидејќи низи се само континуирано дамки на меморија. Така може да се третираат на ист начин. Можете да ги манипулираат со покажувачи, исто така. Така, наместо за правење на, во овој случај, аналогно работа ќе биде низа 0 е еднакво на 1. Но, во истиот начин на кој низа се одредува од почетокот на која својата прва карактер е, низа се определува со каде што својот прв елемент е. Затоа што знаеме, ние сме гарантира, дека овие се случува да биде континуирано блокови од меморијата. Тоа е она што ни овозможува да го направите тоа. Знаеме дека тие се континуирано блокови од меморијата. Значи во овој случај, од страна на разыменование само низа, што ни кажува, Добро, одам до почетокот на вашиот низа, што е тука. Така можете да го поставите тоа еднаков на една. И во овој случај, без оглед на низа тип е, кога ќе го актуализира по еден, тоа е исто како ажурирање то до следната индекс. Можете да го направи тоа затоа што сте знаеш што е во вашиот низа. Па тоа знае колку да надградба на вашиот показалец од страна, какво адреса за да го до така се ажурира дека сте на следниот слот. Така што ова е само поинаков начин на пишување низа 0 еднаков на 1, масив 1 е еднакво на 2, низа заградата 2 е еднакво на 3. Тоа е само уште еден начин да се размислува за тоа. Затоа што тие се континуирани блокови во меморија, можете да се однесуваат на нив или од страна на низа notation-- која јас лично најдете easier-- но можеби што треба да го манипулираат строго мемориски адреси. И ова е начинот на кој ќе го направите тоа. Вид на повеќе налик на кул нешто што може да направи наспроти можеби не е нешто што се всушност, се случува да се спроведе. Јас го користам во 61. Вие, момци, веројатно не треба да се грижи за тоа премногу. Но, ако сте заинтересирани, земе 61 следната година. Ние сме во домашниот дел момци. Знам, тоа е долго. Динамичка меморија Allocation-- па знаеме дека еден на нештата, кога ние разговаравме за време на нашите првиот дел заедно, ние погледна трампа функција, каде што беше надвор од опсегот на нашата главна функција. А ние се поминува во овие вредности кои беа ефикасно копии. И еднаш трампа заврши извршување, само лево оџак. Запомнете, имаме магацинот рамка за swap. Тоа остава и оние вредности заминал со него. И те немаше. Ние не можеше да стори ништо со нив и ние бевме тажни затоа што ние не можат да го заменат нашите вредности. Но со C, како што споменав, можете имаат многу моќ над меморија. Така што можете да направите вас е може да распредели работи на куп тука дека ќе остане таму до да ги каже поинаку. Тие се како добро децата. Тие ќе останат таму. Тие не ја напуштат. Тие ќе останат таму додека не сте како, во ред, може да се оди далеку. Со оглед на работите на магацинот, who-- тие се како непослушен деца. Тие само ќе бега кога сакате да се биде таму, а потоа тие те нема. Вие не може да ги добие назад. Така куп is-- ние ќе се зборува за Примерок и бесплатно, што Сигурен сум дека сте момци слушнале за во предавањето. И тоа е во основа начин да имаат многу упорни податоци. Па можете да ги чуваат податоците околу онолку долго колку што сакате. Мм. ПУБЛИКАТА: Можете ли да се дефинира куп и магацинот? Се им се допаѓа места за да се стави работите? ЗВУЧНИЦИ 1: Значи тие се во основа просто-- тие се начинот на кој ние се однесуваат само на меморијата. Така грамада е само места каде меморија се доделува динамички, додека магацинот се однесува повеќе да магацинот рамки кои се повеќе централни за функции кои се, всушност, трчање. Вие навистина не имаат контрола. Голема разлика, имате контрола во текот на куп, ако сакате да. Имате помала контрола над оџак. Трагањето зависи од функции кои што се извршува, и редоследот по кој тие се се кандидира, и тоа како работите се враќаат. Оглед на тоа што со грамада, како ќе видиме, може да се каже, Добро, јас сакам оваа вредност да биде околу додека не го ви кажам друго. Не ви е дозволено да се ослободи од него. Не ви е дозволено да се вратиш назад. Си оди за да го задржи околу онолку долго колку што ќе ти кажам. Можеш да биде шеф во грамада, со оглед на тоа stack-- можеби ако ти како надувать вашиот пат можете да бидете шеф. Но не сосема. И тоа е навистина само меморија. Тоа е само различни начини на кои се однесуваат на меморија. Кул. Значи со тоа, како да се контрола на вашата меморија. Тоа е со Примерок, која сте ќе добиете да се користи. Па тоа е само кратко за распределбата на меморија. Тоа е се што е. Там е еден куп други кул функции кои имаат Alloc на крајот, и тие стојат за различни нешта. Па кога ќе треба за складирање кои треба да живеам повеќе од вашата актуелна функција така дека кога вашата актуелна функција бега, сеуште имаш податоците што ги добив од тоа, сакате да го користите Примерок. Дека ќе го иницијализира на куп. И како што реков и да ја задржите велејќи дека, ќе го задржи таму додека не го каже поинаку, која е важна работа овде. Така што едно нешто да се забележи и тоа е обично навистина важно, е во тоа што оваа sizeof е супер корисно да се користи бидејќи во зависност од видот на машина сте водење, тогаш може да има различна количина на меморија, која што е потребно. Така што секогаш сакате да го користите големина на па дека не сте машина зависни, така што вашиот код ќе работи на било која машина. И тоа е само дел на пишување добри код. Ако тоа функционира на една машина, но не било кој од другите, колку корисни е вашата програма? Така што секогаш сакаат да бидете сигурни дека и го користат sizeof. ПУБЛИКАТА: Така е дека, како и големина од 10 инчи [нечујни]? SPEAKER 1: Овој е со големина од 10 целочислените. да. Па големината на целочислените ќе се врати колку земе една int. Или големина на знак, како Колку чини еден знак земе. А потоа и како многу блокови на тоа сакаш? Значи во овој случај, ние сакаме нешто дека ние може да се сместат 10 целочислените да. И ќе функционира без оглед на машина, која се олади. Значи колку бајти ќе кои всушност ви даде? Брзи математика. ПУБЛИКАТА: 40. ЗВУЧНИЦИ 1: 40. Точно. Така уште една голема работа. Покажувач или Примерок може да се врати нула. Значи, повторно, секогаш проверете, за да види ако се врати нула пред да се обиде и да се направи нешто со неа. Ако се обидете и разыменовывать овој покажувач сега, тоа е само случува да сегментации затоа што си отишла и се обидел да се допре нула кога не треба да има. Па секогаш се провери за ништовни. Повторно, сите можете да направите. Тоа би можело да се врати нула. Тоа ќе се врати NULL ако сте или надвор од просторот или за која било причина тоа се стрча во некои меморија ошибка. Тоа понекогаш само се враќа NULL. Па вие само треба да се провери за тоа. Тоа е сето ова слајд кажува. А потоа она што го имаме тука е повик да се ослободи. Па во истиот начин на кој, ако отворите датотека мора да го затвори датотека, ако ви Примерок меморија, мора да ве ослободи дека меморијата. А вие момци ќе добиете да се направи навистина кул работи. И има една програма која може да се кандидира за види ако сте некогаш протекување меморија. Но, вие не сакате да излегуваат во јавноста меморија. Тоа е навистина лошо. Само плеткаш работи. Тоа е лошо да се направи само како програмирање мудар за дизајн ефикасност. Но, тоа е, исто така, само вид на лошо за вашиот компјутер. Па само бесплатни работи кога ќе ги Примерок. Вие момци види симетрии тука. Супер едноставен. Само слободни и потоа без оглед на вашата покажувач, без оглед на името на го покажувачот е, и тоа ќе се грижи за ослободување на тоа за вас. Кул. Тогаш имаме ова. Па ние сме само ќе да одиме преку оваа програма. А потоа вие момци се направи. Така [нечујни] само главните. Па ние имаме некои int * покажувач. Па ние имаме покажувачот што се случува да се одржи целочислените. И колку целочислените е тоа нема да се одржи? Само на еден. Големина на int. Ние се провери да се види дали покажувачот е нула, бидејќи тоа е, ние сакаме да се каже, не прават ништо. Тоа е лошо. Па ние печати некои грешка од меморија, најчесто се врати 1, како вие момци се користи за да се. И тогаш имаме тука, ние разыменовывать нашите покажувач. Па тоа значи дека ние ќе треба да се сместат нешто на локацијата дал. Int * покажувач, или Примерок, се враќа адреса на местото каде што го издвои овој меморија за вас. Така, тоа е во основа кои ви даваат like-- ако ви се размислува за еден куп на куќи во соседството дека сакате да се стави вашиот мебел во, Примерок е како ОК, ќе го добиете да се оди во куќата на три. И тоа ви дава адреса на куќата три. Па ова право сега, овој покажувачот продавници адреса, продавници адреса на вашата куќа. * Кон меморија средства, во ред, јас сум во мојата куќа. Кул. Јас треба да добие некои цел број. Па ти си прашува за некој да ви даде мебел сега. Па ќе го добиете некои Int. И тоа го става во вашиот покажувач каде што тоа е покажувајќи на. И потоа тоа само отпечатоци надвор, сте го внеле каде. И повторно, референца. Значи ова е како ќе отиде во ова адреса и видов она што беше таму. Кул? А потоа се разбира, ние ослободи нашите покажувач. Не заборавајте да го ослободи вашиот покажувач. Не заборавајте да се провери за ништовни. Не заборавајте да го ослободи вашиот покажувач. Имате две работи што се сеќавам од ова, или дека треба да се запамети. Да. ПУБЛИКАТА: [нечујни] нешта како што, char * s. Како дојде ние никогаш не ослободи оние? ЗВУЧНИЦИ 1: Хм? ПУБЛИКАТА: Дали оние како жици? Ти рече стрингови се исто како char * s, нели? Па зошто да не се ослободи жици? ЗВУЧНИЦИ 1: Можете само да бесплатни ако сте mallocing. ПУБЛИКАТА: О, ако сте mallocing. ЗВУЧНИЦИ 1: Значи Примерок и слободни две работи дека секогаш треба да имаат заедно. е отворен, е во близина, две работи треба да имаат заедно. Во двата овие случаи, проверете за ништовни. Да. ПУБЛИКАТА: Значи слободен е само дозволувајќи им на нешто друго што треба да се чуваат таму, по оваа програма се користи? ЗВУЧНИЦИ 1: Тоа е само велејќи, Добро, јас сум се направи со тоа. Вие не треба да го задржи околу. Во спротивно вашиот компјутер ќе се Исто како и обидете се и да ја задржат таму. А потоа можете can't-- бега во меморијата прашања подоцна. Вие секогаш сакате да го ослободи, бидејќи го кажува вашиот компјутер, во ред, јас сум направи со ова место на меморија. Можете да го имаме назад за мене да се користи подоцна. Кул? Да. ПУБЛИКАТА: Значи ние се користи за% d само затоа што двојно дека доаѓа назад, или зошто is-- [нечујни]. ПУБЛИКАТА: Можете ли да ги користите% i? ЗВУЧНИЦИ 1: Можете да ги користите% i. Било последен момент прашања? Оди напред. ПУБЛИКАТА: Јас само имаат брз прашање. Така кон меморија променлива, that's-- како, со int * кон меморија = Примерок, тоа е само велејќи дека тоа е покажувајќи на една место во memory-- ЗВУЧНИЦИ 1: Дали сакате [нечујни]? ПУБЛИКАТА: --that е големина of-- не, тоа е во ред. Но тоа е само укажува на едно место во меморија што е исто како и четири бајти. ЗВУЧНИЦИ 1: Токму така. Така Примерок на големината на вели int, Добро, јас одам да си избега, најдете четири бајти меморија за вас. Кога ќе најде дека четири бајти од меморија, ви дава поддржат адреса на која почнува, и тоа е она што се чуваат во покажувач или кон меморија. Добро. Вие момци изгледа помалку збунети од повеќето луѓето кога зборувам за покажувач, па јас сум чувство прилично добро во моментов. Добре. Како и секогаш, вие момци треба да имаат сите добивано и вашиот pset2 оценки од сега. Знам, имало некои згреши работи каде што се вели, формула не е валидна или нешто. Ако сте добивање на тоа, сите Вашата оценки се валидни на моја страна. Па можам да ви испрати screenshot-и од вашиот степени. Само да ме известите, како и ако сте недостасува било оценки или нешто не чини да се направи смисла. Дојде до мене. Сум бил супер горди на вас момци веќе, па го задржи. И да имаат добар остатокот од твојот недела. Сигурен сум дека ќе видиме некои на вас на работното време.