[Музычная тэма] СПІКЕР 1: Прывітанне, усім. Сардэчна запрашаем у профіль. Выдатны дзень out-- таму, я Безумоўна, ёсць толькі чатыры з вас тут і ня наш звычайны пакет. Я быў хворы ў гэтыя выходныя. Так у мяне няма Starburst для вас, хлопцы. І я магу пачаць кашляць жахліва на працягу ўсяго гэтага. Так што церпіце мяне. Я збіраюся сапраўды паспрабаваць і праз гэта па-першае, хоць, перш чым я ёсць кашаль атаку. Але проста быць лёгка на мяне ў трохі bit-- што ўсё, што я прашу. Такім чынам, наша позва дня раз сёння проста reminder-- ваш тэст на наступным тыдні. Я сказаў вам гэта на мінулым тыдні, так гэта не злавіць вас знянацку. Так што я нагадваю вам яшчэ раз. На наступным тыдні ваш тэст. Для гэтага, на наступным тыдні Падзел будзе значна больш of-- я паспрабую і праца ў нейкі агляд. Так што, калі вы, хлопцы, маглі дапамажыце мне, даслаўшы мяне рэчы, якія вы адчуваеце сябе камфортна з, што вы турбуецеся аб, тэмы, якія вы хацелі б для мне, каб пакрыць, што было б выдатна. Так што я магу паспрабаваць і працаваць іх у нашым раздзеле на наступным тыдні або адправіць дадатковы матэрыял або звг што вы не маглі б атрымаць у іншым месцы. Так! Іншыя людзі ідуць! Я думаў, я гэта зрабіў дрэнна ў мінулым тыдзень, што ніхто не хоча вярнуцца? Мне страшна. Так трох іншых рэчаў што мы збіраемся перайсці з'яўляюцца перанакіраванне, файлавы ўвод / выснова, і Затым паказальнікі і дынамічная памяць. Я ўпэўнены, што вы ўсё супер ўсхваляваныя pointers-- любімая тэма кожнага, так проста зразумець. Я ўпэўнены, што вы, хлопцы, усе атрымалі, што, ці не так? Так пра ўсё па парадку, redirection-- гэта ў асноўным проста спосаб кантраляваць, як вы ўваход рэчы ў вашай праграме, як вы выводзьце рэчы з вашай праграмы. Асноўныя шляхі што вы, хлопцы былі узаемадзейнічаючы з ім толькі праз стандартны вывад з экрана друку тут. Але ёсць спосабы pipe-- як мы бачым тут з'яўляецца адным з нашых words-- роду з трубы, што інфармацыя або, што дадзеныя ў файл з файла. Гэта проста розныя спосабы атрымліваць рэчы ў вашай праграме і з вашай праграмы, замест таго, проста друкаваць іх на гэтым экране або ўводу рэчы з каманднага радка. Такім чынам, спачатку адзін мала больш, чым ўстаўкі. Так output-- ён проста друкуе выснову у файл замест экрана. Так што калі вы што-тое, што друкаваны "Прывітанне, свет!" да экрана, калі вы змесціце яго замест у output.text, што стварае гэты файл з імем output.text. І калі вы адкрываеце яго, гэта будзе сказаць "Прывітанне, свет!" ў там. Гэта можа быць супер карысна калі ў вас ёсць тона памылак на самай справе, як мы бачым у гэтым. Калі вы робіце два карэткі, гэта будзе друкаваць паведамленні пра памылкі. Так што калі ў вас узніклі праблемы з складанне, ён мае шмат памылак і вы загразнуць у спробе для пракруткі ў камандным радку праз усе іх, вы можаце проста раздрукаваць іх у файл, адкрыць файл, так што вы можа прагартаць іх лягчэй. Я на самой справе выкарыстоўваюцца, што шмат, калі я быў адладкі мае 181 psets для машыннага навучання. Так, гэта можа быць вельмі карысна ў далейшым. Гэта таксама карысна, калі ў вас ёсць праграма што, магчыма, генеруе бібліятэку або стварыць некаторы набор радкоў, і вы павінны быць у стане бачыць, што што генеруе іх належным чынам. Гэта спосаб зрабіць гэта. Так што калі Вы будзеце друкаваць іх у файл, вам лягчэй вывучаць іх, ці не так? Супраць спрабуючы пракруціць праз камандную радок. А потым адна рэч звярнуць увагу з'яўляецца тое, што з проста больш чым карэткі, калі вы пішаце у файл, які ўжо exists-- бо калі мы пабеглі гэта першы Час, мы паклалі яго ў output.text, а затым у нас быў другі праграмы што надрукавана гэта як праграмы два і зрабіў больш, чым у output.text, ён перапіша that-- так перапісаць тое, што было калі-небудзь у што файл з самага пачатку. Так што, калі вы хочаце, каб дадаць ў файл, як мы бачым, тут, Вы проста робіце два больш, чым знакаў. І гэта будзе дадаваць да яго. Гэта не будзе перазапісваць яго. Так што, калі вам трэба працаваць з некалькімі Праграмы і выгляд трымаць трэк з таго, што ўсе яны з'яўляюцца вяртаючыся да вас у файле, гэта спосаб зрабіць гэта. Калі вы не клапоціцеся, што ў вашым файле і гэта дазволіла быць перапішуцца, Вы можаце проста выкарыстоўваць адзін больш, чым. Ці мае гэта сэнс для ўсіх? АЎДЫТОРЫЯ: Як кропка слэш прывітанне больш чым выхад кропка тэксту, як у два разы, гэта проста паказваць толькі на выхадзе Кропка тэкст другі time-- СПІКЕР 1: Права. Так што гэта будзе ў асноўным толькі цалкам перапісаць тое, што было там з самага пачатку. Калі гэты файл тут, output.text ўжо існуе, у асноўным усё, што вы называеце што зноў з адной Вялікага чым вы можаце проста думаць пра гэта як, як ён замяніў файл. Напрыклад, калі вы захоўваеце Слова дакумент, і вы захаваеце як, і вы захаваннем імя, і ён цалкам перапісвае it-- гэта тое ж самае роду рэчы. Хто-небудзь ёсць якія-небудзь пытанні па проста выснова ў файл? Дзіўны. Так, відавочна, калі вы звернеце стрэлка кірунак, ён можа зрабіць уклад. Таму, калі вы, хлопцы, былі як Цэзар або Visioneer і вы павінны былі ўводу-то, Вы мелі аргумент каманднага радка што на самой справе ўваход ён. Гэта яшчэ адзін спосаб зрабіць гэта. Такім чынам, замест таго, каб чакаць для каманднага радка, як і калі вы папрасілі вашага паведамленне Цэзара або Visioneer, калі ў вас ёсць тэкставы файл што было паведамленне, Вы можаце проста набраць яго ў тым, што. Так што, калі б гэта было, як кропка слэш Цэзара 3 менш, чым стрэлка ўводу тэксту, які Ваша паведамленне, што будзе працаваць нармальна. Калі ваша праграма Цэзар фактычна папрасіў ўводу карыстальніка, гэта было б ужо ёсць, таму што вы набралі ў гэтым файле. Гэта проста яшчэ адзін спосаб. Проста зваротная output-- проста ўваход для вашых дадзеных. І тады апошні з якіх з'яўляецца труба. Такім чынам, гэты даволі халаднавата. Таму што ён дазваляе ўзяць выхад адзін Праграма і паклаў яго ў якасці ўваход у іншую праграму. Я не ведаю, калі хто з вас гуляў з расшыфроўкай што CS50 могуць мець даў вам, але гэта было б дазволіць вам ўзяць некалькі узораў падаць, увядзіце яго ў свой шыфравання, а затым адтуль увядзіце што ў вашым расшыфроўкі каб пераканацца, што яна аказалася такой жа. Так што гэта накшталт як трехходового завесы. Пайсці на гэта. АЎДЫТОРЫЯ: Калі праграмы мае некалькі уваходаў, ці ёсць спосаб, каб сказаць яму, які прыход выкарыстоўваць тэкставы файл або выхад для? СПІКЕР 1: Яна мае некалькі уваходаў. Што б падаць input-- калі гэта задаеце пытанне, што першы раз, гэта буду лічыць, я думаю, што гэта збіраецца трубы ў ўвесь файл. Так што калі ў вас ёсць некалькі ўваходаў, вы будзе пякуча ў некалькіх файлах. Так што, калі вы просіце паведамленняў тры разы ў кодзе, Вы збіраецеся пакласці ў трох розных файлаў. І гэта становіцца вар'ятам. І вы не павінны турбавацца аб тым, што прама цяпер. Але гэта ідэя. Так што так, труба толькі выхад адзін Праграма выкарыстоўвае ўваход у іншую. Ўсё там добра? Прахладны. Добра. Вы, верагодна, не будзе мець зрабіць занадта шмат з ім. Але вы павінны разумець, спосабы вы можаце выкарыстоўваць гэта. І ёсць выпадкі, што Вы, магчыма, захочаце выкарыстоўваць яго. Так падаць I / O-, я ведаю, што ты saying-- мы прывыклі чытаць з і пісаць у наш экран ёсць, які з'яўляецца стандартным ў і стандартны вывад. І гэта тое, што вы, хлопцы, былі рабіць з пачатку класа тут. Але вы таксама можаце чытаць і запісваць файлы, які ўсё-файл I / O-, так ўваход падаць, Выхад усё гэта азначае. Так што гэта ў асноўным азначае, што Вы можаце захоўваць вашыя дадзеныя цяпер. Калі вы проста раздрукаваць яго на Экран, гэта ў асноўным сышлі, ці не так? Як толькі вы зробіце "Hello Свет "і запусціць" Прывітанне, свет " ён друкуе "Hello World" на экран. Але вы не можаце сапраўды зрабіць што-небудзь з ім адтуль. Калі вы захоўваеце ў тэксце Файл, затым раптам ў вас ёсць гэтыя дадзеныя, што вы дазволілі маніпуляваць або пакласці яго ў файл або пакласці яго ў праграму пазней. Адна з прычын, чаму мы робім гэта проста як спосаб захоўвання дадзеных для наступнага выкарыстання. У мяне ёсць пару крокаў тут проста хадзіць праз стандартны I / O. На першым этапе, вы трэба стварыць спасылку ў файл з усё каўпачкі ПАДАЦЬ зоркі файл. Так што стварае паказальнік на файл. Такім чынам, вы хочаце, каб адкрыць яго. А вы кажаце, у літаральным сэнсе, проста файл роўны FOPEN. І гэта збіраецца вярнуцца паказальнік на файл, які вы толькі што адкрылі. Я бачыў пару вас Хлопцы ў працоўны час. Але адна з рэчаў, з'яўляецца remember-- паказальнікі можа быць нейкі адрас або нулявым, ці не так? Калі мы калі-небудзь выпадак, калі што-то можа вярнуцца нуль, Што мы павінны зрабіць, перш, чым мы калі-небудзь выкарыстоўваць яго? Мы павінны праверыць, калі гэта нуль ці не, ці не так? Таму што некаторыя з вас, магчыма, былі Пытанне, дзе любы аб'ект была вяртаецца ў прарыве быў нулявым. Вы спрабавалі выканаць некаторая функцыя на ім. І ваш кампутар сайт парушанымі. Ці не так? Б'юся аб заклад, пару вас магчыма, мелі гэтую праблему. Так з FOPEN, FOPEN будзе альбо вяртае паказальнік на файл, або калі нешта пойдзе не так, ён збіраецца вярнуцца нуль. Такім чынам, вы заўсёды павінны праверыць што ён не вярнуўся нуль перш чым спрабаваць што-небудзь зрабіць. Гэта як стандартны парадыгмы што вы будзеце мець патрэбу тут. Калі ёсць усе шанцы, што што-то можа вярнуцца нуль, праверыць, каб пераканацца, што яго ня, перш чым працягнуць. У адваротным выпадку, вы будзеце каб атрымаць выдатныя памылкі сайта. І ніхто не любіць мець справу з тымі. Так як мы бачым тут, першы аргумент гэта толькі шлях да файла. Калі гэты файл не існуе, ён збіраецца стварыць файл. І гэта проста будзе пустым. І тады другі аргумент з'яўляецца рэжым, які вы хочаце. Хочам Ці мы, каб чытаць з гэтага файла? Хочаце напісаць ад яго? Хочаце дадаць? Так на самой справе тое, што я проста 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 друкуе фармату вываду. Так што калі ў вас ёсць ўкладкі, або прастору, ці яшчэ шмат чаго. А потым FWRITE піша некаторыя Масіў байтаў ў файл. Так што гэта той жа самы шлях FWRITE і FREAD аналагічныя opposites-- fgets, fputs, і затым fputc і fgetc-- шмат з вар'ятаў, хуткія рэчы. Проста выгляд захаваць гэты handy-- Вы будзеце мець розныя часы дзе вы проста хочаце адзін знак за адзін раз. Можа быць, вы хочаце цэлую лінію. З вашай слоўніку pset-- які знаходзіцца ў двух psets, Я лічу, мы даем вам усю слоўнік у тэкставым фармаце які мае кожнае слова падзеленыя лініяй. Так што, калі вы хацелі, каб прачытаць адным словам у той час, Што вы маглі б выкарыстоўваць, калі вы чытаеце і ўсе яны падзеленыя на новых лініях, і вы проста хочаце адно слова за раз? Аўдыторыя: Fgets СПІКЕР 1: Права. Fgets-- таму што вяртае усё, што знаходзіцца на адной лініі. І калі кожнае слова з'яўляецца яе ўласная лінія, мы можам выкарыстоўваць fgets. Прахладны. Ці мае гэта сэнс, усё? Прахладны? Так, мы збіраемся, каб дабрацца да самае цікавае з паказальнікамі вельмі хутка, дзе вас дабрацца да зоймемся матэматыкай. І гэта будзе выдатна. Апошняе step-- зачыніць файл. Што так шмат рэчаў тут, адзін з нашых парадыгмаў ці з'яўляецца яна можа вярнуцца нуль, праверце нуль. Калі вы адкрыеце што-тое, Вы б лепш закрыць яго. ОК, так што вы не зрабілі, пакуль вы не зроблена, калі вы не зачынілі яго. Накшталт як гэта не больш пакуль тоўстая дама спявае. Вось як закрыццё файла. Як гаворыцца тут, проста каб паўтарыць, заўсёды адкрыць файл, перш чым вы чытання або запісы на яго. І заўсёды закрыць яго, калі вы адкрылі яе. Добра? Прахладны. Дык вось прыклад. Так tiny-- Я не ведаю, калі вы Хлопцы відаць, што вельмі добра. Калі б мы толькі маглі павялічыць яркасць як-то. Дазвольце мне на самой справе зрабіць гэта, калі я магу. ОК, вы, хлопцы, не магу сапраўды бачыць, што наогул, можа вы? Добра, што мы збіраемся зрабіць гэта, то. [Неразборліва] Я мяркую, гэта нашмат лепш, каб убачыць. Можа хто-небудзь убачыць, дзе мой мышы пайшлі ў чым пытанне? Ах, вось яно is-- што змагаецца! Добра. У прынцыпе, вы, хлопцы, павінны мець выгляд ідэі аб тым, што гэта робіць. Гэта не ідэальна. Але я хацеў бы растлумачыць, чым марнаваць больш часу, спрабуючы адфарматаваць яго належным чынам. У асноўным, як вы бачыце тут, мы пачынаем з адкрытым файлам. І ў нас ёсць некаторыя Файл базы дадзеных, што мы адкрыццё, што кажа, што гэта нашы студэнты. І мы збіраемся пісаць у яго. Таму, вядома, вярнуцца нуль. Такім чынам, мы павінны праверыць на нуль. І потым, калі гэта не нуль, мы ідзем да канца. І, як вы бачыце, мы цыкл па тут. Ёсць студэнты. Студэнты з'яўляецца хэш вызначаецца як тры. І тое, што мы робім, мы друк у файл, ці не так? Дык што ж мы раздрукоўкі на наш файл? Аўдыторыя: балы што ў масіве? СПІКЕР 1: Так. Балы, якія ў array-- дакладна. Такім чынам, мы адкрываем гэты Файл базы дадзеных, якія Я мяркую, што гэта нейкая з базы дадзеных марак. І мы проста Раздрукаваўшы ацэнкі кожнага студэнта да гэтага файлу. Прахладны? Добра. Дзіўны. Добра. Давайце вернемся to-- Залы: У мяне кароткі пытанне. З'яўляецца Printf не ў працягу цыкла? Вось толькі ў калі завесы? СПІКЕР 1: Не, гэта на працягу цыклу. Я не магу бачыць маю мыш вельмі добра тут. Так што я з цяжкасцю Фармат, які належным чынам. Гэты кранштэйн, павінны знікнуць. Ён павінен быць тут. Гэта тое, што ў цябе на працягу цыклу. Там. Зараз гэта даволі. Дык вось, як гэта павінна be-- выключэннем для гэтага апошняга кранштэйна, што я звольнены. Добра. Ці мае гэта сэнс для ўсіх? Добра. Мы збіраемся рухацца далей да наступнай рэчы then-- якія, на самай справе, вы збіраецеся мець патрэбу, каб убачыць код. Так што я проста збіраюся скапіяваць, што больш цяпер. Добра. Так што я збіраюся паказаць вам, хлопцы гэты код. І я хачу, каб вы паспрабавалі і фігура тое, што ён павінен рабіць. Таму, улічваючы, that-- заняць хвіліну ці каля таго. Паспрабуйце высветліць, што тут адбываецца. Любыя ідэі? Мы ведаем, што ў нас ёсць па меншай меры два Аргументы ў камандным радку, ці не так? Я мяркую, адна з якіх будзе што [неразборліва] з нашай праграмы з'яўляецца а затым што-то яшчэ. Таму што, калі [неразборліва] менш чым два, мы крычаць на іх. Ці не так? І ад выкарыстання, гэта выглядае як гэта будзе свайго роду файл. Мы ўсе згодныя з гэтым? Так што цяпер, што пятля рабіць? Што гэта перажывае? АЎДЫТОРЫЯ: Усе файлы. СПІКЕР 1: Дакладна. Гэта адбываецца праз усе файлы, якія мы ўваход там. Такім чынам, для кожнага файла, гэта адкрываючы некаторую радок там. Гэта адкрывае файл. Ці не так? І гэта чытанне з яго. Вядома, праверкі, калі гэта нуль. А потым ён друкуе. Калі гэта нуль, гэта проста кажа нам што гэта не файл, які існуе. Таму што памятаю, з чытаць наш файл павінен існаваць. Ці не так? З запісу і дадаць, Вы можаце сысці з ім. Але з прачытаным, наш файл павінен існаваць. І потым, калі яна сапраўды існуе, Што мы тут робім? Давайце проста пачаць тут. Што гэта do-- гэты першы знак. Што ён робіць? Ён атрымлівае адзін знак, ці не так? Так што гэта робіш? Гэта становіцца першы знак. Хто-небудзь ведае EOF? АЎДЫТОРЫЯ: Канец файла? СПІКЕР 1: Канец file-- дакладна. Так гэта будзе ісці праз ўвесь файл, ці не так? І тады гэта будзе абнавіць з дапамогай атрымліваць кожны наступны характар. Ці не так? І што ён робіць? АЎДЫТОРЫЯ: Увод што in-- СПІКЕР 1: Putchar прынты у застаўку. [Неразборліва] характар. А потым, калі ён [неразборліва] гэта зачыніць файл. АЎДЫТОРЫЯ: Вы не маеце патрэбу ў [? яшчэ? ?] СПІКЕР 1: Не абавязкова. Я маю на ўвазе, што гэта свайго роду маецца на ўвазе ў гэтым. З-за гэтага вяртае, тым не менш, да таго часу, як гэта не злавіць гэта, вы выдатныя. Я маю на ўвазе, што гэта, верагодна, добра практыкаваць рабіць у іншым месцы. Але яшчэ не заўсёды Неабходна асабліва калі ў вас ёсць што-то як вяртанне, якое азначае, што ў гэтым выпадку, калі ён ўлоўлівае гэта, ваша праграма будзе ў канчатковым і гэта ніколі не дабрацца да гэтага. Гэта больш для выпадку, калі вы знаходзіцеся не абавязкова вяртацца што-то. Таму што, калі гэта не было вяртання нічога, гэта будзе азначаць, што калі б гэта было праўдай, Астатнія гэта будзе па-ранейшаму працаваць. І ў гэтым выпадку, вы хацелі б ілжывым. Калі гэта вяртанне, і канчатак вашай праграмы, яшчэ не трэба ўсё час, у залежнасці ад кантэксту. Джейкоб, ты ёсць пытанне? АЎДЫТОРЫЯ: Так. Гэтак жа fgetc атрымаць наступны сімвал? Як павялічыць персанаж? СПІКЕР 1: Так. Так fgetc атрымлівае наступны знак. Вы можаце думаць пра гэта як C ++, у пэўным сэнсе. АЎДЫТОРЫЯ: Дык што ж EOF? СПІКЕР 1: EOF з'яўляецца канец файла. Гэта проста маркер, які дазваляе даведацца, што ты ў канцы файла. Дык гэта будзе раздрукаваць на свой стандартны вывад. І тады гэта будзе зачыніць файл, калі гэта робіцца. А потым пойдзем у наступны файл, ці не так? Такім чынам у агульным, то што гэта праграма? [Неразборліва] СПІКЕР 1: Так. Гэта проста выводзіць ўсё там. Так што, калі вы, хлопцы, калі-небудзь выкарыстаў КПП а затым імя нейкай file-- Я не ведаю, калі любы з вас ёсць калі-небудзь рабіў, што на вашым тэрмінале. Але калі вы калі-небудзь выкарыстоўваць Каманда CAT-- C-A-T-- а затым усё, што файл ў вас ёсць there-- яго друкуе яго на тэрмінал, які можа быць супер зручна для некаторых рэчаў. Я выкарыстоўваю гэта шмат. Ці мае гэта сэнс для ўсіх? Прахладны? ОК так што ваша задача now-- альбо самастойна або з людзьмі вакол you-- гэта проста напісаць простую праграму што будзе проста напісаць "Hello, World!" у файл. [Неразборліва] [Неразборліва] СПІКЕР 1: Я быў бы, зрабіў Я раблю, што дрэнна на мінулым тыдні? Я не думаю, што гэта было тое, што дрэнна. Я рады, што вы ўсе тут. Гэта сапраўды робіць мяне шчаслівым. Я дзяўчына з простых задавальненняў. Мне проста падабаецца, калі мой раздзел наведвае. Так што я проста атрымліваю гэта пачалося для вы, хлопцы, так што мы можам закадаваць разам. Я не люблю пакласці нікога на месца, калі вы не хочаце быць. АЎДЫТОРЫЯ: Для віктарыны, зрабіць мы павінны напісаць праграму? СПІКЕР 1: Вас могуць папрасіць, каб пісаць простыя праграмы ўручную. Ага. АЎДЫТОРЫЯ: Віктарына на наступным тыдні, ці не так? СПІКЕР 1: Віктарына ў наступную сераду. Гэта азначае, што ёсць выдатны [? CSE?] сартаванне партыю пасля гэтага, які значыць вы атрымаеце свае вынікі таму, што night-- у які час? Хто ведае? Але гэта будзе ў той вечар. Добра. Як мы хочам пачаць гэты? Я дам вам hint-- пачынаецца з гэтага. АЎДЫТОРЫЯ: Вы павінны адкрыць файл. СПІКЕР 1: Так. Дык што ж вы хочаце назваць гэта? Вы проста хочаце, каб называць яго "файл"? Давайце зробім гэта лёгка. Так fopen-- што наш Выхад тэст будзе? Назавіце гэта "Прывітанне". І тое, што наша рэжым? Што мы робім, каб гэты файл? АЎДЫТОРЫЯ: Чытаць. Напісанне. СПІКЕР 1: Мы пішам да яго. Выдатны. Такім чынам, у нас ёсць гэты файл. Што мы павінны зрабіць? АЎДЫТОРЫЯ: Праверце, калі гэта нуль. СПІКЕР 1: Праверце, калі гэта null-- дакладна. Вось што я хацеў бы пачуць. Гэта павінна быць аўтаматычным, асабліва у значнай ступені з гэтага моманту. Калі вы пачынаеце segfaulting, вы, верагодна, не правяраў на нуль недзе. У дзевяці выпадках з дзесяці, што гэта будзе вашым памылцы. Так што, калі вы маглі б проста атрымаць у Звычка, заўсёды правярайце, калі гэта нуль, Ваша жыццё будзе добры і easy-- або прасцей. Так праверце, каб убачыць, калі гэта нуль. Так што, калі гэта не нулявая, якія гэта тое, што челка роўная азначае: ня null-- гэта дзейнічае. Што мы хочам зрабіць? Мы проста хочам, каб раздрукаваць у гэтым файле, ці не так? Так што мы збіраемся выкарыстаць? АЎДЫТОРЫЯ: Fprintf СПІКЕР 1: Fprintf-- выдатны. І fprintf прымае два arguments-- дзе гэта гэта адбываецца і што мы хочам раздрукаваць. Так што першым? Дзе гэта адбываецца? АЎДЫТОРЫЯ: Файл. СПІКЕР 1: Гэта збіраецца падаць. І тое, што мы хочам надрукаваныя? "Прывітанне, свет!" Добра. У нас ёсць адзін апошні thing-- яшчэ адзін вялікі парадыгма тут. АЎДЫТОРЫЯ: Зачыніць. СПІКЕР 1: Зачыніць. Там вы ідзяце. АЎДЫТОРЫЯ: гэта адбываецца калі файл з'яўляецца несапраўдным? СПІКЕР 1: Не, гэта, калі гэта не нулявая. АЎДЫТОРЫЯ: О, калі гэта не-- ОК. Для FOPEN а затым два аргументу, якія ідуць ўнутры, Што ж першы аргумент азначае зноў? СПІКЕР 1: Аргумент гэтак жа, як імя файла што вы хочаце пайсці. Такім чынам, пасля гэтага працуе, вы б ёсць файл з імем "прывітанне" што было "Hello, World" ў ім. Гэта ўсё. Адно толькі назва. АЎДЫТОРЫЯ: І так як гэта пісаць, Файл не павінен існаваць. Гэта тое, што вы сказалі? СПІКЕР 1: Права. Дакладна. Калі "Hello" у выглядзе файла яшчэ не існуе, гэта збіраецца стварыць файл з імем Hello "і пісаць у яго для вас. АЎДЫТОРЫЯ: Калі вы кажаце праграма для пісалі ў файл, чаму ты пішаш "файл", а не Імя файла і fprintf-- СПІКЕР 1: Таму што ў гэтым выпадку ў нас ёсць што вялікая FILE-- усё ў caps-- зоркі, падаць. Так што гэта паказальнік на файл што вы кажаце. Гэта шлях, які мы проста спасылацца на яго. Такім чынам, у гэтым выпадку, вы можа думаць аб file-- ага, мы можам выкарыстоўваць this-- файл тут ставіцца да адкрыцця "Прывітанне" і дазваляючы яму пісаць. АЎДЫТОРЫЯ: Ці можам мы паставіць "Прывітанне" замест [? проста?] е файл? СПІКЕР 1: Не, таму што "Прывітанне" павінен быць адкрыты і даступны для запісу. Файл вось як Абазначэнне што кажа ОК, мы ёсць гэтая file-- hello-- што мы глядзім на. Ён быў адкрыты. І мы збіраемся пісаць у яго. Калі вы проста карыстаецеся "Прывітанне", што інкапсулюецца ў ім. Дык гэта будзе хвалявацца. Я маю на ўвазе, вы маглі б назваў яго. Вы маглі б зрабіць файл, зорка, "Прывітанне", роўна, што. Але ўся справа ў тым, што вам патрэбен файл зорка паказальнік ў парадку каб мець магчымасць выкарыстоўваць гэтыя функцыі. АЎДЫТОРЫЯ: Не маглі б вы зрабіць Файл, зорка, файл, "Прывітанне" ці вы павінны пакласці зорка файл, файл з ім? СПІКЕР 1: Вы маглі зрабіць файл, зорка, "Прывітанне". Вы можаце змяніць гэта, каб любое імя вы хочаце. Гэта цалкам адвольна што гэта імя. Вы можаце назваць гэта нічога. Назавіце яго палёт спагецці, калі вы хацелі. АЎДЫТОРЫЯ: Што такое "ш" у двукоссі для? СПІКЕР 1: "ж" гэта проста рэжым. Так што мы пішам у гэтым файле. Усё добра? Ясна? Так. АЎДЫТОРЫЯ: Дык што, калі ён піша гэта падаць, куды мы потым знайсці гэты файл? СПІКЕР 1: Гэта будзе ў тым жа Каталог, які вы ў цяперашні час у. Калі вы знаходзіцеся ў PSET трох і запуску гэтага, у вашым PSET тры тэчкі будзе гэты файл называецца "Hello". Прахладны? Усё добра? Я адчуваю, што ты ўсё атрымліваць яго, і гэта выдатна. Добра. Такім чынам, вернемся да маёй слайд show-- Я люблю, калі ўсё працуе. ОК, pointers-- Ці вы, хлопцы, рады? Паказальнікі вялікія. Яны бяруць трохі каб абгарнуць вакол галавы. Гэта мой другі год навучальныя паказальнікі. І я думаю, што я, нарэшце, атрымаў яго. Так што, калі вы змагаецеся, гэта нармальна. Як я ўжо казаў, малявання вельмі дапамагае з рэчамі ў CS, столькі, колькі я думаю, што людзі, як правіла, думаць пра, мы на кампутары. Мы павінны проста код. No-- карцінкі малявання сапраўды дапаможа вам. І я сапраўды заклікаю вас падлучыцца да вашай выхавальнік боку і вывесці крэйды або маркеры і нічыя. Таму што гэта дапаможа вам. І калі вы бачыце мяне ў працоўны час, я будзе цягаць стосы папер з ручкі малявання рэчы. Так, асабліва з pointers-- маляваць карцінкі. І я ўпэўнены, што мы на самай справе збіраемся быць малюнак некалькі фатаграфій тут таксама. Так вы, хлопцы, усе ўбачылі Бинки, гэта крута claymation рэч. І мы думаем, што гэта сапраўды смешна, калі ён выбухае ў кучу кавалкі. Гэта нейкі камічны для класа. З [неразборліва] гэта вялікае ўменне каб быць у стане кантраляваць памяць. І гэта адна з рэчаў, якія на самай справе робіць гэта такі магутны мову. Але з прыходзіць вялікая сіла вялікая адказнасць. І вар'яты рэчы могуць адбыцца калі вы не будзеце асцярожныя. Так што, калі вы карыстаецеся паказальнікі, вы хочаце зрабіць што вы разумееце менавіта тое, што вы робіце. Спадзяюся наступны трохі Час дапаможа вам сапраўды зразумець паказальнікі, як іх выкарыстоўваць, і як імі маніпуляваць. Так memory-- я ўпэўнены, што мы раней не бачыў гэтую схему. Так што гэта ўсяго толькі просты схема як рэчы могуць захоўвацца памяць. Такім чынам, вы ў асноўным маюць гэтыя Велізарныя масівы адзін байт блокаў з'яўляецца тое, што ў нас ёсць here-- невялікае павялічваецца на адзінку кожны раз. Гэта ў шаснаццатковай [неразборліва] так восем-бітныя блокі. І кожны блок звязаны з якой-то шаснаццатковай адрасы. Так што, калі вы калі-небудзь бачылі 0x, вось толькі notating што гэта адрас шаснаццатковае. Вы можаце выказаць здагадку, што гэта азначае некаторыя адрас у памяці. Мы гаворым пра адрасах памяці кожны раз, калі вы бачыце шаснаццатковае. У нас ёсць Інтс з'яўляюцца зменнымі, паплаўкі зменныя, якія захоўваюць. Так Інтс крамы цэлых лікаў. Плыве магазін плавае. Такім чынам, мы таксама паказальнікі што адрасы памяці і не захоўвайце. Гэта свайго роду карт. Паказальнікі выключна для адрасоў памяці. Дык вось, як вашага тыпу там. Ваш прыбор з'яўляецца 32-разрадным, а гэта значыць, што ваш адрас памяці чатыры байта. Такім чынам, любы паказальнік, што ў вас ёсць Таксама будзе чатыры байта. Або жа, калі гэта чатыры байта, памяць на чатыры байта. Паказальнікі магазін памяці. Такім чынам, яны чатыры байта. Cool-- проста хачу, каб умацаваць гэта. Вы павінны атрымаць гэты комікс цяпер. Я не ведаю, як многія з вас з'яўляюцца XKCD прыхільнікі, але я люблю XKCD. Выдатна. Добра. Так стварэння pointers-- як я ўжо сказаў, гэта у значнай ступені гэтак жа, як што-небудзь яшчэ. У вас ёсць тып. У вас ёсць імя. Ці не так? Гэта тое, што ў нас там. [? Hex?] Зорка азначае, што гэта паказальнік, а затым усё, што вы хочаце назваць гэта. Так тып ўяўляе тое, што вы можаце захоўваць. Добра? Такім жа чынам, што, калі мы робім цэлымі, мы ведаем, што мы запамінання Int ёсць. З паказальнікам, яго мае адрас памяці. Але што гэта азначае, that-- вось дзе малюнак збіраецца спатрэбіцца. Такім чынам, у дадзеным выпадку, мы маем некаторыя value-- скажам чатыры. Чатыры знаходзіцца на адрас аднаго. Добра? Гэта першая ў дадзеным выпадку азначае што гэта паказальнік 2x. Ці не так? Гэта нейкі паказальнік х. х можа быць нешта, што заўгодна. Што б ні х is-- сказаць х чатыры. Гэта збіраецца захоўваць адрас тут памяць. Так INT, зорка, x-- гэта некаторыя іншыя слот ў memory-- хто ведае, што гэта такое. Але гэта будзе захоўваць адрас тут. Дык гэта будзе like-- у гэтым выпадку, што б, захоўваецца ў 0x1-- незалежна захоўваюцца па адрасе, які ўтрымлівае наш паказальнік, павінен супадаць з Тое, што мы прызначаныя. Такім чынам, на 0x1, у дадзеным выпадку, гэта х. Гэта можа быць як ніколі INT а мы выкарыстоўваем гэта. Сапраўды гэтак жа, калі ў нас ёсць іншы 1г, незалежна адрас захоўваецца з ў ёсць быць char-- ж самае з г. Такім жа чынам, калі вы паспрабаваць зрабіць intx роўная 0,4, гэта будзе крычаць на вас і быць накшталт няма, вы сказалі, што вы хацелі Int. Гэта, як мяркуецца, унутр. Перастаньце спрабаваць зрабіць гэта паплавок. Так што хай усё будзе, што яны хочуць быць. Хай усё будзе сябе. Настолькі вялікі, што проста незалежна ад тыпу паказальніка гэта, вось толькі што вы можаце захоўваць там. Добра? З практыкай, як з на мінулым тыдні, усё Здаецца, сапраўды збольшага абстрактны. Мы збіраемся зрабіць некаторую практыку. Варта мець больш сэнсу. Так спасылкі і dereferencing-- гэта Вельмі важна, каб гэтыя прамыя. Я да гэтага часу, каб абнавіць то і справа. І я, як чакаюць, якой я хачу? Так Ампэрсанд фактычна даюць Вы спасылка або адрас. Такім чынам, гэта вяртае адрас у памяць аб якім зменная захоўваецца. Дык гэта будзе на самой справе вярнуцца да вас шаснаццатковае, у той час як разнаймення яго на самай справе адбываецца, каб даць вам Дадзеныя, якія захоўваюцца там. Добра? Такім чынам, мы будзем глядзець на прыклад вельмі хутка, ці на самай справе ў наступны раз. Добра. Такім чынам, мы павінны думаць сапраўды старанна пра гэта. Так вось у нас ёсць некаторы цэлае лік х. Я збіраюся паспрабаваць і зрабіць гэта з ў меру сваіх здольнасцяў. Такім чынам, мы будзем мець гэты слот х. І гэта захоўванне пяць. Яго адрас 0x4. Прахладны? Усё добра. Так што цяпер у нас ёсць гэты паказальнік. Гэта было тут. І Ампэрсанд дае нам адрас што-то. Так, у дадзеным выпадку, гэта адрас х. Што такое адрас х? 04-- і гэты паказальнік знаходзіцца на 0x08. Прахладны? Такім чынам, вы можаце думаць пра гэта Паказальнік, 04, проста паказвае тут. І яны называюцца паказальнікі таму што, як мы атрымаем больш у гэтым, Вы будзеце бачыць, паказваючы на ​​рэчы. І адзін блок паказваючы на ​​іншы блок зробіць нашмат больш сэнсу. Дык вось два. А то ў нас некаторыя копія, якая з'яўляецца што-0x0c. І гэта будзе разыменовать нашага паказальніка. Так што гэта кажу, Добра, вось наш паказальнік. Значэнне ён захоўвае гэта 0x04, І што гэта кажа, гэта зайсці на гэты адрас і скажыце мне, што гэта значыць. Дык вось эфектыўна што гэтая стрэлка робіць. Вы можаце думаць пра гэта як ваш зоркі. Так добра, калі мы робім зорку, гэта азначае прытрымлівацца. Перайсці на гэты адрас. І гэта ў асноўным толькі пасля гэтая стрэлка на гэты кавалак памяці. І даць нам тое, што ў ім, што на 5. Гэта чаму наша копія роўная 5. Ці мае гэта сэнс? Хто патрэбен мне, каб прайсці Ці што зноў, або павольней? Вы хочаце, каб я праз гэта яшчэ раз? Добра. Мы збіраемся, каб перамаляваць яго зноў. Калі мы пачынаем, мы ўсе згодныя з тым у нас ёсць некаторыя кавалак памяці гэта пераменная х, што мы усталёўваецца роўным 5. Мы не кантралюем, дзе ён знаходзіцца ў памяці. Так што гэта месца з'яўляецца проста адвольна прызначаныя. Добра там? Добра. Тады мы ініцыялізаваць паказальнік на міжнар. Вось чаму ён дазволіў, каб паказаць на х, таму што ў нас ёсць Int ў тут. У нас ёсць яшчэ адзін кавалак памяці, таму што гэты паказальнік з'яўляецца зменнай як і ўсё астатняе. Гэта адвольна прызначаныя некаторы прастору ў памяці. І тое, што ён захоўвае гэта адрас х. Ampersand азначае адрас х. Так што гэта адрас х? АЎДЫТОРЫЯ: Гэта zero-- СПІКЕР 1: 0x04. Так then-- апошнім. У нас ёсць некаторыя copy-- зноў проста яшчэ адна пераменная. Так давайце прызначым некаторыя адвольныя месцы. І мы разыменовать нашага паказальніка. Зорка азначае пайсці адрас захоўваецца ў маёй паказальніка. Скажы мне, што ёсць. Так адрас, захаваны у нашым паказальніка з'яўляецца 0x04. Так мы ідзем па гэтым адрасе. Гэта паказвае на гэты адрас. Што ўнутры гэтага блока памяці? Гэта пяць. Дык вось што мы прызначаем нашу копію. Усё добра? Прахладны. Again-- фатаграфій. Так адсочвання значэння here-- Я дазволю вы, хлопцы, думаеце аб гэтым. Мы можам зрабіць яшчэ адзін здымак. Але я хачу, каб вы паспрабавалі і прычына праз гэта самастойна на працягу хвіліны. Так як яны не даюць нам прыклад адрас, Я проста хачу зрабіць Ампэрсанд x-- якія павінны дапамагчы весці яго дадому. Ampersand азначае адрас. Такім чынам, у першай, усё ісці з першай лініі. Некаторыя х Сэта five-- некаторыя выпадковы слот ў памяці. Int зорка паказальнік роўны па адрасе х, ці не так? Стварае Int зорка паказальнік гэты блок, называе гэта паказальнік, і прысвойвае яго адрас х. Я жудасна Ампэрсанд. Цяпер тое, што мы робім, мы кажам, ОК, разыменовать нашага паказальніка. Так мы ідзем нармальна, што ў нашай паказальніка? Гэта Ампэрсанд х. Перайсці да амперсанда х і перапрызначыць яго. Так што цяпер, Ампэрсанд х будзе 35. Так у асноўным, калі вы разнаймення, вы ідзяце ў парадку. Вы збіраецеся маляваць Фатаграфіі, як гэта. Вы збіраецеся маляваць вашыя стрэлы больш, дзе гэта. Так што ў гэтым слоце ў памяці і альбо даць мне што значэнне назад, або змяніць яго. У гэтым выпадку, таму што мы на гэта Значэнне, мы прысвойваем гэта будзе 35. У той час як у мінулым адзін, калі вы заўважылі, мы былі прысваення, што было тут нешта іншае. Такім чынам, яны маюць гэты дзіўны стол. Гэта не так ужо дрэнна. Вы, хлопцы, працаваць на ім. Я збіраюся зрабіць гэта на борце. Мы збіраемся запоўніць яго разам, добра? Так захапіць некаторыя паперы, захоп партнёрам, пачаць працаваць. Я збіраюся атрымаць больш кавалак крэйды. Таму што гэта будзе шмат. Добра. ПРАФЕСАР: ОК. Пачнем з першага радка. Мы пачнем там, то вы, хлопцы, можа магчыма працаваць праз некалькі больш. Добра. роўная б раз з так, што гэта? Гэта не пытанне з падвохам, я абяцаю. СТУДЕНТ: 4 раз у 5. ПРАФЕСАР: 4 раз у 5. 20. Так што б? СТУДЕНТ: 4. ПРАФЕСАР: І з? СТУДЕНТ: 5. ПРАФЕСАР: 5. І тады гэта проста будзе быць Ампэрсанд а, Ампэрсанд б, Ампэрсанд з, ці не так? Нядрэнна. Гэта досыць проста. Добра. Так на наступны. А роўна раз с, у выпадку хто не быў знаёмы з гэтым. Ці ўсё знаёмыя з часам, роўная? ОК, усё гэта азначае: гэта скарачэнне для раўняецца раз у. Вы таксама можаце зрабіць гэта з падзелам, з таго, з адніманнем. Вы можаце зрабіць роўных, ці плюс роўная з азначае роўны плюс с, мінус, роўную C будзе роўная мінус C. Гэта проста сінтаксічны цукар. Так, у дадзеным выпадку, роўная а раз з дасць нам тое, што? Зноў жа, не пытанне з падвохам. СТУДЕНТ: 100. ПРАФЕСАР: 100. Ці змяніць што-небудзь яшчэ? Няма. Можа быць, я, нарэшце, атрымаць лепш у маіх Ампэрсанд. СТУДЕНТ: ОК, прабачце, як ты 100? ПРАФЕСАР: ОК. Так роўная раз з, так што раз с. СТУДЕНТ: О, вы карыстаецеся для previous-- ПРАФЕСАР: Так. Так што гэта нашы апошнія значэння. Гэта тое, што вы павінны быць выкарыстоўваючы па меры прасоўвання ўніз, ОК. Так, бы з'яўляецца адзіным змена рэч, ці не так? Так што давайце запоўніць усе астатняе. B. Што б будзе? Быць або не быць. Так што гэта робіш? Што такое зорка гадавых рабіць? СТУДЕНТ: Код для размяшчэння гадавых. СТУДЕНТ: Не, не зусім. Такім чынам, гэта з'яўляецца спасылкай d. СТУДЕНТ: Так б ўручаецца кошт гадавых. ПРАФЕСАР: Так, так ра адрас, ці не так? Так кажа пайсці туды, дзе ёсць захоўваюцца і даць яму гэта значэнне. Так што б? СТУДЕНТ: 100. ПРАФЕСАР: 100. Ідэальны. Такім чынам, рс што мяняецца. Усё астатняе застаецца нязменным. Што шт будзе? Просты прызначэнне. ПК роўная гадавых, і тое, што ў год? СТУДЕНТ: Ампэрсанд. ПРАФЕСАР: Выдатна. Цяпер мы атрымліваем цікавы. Добра, давайце разбярэм гэты ўніз. Па-першае, тое, што б раз з, таму што гэта лёгкая частка гэтага, ці не так? B раз з is-- СТУДЕНТ: 500. ПРАФЕСАР: Так, так тое, што гэта адзін робіць, Калі гэта зорка ПБ, што мяняецца? СТУДЕНТ: Што ў the-- ПРАФЕСАР: Што ў б? СТУДЕНТ: Што ў прасторы што рь паказвае на. ПРАФЕСАР: І рь паказвае to-- СТУДЕНТ: Б. ПРАФЕСАР: В. Такім чынам, адзіны рэч змяненне з'яўляецца б, дакладна. Так бы раз с, 500. Дык вось, якія змены цяпер. Прахладны. Выдатны. Вы, хлопцы, робіце вялікае. Добра, разарваць гэты адзін ўніз. З змяняецца, ці не так? Такім чынам, мы можам запоўніць усе астатняе. Паглядзім. Добра. Мы ведаем, што з будзе твор двух лікаў, ці не так? Якія два ліку, хоць? СТУДЕНТ: і з? ПРАФЕСАР: Дык гэта Права на першай. Такім чынам, мы D спасылак Р, ці не так? P з кропак да, так што мы ведаем, што гэта будзе ў 100 разоў, што? Часы, што робіць шт кропку? Ачкі для. Так у 100 раз 100 10000. Ці значыць гэта, мае сэнс? Прахладны. Галоўная стрейч, хлопцы, апошні шэраг. Добра. Што тут мяняецца? СТУДЕНТ: А. ПРАФЕСАР: А. Ідэальны, так ўсё астатняе можа заставацца той жа. Добра. А што такое? Так што гэта раз і што? Гэта зорка рь. Так зорка рь азначае вось рь, Pb пункту б. СТУДЕНТ: 500. ПРАФЕСАР: 500. Такім чынам, мы маем 500 раз 100. Гэта 50000. Вось так! Паглядзіце на гэта. СТУДЕНТ: Чаму мы павінны & C для last-- ПРАФЕСАР: Выбачайце. СТУДЕНТ: О, добра. ПРАФЕСАР: Маё дрэннае. Шмат пісьмовай форме. Усё добра? Ці не занадта дрэнна, ці не так? Проста трэба трохі у той час як на працу праз. Калі вы разбіць яго, зразумець, што кожны няпоўны мае на ўвазе to-- як з усім, што гэта, yes-- разбіць яго на некалькі праблемы, а затым рекомбинировать, і вы можаце зрабіць некаторыя дзіўныя рэчы. Ёсць адказы, але мы зрабілі гэта. Арыфметыка паказальнікаў. Ах. Мае рукі ўсё крэйдавай. Так складання або аднімання INT рэгулюе паказальнік памерам ад тыпу паказальніка. Памятаеце, як кожны тып мае іншы памер? Так як двайны або доўга доўга восем і інтэрвал у чатыры, але сімвал з'яўляецца адным. Так што вы хочаце зрабіць, is-- адну рэч, каб памятаць Проста, наколькі ваш значэнне паказальніка на самай справе змены будзе залежаць ад тып паказальніка гэта. Усё добра з гэтым? Ці магу я выдаліць яго? Мы добра? Дзіўны. Так што, калі ў нас ёсць некаторыя паказальнік that-- гэта будзе be-- Я збіраецца зрабіць гэта інтэрвал паказальнік. Ён захоўвае гэта. Калі б вы былі сказаць паказальнік плюс адзін, што ён збіраецца зрабіць будзе ён збіраецца абнавіць гэта па памеры ў междунар таму што гэта тып паказальніка гэта. З З, усё вельмі строгі і рэгламентаваны. Паказальнік INT збіраецца абнавіць шляхам аб'ём прасторы INT б. INT чатыры байта. Так што б гэта ператворыцца? Ты проста дадаўшы чатыры на гэта. Цяпер паказальнік будзе be-- ОК. Так што, калі гэта быў сімвал, і мы зрабілі паказальнік плюс адзін, што б гэта было цяпер? Калі гэта started-- прыкідваючыся мы started-- цяпер гэта 0x08. Давайце зараз сказаць, што гэта было асмальваецца паказальнік, і мы дадалі адзін. Што б гэта змяніць, каб? Колькі байт з'яўляецца сімвал? АЎДЫТОРЫЯ: Адзін. СПІКЕР 1: Адзін. АЎДЫТОРЫЯ: Так 0x09. СПІКЕР 1: Так што гэта будзе дзевяць. Так што проста што-тое, каб памятаць. Проста, калі вы дадаеце адзін, гэта не дадаўшы да яго адзін, калі гэта не сімвал. Гэта даданне колькі байты тып, што гэта, Менавіта таму ў нас ёсць гэта раўнанне тут. Так што гэта INT разы больш ад тыпу паказальніка. Такім чынам, мы маем прыклад тут. у быў прызначаны на гэтую кошт, 0x4, калі мы зрабілі ў плюс роўны адзінцы. Што ў ёй, што у х, не змяняецца. Што робіць змена гэта тое, што ў у. Адрас захоўваецца ў ў абнаўляюцца на чатыры таму што ёсць чатыры байта ў междунар і гэта інтэрвал паказальнік. Добра. Так што цяпер у нас ёсць іншае практыкаванне. Такім чынам, пытанне, што будзе друкаваць. Любыя ідэі? АЎДЫТОРЫЯ: колькасць сімвалы ў шчаслівай кошкі? СПІКЕР 1: Дакладна. Так хацелася з вашай радку. Усе атрымліваюць Ці што? Хочам Ці мы, каб прайсці праз гэта? Так, добра. Такім чынам, што мы маем here-- я як гэта значна больш. Я не павінен [Неразборліва] клоўнам. Так у нас ёсць тут радок, шчаслівыя кошкі. Выдатны. У нас ёсць лічыльнік, які мы адсочвання. Такім чынам, мы маем некаторую сімвал * паказальнік што проста усталёўваецца роўнай вул. Што гэта праробліваецца гэта прысваення некаторы паказальнік у пачатку вашай радку. Таму што я ўпэўнены, што, як гэта было адзначана ў дакладзе, мы далі вам, хлопцы гэта тып дадзеных называецца радок. Але на самай справе струны проста Масіў of-- як сімвал *. Гэта паказальнік на кучу персанажаў якія з'яўляюцца сумежнымі ў памяці. Так што гэта проста ўсталёўвае яго роўная любы радкі ідэнтыфікуецца дзе яго першы знак. Так што гэта проста усталяваўшы некаторую кропку роўная пачатак радка. Ўсё там добра? Прахладны. Так што гэта разнаймення наш паказальнік. Так што на самой справе адбываецца ў даць нам нейкае значэнне ў тут, у нашай радкі, што мы гаворым пра. І мы кажам, пакуль гэта не пусты тэрмінатар. Так працягваць ісці, пакуль вы не атрымаеце да канца радка. Абновіце паказальнік на адзін. Так г, ён будзе абнаўляць з дапамогай аднаго кожны раз, таму што гэта знак, сімвал *. Дык гэта будзе праходзіць. Гэта збіраецца абнавіць. Так упершыню ў гэтым бяжыць, гэта будзе тут, у ч. Гэта збіраецца абнавіць. Гэта будзе. Гэта будзе р, у, і гэтак далей і да таго падобнае. Мы будзем абнаўляць лічыльнік. Калі ён дасягае канца, яго проста друкуе, як далёка гэта стала. Так. АЎДЫТОРЫЯ: Дык гэта разлічвае прастору як адзін, ці не так? Добра. СПІКЕР 1: Думайце так. Гэта што, question-- АЎДЫТОРЫЯ: [неразборліва]. СПІКЕР 1: Не турбуйцеся. Гэта я раблю гэта. Добра, так адно я зразумець, што з масівам, Вы таксама можаце разглядаць яго як паказальнік, таму што масівы з'яўляюцца проста бесперапынныя плямы памяці. Такім чынам, вы можаце ставіцца да яго гэтак жа. Вы можаце кіраваць ім з паказальнікамі, таксама. Дык а не рабіць, у гэтым Справа, аналягічная рэч будзе масіў 0 роўны 1. Але такім жа чынам, што Радок вызначаецца да пачатку дзе яго першы сімвал, Масіў вызначаецца дзе яе першы элемент. Таму што мы ведаем, што мы гарантуецца, што гэтыя збіраюцца быць бесперапынным блокі памяці. Гэта тое, што дазваляе нам рабіць гэта. Мы ведаем, што яны бесперапынна блокі памяці. Такім чынам, у дадзеным выпадку, шляхам разнаймення проста масіў, які кажа нам: ОК, перайдзіце да пачатку ваш масіў, які знаходзіцца тут. Такім чынам, вы можаце ўсталяваць яго роўным адзінцы. І ў гэтым выпадку, незалежна ад вашага масіва тып, калі вы абновіце яго адным, вось толькі як абнаўленне гэта да наступнага індэксе. Вы можаце зрабіць гэта, таму што вы ведаю, што ў вашым масіве. Так што не ведае, колькі ў абнавіць паказальнік на, які адрас, каб абнавіць яго да так што вы ў наступным часовым інтэрвале. Так што гэта проста іншы спосаб пісаць масіў 0 роўны 1, Масіў 1 роўная 2, масіў Кранштэйн 2 роўны 3. Гэта проста яшчэ адзін спосаб думаць пра гэта. Таму што яны з'яўляюцца бесперапыннымі блокі ў памяці, Вы можаце звярнуцца да іх альбо масівам notation-- які я асабіста знайсці easier-- але, можа быць, Вы павінны працаваць з ім строга па адрасах памяці. І гэта, як вы зрабілі б гэта. Выгляд больш як крута, што вы маглі б зрабіць у параўнанні з магчыма не тое, што вы знаходзіцеся на самай справе адбываецца ў рэалізацыі. Я выкарыстоўваю яго ў 61. Вы, хлопцы, напэўна, не трэба турбавацца пра гэта занадта шмат. Але калі вы зацікаўлены, ўзяць 61 у наступным годзе. Мы на фінішнай прамой, хлопцы. Я ведаю, што гэта доўга. Дынамічны Allocation-- памяці таму мы ведаем, што адзін рэчаў, калі мы казалі падчас наш першы раздзел разам, мы глядзелі на своп Функцыя, дзе гэта было выходзіць за рамкі нашай асноўнай функцыі. І мы праходзілі ў гэтых значэнняў што былі эфектыўна копіі. І як толькі своп скончыў выконваецца, ён проста пакінуў пачак. Памятаеце, у нас ёсць стэк рамкі для падпампоўкі. Ён пакідае, і тыя, Значэння выйсці з ім. І яны сышлі. Мы нічога не маглі зрабіць, з імі і нам было сумна таму што мы не можам памяняць нашы каштоўнасці. Але з C, як я ўжо казаў, вам ёсць шмат улады над памяццю. Так што вы можаце зрабіць, гэта вы можаце вылучыць рэчы ў кучы тут што прабудзе там да таго часу, Вы кажаце ім, у адваротным выпадку. Яны, як добрыя дзеці. Яны застаюцца там. Яны не пакідаюць. Яны застануцца там да таго часу, пакуль вы як, у парадку, вы можаце сысці. У той час як рэчы ў стэку, who-- яны, як непаслухмяных дзяцей. Яны проста ўцячы, калі вы хочаце быць там, а затым яны сышлі. Вы не можаце атрымаць іх назад. Так куча is-- мы збіраемся казаць аб Таноса і бясплатна, што Я ўпэўнены, што вы, хлопцы, чулі пра ў лекцыі. І гэта ў асноўным спосаб мець вельмі пастаянныя дадзеныя. Такім чынам, вы можаце захаваць дадзеныя вакол да тых часоў, як вы хочаце. Ага. АЎДЫТОРЫЯ: Ці можаце вы вызначыць кучу і стэк? Яны падабаюцца месцы, каб пакласці рэчы? СПІКЕР 1: Таму яны у асноўным просто-- яны тое, як мы см проста памяць. Так кучы проста месца, дзе памяць вылучаецца дынамічна, у той час як стэк ставіцца больш укладваць кадраў што больш цэнтральнае месца ў Функцыі, якія на самай справе працуе. Вы сапраўды не маюць кантролю. Вялікая розніца, у вас ёсць кантроль па кучы, калі вы хочаце, каб. У вас ёсць менш кантролю над стэкам. Стэк залежыць Функцыі, якія працуюць, і парадак, у якім яны працаваць, і, як усе вярнуліся. У той час як з кучы, як мы ўбачым, што вы можаце сказаць, ОК, я хачу, каб гэтае значэнне, каб быць вакол, пакуль я не скажу вам, інакш. Вы не можаце пазбавіцца ад яго. Вы не дазваляецца адмяняць яго. Вы збіраецеся трымаць яго вакол да таго часу, як я табе кажу. Вы дабіраецеся, каб быць босам у кучы, у той час як stack-- Магчыма, калі вы як надзімаць свой шлях Вы можаце быць босам. Але не зусім. І гэта на самай справе проста памяць. Гэта проста розныя спосабы з спасылкай на памяць. Прахладны. Так з гэтым, як кантраляваць вашу памяць. Гэта з Таноса, якія Вы збіраецеся атрымаць у выкарыстанні. Так што гэта проста кароткая для вылучэння памяці. Гэта ўсё, што ёсць. Там куча іншы халаднавата Функцыі, якія маюць Alloc ў канцы, і яны стаяць за рознымі рэчамі. Таму, калі вам трэба для захоўвання, што трэба каб перажыць бягучую функцыю так што, калі ваш бягучы Функцыя ўцякае, ў вас яшчэ ёсць дадзеныя, што вам атрымаў ад яго, вы хочаце выкарыстоўваць Таноса. Гэта будзе ініцыялізаваць яго ў кучы. І як я ўжо сказаў, і трымаць кажучы, вы будзеце трымаць яго там пакуль вы не пакажаце зваротнага, якая з'яўляецца важнай рэччу тут. Так што, адно заўважыць, і гэта, як правіла, вельмі важна, з'яўляецца тое, што гэта SIZEOF гэта супер карысна выкарыстоўваць таму што ў залежнасці ад тыпу машыны вы працуеце, яна можа мець розныя колькасці памяці, што ён прымае. Такім чынам, вы заўсёды хочаце выкарыстоўваць памер так што вы не залежыць ад машыны, так што ваш код будзе працаваць на любой машыне. І гэта толькі частка пісаць добры код. Калі ён працуе на адной машыне, але не які-небудзь з іншых, наколькі карысным было ваша праграма? Такім чынам, вы заўсёды хочаце пераканайцеся, што і выкарыстоўваць SizeOf. АЎДЫТОРЫЯ: Дык што, як памер 10 цаляў [неразборліва]? СПІКЕР 1: Гэта памер 10 цэлых лікаў. ды. Так памер цэлых лікаў вернецца колькі адзін інтэрвал ўзяць. Або памер гольца, як шмат робіць адзін сімвал дубль. А потым, колькі блокаў таго, што вы хочаце? Такім чынам, у дадзеным выпадку, мы хочам нешта што мы можам захоўваць 10 цэлымі ст. І ён будзе працаваць незалежна машыны, якія халаднавата. Дык колькі байт будзе што на самой справе даць вам? Хуткі матэматыка. АЎДЫТОРЫЯ: 40. СПІКЕР 1: 40. Дакладна. Так яшчэ адзін вялікі рэччу. Паказальнік або Таноса можа вярнуцца нуль. Такім чынам, яшчэ раз, заўсёды правярайце, каб убачыць, калі ён вярнуўся нуль перш чым паспрабаваць зрабіць што-небудзь з ім. Калі вы паспрабуеце і разыменовать гэты паказальнік цяпер, гэта проста будзе сегментацыі таму што вы пайшлі і спрабавалі дакрануцца нуль, калі вы не павінны. Так заўсёды правяраць нуль. Зноў жа, усё гэта можна зрабіць. Гэта можа вярнуць пусты. Гэта будзе вярнуцца нуль, калі вы альбо з космасу, або па любой прычыне, ён бег у нейкі памылка памяці. Гэта часам проста вяртае нуль. Такім чынам, вы проста павінны праверыць гэта. Вось і ўсё, на гэтым слайдзе кажа. І тады тое, што ў нас ёсць вось выклік, каб вызваліць. Такім чынам, у той жа самы шлях, што, калі вас адкрыць файл неабходна закрыць файл, калі вас Таноса памяці, вы Вы павінны вызваліць гэтую памяць. І вы, хлопцы, атрымаеце зрабіць сапраўды цікавы матэрыял. І ёсць праграма, якую можна запусціць з ўбачыць, калі вы калі-небудзь уцечкі памяці. Але вы не хочаце, каб ўцечка памяці. Гэта сапраўды дрэнна. Проста сапсуеце рэчы. Гэта дрэнна рабіць так жа, як праграмаванне разумна эфектыўнасці праектавання. Але гэта таксама проста выгляд дрэнна для вашага кампутара. Так што свабодныя рэчы калі вы Malloc іх. Вы, хлопцы, ўбачыце сіметрыі тут. Супер проста. Проста бясплатна, а затым незалежна ад вашага паказальнік, усё, што імя ваш паказальнік, і гэта будзе клапаціцца аб вызваляючы яго для вас. Прахладны. Тады ў нас ёсць гэта. Такім чынам, мы толькі збіраемся хадзіць праз гэтую праграму. І тады вы, хлопцы, зрабілі. Так [неразборліва] толькі асноўны. Такім чынам, мы маем некаторую INT * паказальнік. Таму ў нас ёсць паказальнік што збіраецца правесці цэлымі. А колькі Інтс ён збіраецца правесці? Толькі адзін. Памер у міжнар. Мы правяраем, калі паказальнік з'яўляецца нулявым, таму што гэта ёсць, мы хочам сказаць, нічога не робяць. Гэта дрэнна. Так мы друкуем некаторыя памылкі з памяць, найбольш часта вяртаюць 1, як вы, хлопцы прывыклі. А то ў нас тут, мы разыменовать нашага паказальніка. Значыць, мы збіраемся захоўваць што-то на месцы, дадзены нам. Int * паказальнік, або Таноса, вяртае адрас, дзе ён усталяваны ў баку гэта Памяць для вас. Так што гэта ў асноўным даючы вам like-- калі вас думаю пра звязцы дома ў наваколлі што вы хочаце паставіць Ваша мэбля ў, Таноса як добра, вы атрымліваеце ісці ў хату тры. І гэта дае вам адрас дома тры. Так што гэта зараз, гэта паказальнік захоўвае адрас, захоўвае адрас вашага дома. * PTR сродкі, ОК, я ў маім доме. Прахладны. Мне трэба, каб атрымаць некаторы цэлае лік. Так вы просіце каго-то каб даць вам мэбля цяпер. Такім чынам, вы атрымліваеце некаторы Int. І гэта ставіць яго ў паказальнік дзе ён, паказваючы на. А потым ён проста друкуе , Вы ўвайшлі туды, куды. І зноў, спасылка. Так што гэта, як вы пайшлі на гэта рашэнні, і вы бачылі, што там было. Прахладны? І тады, вядома, мы вызваляем нашу паказальнік. Не забудзьцеся вызваліць паказальнік. Не забудзьцеся праверыць нуль. Не забудзьцеся вызваліць паказальнік. У вас ёсць дзве рэчы вы памятаеце з гэта, ці што вы павінны памятаць. Так. АЎДЫТОРЫЯ: [неразборліва] матэрыял так, сімвал * ы. Як выйшла, мы ніколі вызваліць тых? СПІКЕР 1: Хм? АЎДЫТОРЫЯ: Ёсць тыя, як струны? Вы сказалі, што радкі гэтак жа, як сімвал * з, ці не так? Дык чаму б нам не вызваліцца радкоў? СПІКЕР 1: Вы толькі бясплатна, калі вы mallocing. АЎДЫТОРЫЯ: О, калі вы mallocing. СПІКЕР 1: Так Таноса і бясплатна дзве рэчы што вы заўсёды павінны мець разам. е адкрытае, е блізка, дзве рэчы Вы павінны мець разам. У абодвух гэтых выпадках, праверыць нуль. Так. АЎДЫТОРЫЯ: Так бясплатна толькі дазваляючы нешта яшчэ павінны быць захаваны там пасля гэтая праграма выкарыстоўваецца яго? СПІКЕР 1: Гэта проста кажу, ОК, я зрабіў з гэтым. Вам не трэба трымаць яго вакол. У адваротным выпадку ваш кампутар будзе проста падабаецца спрабаваць і трымаць яго там. І тады вы can't-- гэта працуе ў памяці пытанні пазней. Вы заўсёды хочаце, каб вызваліць яго з- ён кажа кампутар, ОК, я зроблена з гэтага месца памяці. Вы можаце мець яго назад для мяне, каб выкарыстоўваць пазней. Прахладны? Так. АЎДЫТОРЫЯ: Такім чынам, мы выкарыстоўвалі% D проста таму што ўдвая больш, чым вяртаецца, або чаму is-- [неразборліва]. АЎДЫТОРЫЯ: Ці можаце вы выкарыстоўваць% я? СПІКЕР 1: Вы можаце выкарыстоўваць% Я. Любыя гарачыя пытанні? Працягвай. Аўдыторыя: Я проста хуткі пытанне. Так пераменная PTR, that's-- як, з INT * PTR = Таноса, вось толькі кажу, што гэта паказваючы на ​​месца ў memory-- СПІКЕР 1: Вы хочаце [неразборліва]? АЎДЫТОРЫЯ: --that гэта Памер of-- няма, усё ў парадку. Але гэта проста паказваючы на ​​месца ў памяці, што гэтак жа, як чатыры байта. СПІКЕР 1: Права. Так Malloc, памер INT кажа, ОК, я збіраюся пайсці бегчы, знайсці чатыры байта памяці для вас. Калі ён знаходзіць, што чатыры байт з памяці, яго дае рэзервовую адрас ад таго, дзе ён пачынаецца, і вось што захоўваецца у паказальнік, або PTR. Добра. Вы, хлопцы, выглядаюць менш заблытанай, чым большасць людзі, калі я кажу пра паказальніка, так што я адчуваў сябе даволі добра прама цяпер. Добра. Як заўсёды, вы, хлопцы, павінны мець усе атрымалі свае ацэнкі pset2 цяпер. Я ведаю, што былі некаторыя хісткі рэчы, дзе ён кажа, формула не дзейнічае або што-то. Калі вы атрымліваеце, што ўсе Вашы гатункі сапраўдныя на маёй баку. Так што я магу адправіць вам скрыншоты вашых класах. Проста дайце мне ведаць, а калі вы прапускаючы ні гатунку або што-то здаецца, не мае сэнсу. Ідзі да мяне. Я быў супер ганаруся табой Хлопцы ўжо, так трымаць. І добра адпачыць вашай тыдзень. Я ўпэўнены, што я буду бачыць некаторыя з вас у працоўны час.