[Гуляе музыка] Дэвід Дж малая: Гэта як першакурснік семінар сёння. ДОБРА. Такім чынам, вельмі дажджлівае з. Гэта мае тэндэнцыю адбывацца па серадах, але ўсё больш магчымасцяў па пытаннях сёння. Такім чынам, давайце пачнем на самай справе з плёнкай у хвіліну. Але мы пачнем велічна, як заўсёды. Гэта CS50, і гэта канец тыдня 4. Так што, калі вы калі-небудзь назіраў Тэлевізар ці кіно, у якім ёсць некаторыя кампутарныя эксперты і паліцыя, ФБР або, ці некаторыя агенцтва спрабуе злавіць некаторых праціўнік, добра, вы, напэўна, чулі выраз "павышэння", у выніку чаго, што тэхнік-то чароўна павялічвае ў бясконца далёка, каб убачыць злачынцаў асобу або нумарны знак нават у адлівам люстэркам або бляск чыёй-то вочы. Так на самой справе, давайце зірнем на некалькі такіх сцэн з Галівуду. [Прайграванне відэа] -Добра, Зараз давайце атрымаць добры погляд на вас. -Постой Яго. Запусціце яго назад. Пачакай хвіліну. Ідзіце прама. -Ёсць, Замарозіць, што. -Поуны экран. -Добра, Што замарозіць. -Tighten На што, ці не так? -векторных У тым, што на хлопец з задняга кола. -zoom У прама тут, на гэтым месцы. -З Правам абсталявання, малюнак можа быць павялічана і заточаныя. -Што Гэта? -Гэта Праграма павышэння. -Можа Вы ясна, што да любой? -Не ведаю. Давайце павышэння яго. -Enhance Раздзеле A6. -Я Узмацняецца дэталі, и-- я думаю, што ёсць дастаткова, каб павысіць, адпусціце яе, каб мой экран. -Я Узмацняецца адлюстраванне ў яе вочы. -Давай Гэта запусціць гэта праз паляпшэння відэа. -Edgar, Вы можаце павысіць гэта? -hang На. -Я Працую на гэтым адлюстраванні. Адлюстраванне -Someone ст. -отражении. -Ёсць З'яўляецца адлюстраваннем асобы чалавека. -The Адлюстраванне. -Ёсць Гэта адлюстраванне. -zoom У на люстэрку. -Вы Можаце бачыць адлюстраванне. -Можа Вам павысіць імідж адсюль? -Можа Вам павысіць яго прама тут? -Можа Вам павысіць яго? Вы можаце павялічыць гэта? -Можа Мы павялічваем гэта? -Можа Вам павысіць яго? -Постой На секунду, я павышэння. -zoom На дзверы. -кратного 10. -Zoom. -Переместите В. -Больш. Пачакай, стоп. -Stop. -Pause Яго. -rotate Нам 75 градусаў вакол вертыкальнай, калі ласка. -Stop. Вярніцеся да часткі аб дзверы, зноў. -Got Энхансер малюнкі, якія могуць растравага малюнка? Эй, можа быць, мы можам выкарыстоўваць Прадипа Метад верасня бачыць у вокны. -Гэта Праграмнае забеспячэнне стан мастацтва. -The Уласнае выключаны. -З Правы Спалучэнне algorithm-- Прынятыя ліквідацыю -Ён алгарытмы на наступны ўзровень, і я магу выкарыстоўваць іх для узмацніць гэтую фатаграфію. -Lock, І павялічыць Z-восі. -Enhance. -Enhance. -Enhance. -Freeze І павышэння. [КАНЕЦ ПРАГЛЯДУ] Дэвід Дж малая: Добра, усе тыя словы, на самай справе. Яны проста нанізаныя ў так, што на самой справе не разумна. І на самай справе, CS50 і курсы, як гэта імкнецца разбурыць шмат тэлебачання і кіно для вас. Таму што, калі тыя камп'ютэрных спецыялістаў якія сыпаць ўмовы і казаў модныя рэчы, як ўласныя, і г-вось, і любую колькасць іншых на самай справе больш тэхнічныя тэрміны, яны на самой справе проста нанізваючы словы разам занадта часта. Гэта адна з нашых надзей у тым, што ў якасці пабочнага эфекту, курсы як гэта, будзе больш людзей у Свет сапраўды зможа ўзважыць і толькі ледзь-ледзь ўплываць на Якасць і дакладнасць гэтых фільмаў? На самай справе, давайце зірнем на рэальнасць. Дык вось супрацоўнікі фота Марыя, адзін з нашых таварышаў навучання. І хай яна падазраецца ў нечым. І ўсё ж, ёсць пробліск некаторыя з доказаў у яе вочы, або ў адлюстраванні яе ачкоў. Ну, калі мы робім менавіта так, як фільмы прапанаваць, у якім мы маштабу і "павышэння", гэта колькі інфармацыі у асобе Марыі пры захопе малюнка з гэтай арыгінальным дазволе. І, на самай справе, вы можаце ўбачыць гэтыя кропкі. І гэта тое, што з'яўляюцца званыя пікселяў, Р-І-Х-E-L-S, які знаходзіцца ўсяго ў квадрат, як правіла, гэта значыць кропка, якая складае малюнак. І яшчэ ў той дзень, а на самай справе нават сёння з некаторымі з сённяшніх LED-тэлевізараў ці ВК-тэлевізары, калі ў вас ёсць адным ў вашым нумары або на хаце, калі вы ідзяце супер блізка да яго, і асабліва калі гэта некалькі старэй тэлебачанне, Вы, верагодна, можа нават бачыць гэтыя кропкі і гэта тое, што скласці малюнак. І не больш няма Інфармацыя, чым гэтая. Мы маглі б "павысіць", у тым сэнсе, згладжвання рэчы зноў і роду вывядзенне выгляд, накшталт таго, што Колер павінен быць побач з вокам Марыі так што гэта на самай справе не так няроўнай. Але калі я працягваю маштабавання, ёсць дрэнны хлопец у яе вочы. Як гэта ўсё, Інфармацыя, якую мы маем. Вы не можаце стварыць Інфармацыя з нічога. Там толькі канчатковае колькасць бітаў там. Такім чынам, у задачы Набор 4, дзе ў вас ёсць магчымасць гуляць з такога роду свеце. У задачы Set 4, вы даследаваць Свет графікі і экспертызы, і на самай справе пісаць код што аднаўляе страчаныя малюнка. Вы напісаць код, які маніпулюе існуючых малюнкаў і ў канчатковым выніку зразумець, што адбываецца пад капотам. І, аказваецца, гэта на самай справе не ўсё, што складаней. Напрыклад, калі мы хацелі ўяўляюць сабой смайлік дзе з гэтых чорных пікселяў, або гэтыя чорныя кропкі, Ну, мы маглі б проста ўяўляюць іх як сапраўды растравыя. І калі вы калі-небудзь чулі, што Выраз растравыя, магчыма, цяпер пачынае зрабіць трохі больш сэнсу сёння. Мы ўжо ведаем, што крыху ёсць. Гэта 0 або 1. І карта проста нешта як кавалак паперы што дае вам напрамкі і мае можа быць, сетка х і ў каардынатаў. Дык вось растравыя. Гэта карта бітаў у выніку чаго, па-відаць 1 будзе прадстаўляць белы піксель, і 0 будзе прадстаўляць чорны піксель. Але мы, безумоўна, можа перавярнуць яго вакол. Гэта на самай справе не так важна Пакуль мы паслядоўныя. А вось як, у binary-- ўнутры памяці кампутара, або нават унутры файла на ваш жорсткі drive-- можна захоўваць найпросты з смайлік малюнкаў. Але тое, што мы, вядома, не хапае ў гэтым вобразе? Колер, праўда? Гэта відавочна, наступным крокам або ўдасканаленне палепшыць гэта з колерам. Таму, на жаль толькі з адной трохі, 0 або 1, можна ўявіць колер. Гэта можа быць чырвоным або сінім, або чорны, ці белы, ці зялёны, ці ружовага, або любыя пары кветак. Але для прастаты, мы будзем проста выказаць здагадку, чорны і белы. Так што лагічна нам трэба, калі мы хочаце рэалізаваць колер у малюнку? Што мы павінны рабіць? Падобна гэтаму, калі абмяжоўвалым фактарам тут з'яўляецца тое, што з адным бітам можна толькі прадстаўляюць два стану, 0 або 1, белы або чорны, тое, што вы хочаце зрабіць? Аўдыторыя: больш дадзеных. Дэвід Дж малая: Яшчэ біт, ага больш дадзеных, больш біт. І, сапраўды, гэта менавіта тое, як прадстаўлены каляровыя выявы. Замест таго, каб выкарыстоўваць адзін біт, А 0 або 1 для кожнага пікселя, кожная кропка, Вы проста выкарыстоўваць некалькі. Можа быць, выкарыстоўваць 8, можа быць, часцей выкарыстоўваць 24, і сапраўды, у задачы Набор 4, вы будзеце гуляць з файлам Фармат, які выкарыстоўвае 24 біта, як правіла ,. Але большасць з вас, верагодна, знаёмыя з JPEG. Калі вы калі-небудзь фота на тэлефоне, або загружаныя або бачылі што-то на Facebook або Flickr, любую колькасць фота-аснове вэб-сайтаў, вы маеце напэўна, бачылі выявы JPEG з раней. І аказваецца, гэта файл Фармат мы збіраемся выкарыстоўваць у Pset 4, у якім вы збіраецеся прыйдзецца аднаўляць малюнка што я выпадкова выдаленыя з пашкоджаны карты памяці ў камеры, калі вы будзеце. І атрымліваецца, што, хоць JPEG даволі sophisticated-- гэта значна больш складаны чым чорных і белых кропак мы бачылі некалькі хвілін таму, таму што ёсць на самай справе фантазіі алгарытмы, якія выкарыстоўваюцца для сціску JPEG, так што вы можаце мець сапраўды добры, якасць малюнка, але з выкарыстаннем параўнальна мала біт. І мы вернемся да сціску ў хуткім часе. Аказваецца, што першы тры байта ў image-- JPEG незалежна ад таго, што вы зрабілі фатаграфію of-- з'яўляюцца значэння 255, 216, 255. Іншымі словамі, калі вы проста бачыць, што набор бітаў, тут прадстаўлены як тры байт, або 24 біта складзе, з высокай верагоднасцю можна выказаць здагадку, што Вы глядзіце на гэта гэты першы тры байты JPEG. І гэта тое, што вядома ў якасці подпісы ў фармаце JPEG. Шмат фарматаў файлаў там, як правіла, каб пачаць з некаторымі мадэлямі 0 і 1, так што Windows, і Mac OS, і прашыўкай, і Android-ведаю, які тып файла яны гэта, у дадатак да так званай файла пашырэнне, якое шмат файлаў ёсць. Калі вы .jpg, гэта яшчэ адзін ключ да кампутара. Такім чынам, давайце паглядзім на гэта трохі больш тэхнічна. Мы ведаем дзесятковай сістэма ад 0 да 9. Мы ведаем, двайковы 0 і 1. І калі вы ўспомніце Pset 0, у вас змагацца з, для трохі, нешта называецца шаснаццатковым дзе ў вас ёсць 16 лічбаў, замест 10 ці замест 2. І гэтыя лічбы, па пагадненні, ад 0 да 9, а затым праз F, дзе F ўяўляе тое, што дзесятковы лік, як хутка здаровае праверыць? Так, 15. І павінен прадстаўляць 10, проста Характар ​​упарадкавання, што я даў. Гэта проста адвольнае пагадненне, але гэта цалкам стандартны. Так што, калі мы паглядзім на гэты шаблон з трох bytes-- давайце проста пачаць глядзець на яго ў адпаведнасці з тым, як кампутарныя навукоўцы наогул глядзець і думаць пра файлах. Вы, вядома, можаце думаць аб Файлы ў 0s, 1с і і дзесятковай, але ў рэчаіснасці, мы схільныя выкарыстоўваць бінарны або больш, як правіла, hexadecimal-- назад ад Pset 0. Такім чынам, дазвольце мне выказаць здагадку, што 255, 216, 255 і проста гэтыя мадэлі 0 і 1. І вы можаце праверыць гэта, калі вы хачу зрабіць матэматыку з тыдня 0. Але цяпер, проста выказаць здагадку, што гэта сапраўды правільна. Я проста перапісаць тры дзесятковай колькасці як тры двайковых значэнняў. Цяпер тое, што я збіраюся зрабіць, гэта проста дадаць белае прастору, толькі дзеля чытальнасці ст. І заўважце, я толькі збіраюся рассунуць рэчы. Таму, перш чым, пасля, да, пасля. Я не раблю нічога цікавага сябра чым проста распаўсюджванне рэчы так, што апавяшчэнне кожны набор з васьмі Біты цяпер два камплекты чатырох бітаў. Гэта карысна, таму шаснаццатковай Асабліва модна таму што кожны шаснаццатковы лічба ад 0 да F, або, больш канкрэтна ад 0 да 15, можа быць прадстаўлена з роўна чатыры біта. Іншымі словамі, у шаснаццатковым калі вы хачу, каб прадстаўляць 0, гэта проста 0000, чатыры нулі. І калі вы хочаце, каб прадстаўляць 15, гэта 1111, які чатыры біта. І калі вы робіце матэматыку, калі гэта месца тыя, гэта месца 16s, што збіраецца даць you-- а што адбываецца , Мэтай якіх прабачце, у двайковым, што адбываецца, каб даць вам 15, з іх месца, Двойкі месца, чацвёрак і васьмёркі месца. Такім чынам, дазвольце мне прапанаваць, што гэта набор з чатырох бітаў злева гэта тое, што мы збіраемся называць п. Гэта самы вялікі нумар, які вы можа прадстаўляць з чатырма бітамі. І мы ўжо ведаем з шаснаццатковай е з'яўляецца найбуйнейшым лічба ў шаснаццатковым выглядзе. У нас ёсць яшчэ адзін F ёсць, больш за тое там два. І зараз, толькі прыняць на веру што я зрабіў матэматыку права і што левая палова з гэтых бітаў, 1101, гэта тое ж самае, як д у шаснаццатковым выглядзе. І правая рука, 1000, знаходзіцца ўсяго ў 8. І, што адзін лёгка ўбачыць, правільна? 8-represents-- правоў пад гэтай васьмёркі месцы. Такім чынам, мы маем адзін у слупку васьмёркі і нічога ў карачках, двое ці тыя. Так што цяпер больш традыцыйна, людзі схільныя напісаць шаснаццаткавыя лічбы, як гэта, вы проста хлюпаць іх разам, і тады вы прэфікс іх з 0x. Гэта нічога не значыць, акрамя візуальны ключ да human-- вось ідзе шаснаццатковае value-- таму не маглі б быць відавочным. Які ёсць, у канчатковым рахунку, што карціна з нулёў і адзінак, ці карціна шаснаццатковай лічбы ж самае, што вы збіраецца пачаць шукаць ў задачы Набор 4 this-- і праблема Набор 4 спецыфікацыі будуць хадзіць Вы праз гэта больш detail-- але разумею, як свайго роду магіі, як гэта можа выглядаць на першы погляд, Вы пачнеце бачыць гэта шмат. І на самай справе, нават у GDB, то адладчык мы ўвялі ў панядзелак і Дэн ўкараняе ў Pset 3, будзе каб паказаць вам часта шаснаццаткавыя значэння толькі таму, што яны маюць тэндэнцыю быць больш звычайны, чым дзесятковая або двайковы ў свеце кампутараў. Зараз давайце паставіць гэта ў кантэксце. Многія з вас, магчыма, памятаеце, што гэта Тут карціна, якая прыйшла ад чаго? Vista ,, так што нават раней, чым што Windows XP зрабіў гэта дэбют. Так што гэта прыгожы краявід. І на самай справе, калі вы капацца online-- Я думаю, што гэта артыкул з Вікіпедыі, дзе хтосьці вельмі дзіўна выйшаў знайшлі гэта месца ў свеце створана яго ці яе камера менавіта права place-- і гэта сёння выглядае like-- але гэта сапраўды гэтак жа, ўстаноўка. Гэты вобраз, хоць, знаходзіцца ў файле фармат, званы растравы, б-м-р. І мы збіраемся ўзяць супер Хуткі погляд на тое, што гэта значыць. Але растравыя гэта проста іншы спосаб якія прадстаўляюць ўсе выявы, выкарыстоўваючы пікселі у 0 і 1, у канчатковым рахунку ,. Але ў хуткі погляд, ён мае больш цікавы подпіс ў пачатку файла. Гэта не толькі тры байт, а ёсць цэлая куча шаблонаў байтаў што абумовіла сэнс. Напрыклад, дзе-то ў Першыя некалькі байтаў растравага малюнка будзе памер з Малюнак, шырыня малюнка, вышыня малюнка, так карысныя метададзеныя, калі вы будзеце. Карысная інфармацыя, што Photoshop або якія-небудзь графічныя праграмы вы карыстаецеся можа на самай справе хвалюе. Так падрабязней пра гэта ў Праблема паказаны 4, але гэта толькі сказаць, што ў канцы дня усе фарматы файлаў вы карыстаецеся для years-- файлаў Microsoft Word, Нумары, файлы Excel, любую колькасць фарматаў файлаў што, магчыма, некаторыя Вядома, пашырэнне файла проста 0 і 1 пад капотам. І людзі вырашылі тое, што канвенцыі з'яўляюцца, Якія мадэлі 0 і 1 ўяўляюць Слова файл у параўнанні файл Excel, у параўнанні з любым колькасцю іншых фарматаў. Такім чынам, у Pset 4, вы будзеце мець магчымасць гуляць з гэтым. Але што гэта значыць мець структуры. Гэта на самай справе добры пераходзіць у цяперашні час у З, які мае толькі пару З дадатковых функцый, якія мы не глядзелі на. Гэта даволі маленькі мову і адзін з сімпатычныя рысы аб З з'яўляецца структурай. Напрыклад, калі вы хацеў represent-- давайце што вы хацелі, каб мець зменную, якая ўяўляе студэнта ў некаторым праграмы. Можа быць, вы пішаце курс праграма рэгістрацыі, або ядро ​​гандлёвы інструмент, ці нешта падобнае. Якія часткі дадзеных, звязаных студэнту, якія прыходзяць на розум? Як студэнт прадстаўлены з тым, што шануе? Да? У вас ёсць імя ў якасці студэнта. Што яшчэ тыповы студэнт мае? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Так, прабачце. АЎДЫТОРЫЯ: Узрост. Дэвід Дж малая: узрост або дзень нараджэння тое ж самае, так. Што яшчэ? АЎДЫТОРЫЯ: Ідэнтыфікацыйны нумар? Дэвід Дж малая: Так ідэнтыфікацыйны нумар, можа быць, нумар тэлефона, можа быць, інтэрнат, або дом, або каледж, ці нешта падобнае. Любую колькасць элементаў дадзеных, якія Вы маглі б мець у вашым спісе кантактаў гэта тое, што можна вызначыць студэнта. Так што, калі мы хацелі, каб гэта зрабіць, у кодзе, мы маглі б зрабіць нешта простае, як гэта. Мы маглі б мець праграму так, каб мае, скажам, INT асноўны (пустэчу). І калі я хачу, каб прадстаўляць студэнт, я мог бы, напрыклад, радок называецца імя для гэтага студэнта, радок называецца інтэрната для гэтага студэнта, можа быць, INT называецца ID для гэтага студэнта. І таму, што я выкарыстоўваю радок, я трэба вярнуцца і паставіць CS50.h. Можа быць, я буду мець патрэбу ў stdio.h. Такім чынам, дазвольце мне прэвентыўна рабіць тым, і я буду называць гэтую student.c зараз і захаваць гэта. І цяпер я магу нешта зрабіць з гэтымі зменнымі. І мы толькі збіраемся напісаць што ў якасці каментара ў псевдокоде, таму што гэта не цікава што мы робім цяпер. ОК, так што гэта праграма, якая то захоўвае студэнта. Што я хачу рабіць, калі я хочаце захаваць двух студэнтаў? Так што мой першы інстынкт будзе усё будзе добра, пачакай хвілінку, калі ў мяне ёсць яшчэ адзін студэнт, чаму не я проста зрабіць імя радкі 2, радок 2 інтэрнаты, INT id2. І мы зрабілі сышоў па гэтай дарозе да і якое ж было наша рашэнне, што, здаецца, каб быць свайго роду хаком пасты капіявання Работа тут? АЎДЫТОРЫЯ: масіў. Дэвід Дж малая: Так, мы маглі б выкарыстоўваць масіў. Права гэта вельмі хутка становіцца грувасткім. Вы павінны сартаваць адвольна пачаць называючы ўсе гэтыя зменныя. А вы, чалавек, павінны мець адсочваць, што ОК NAME2 адпавядае з dorm2 адпавядае id2. Гэта проста становіцца беспарадак. Так што гэта нашмат прасцей, Нагадаем, з некалькі тыдняў таму, проста таго, каб званых імёны радкоў і, магчыма, даць нам тры з іх. І тады, можа быць, у нас ёсць радок інтэрната і ёсць тры з іх, або з канстантай, Int ідэнтыфікатары і маюць тры з іх. Але нават цяпер гэта адчувае трохі неахайны, права. Мы кажам пра студэнтаў і пакуль Я сапраўды спыняючыся на нізкім узроўні Дэталі рэалізацыі. Студэнт імя і інтэрнаты і ID. Чаму я не магу проста абвясціць зменную называецца студэнтам і называюць гэта S. І калі я хачу іншага студэнта, чаму я не магу проста назваць гэта т. Або, калі я хачу цэлую кучу студэнтаў, чаму я не магу проста у мяне ёсць цэлы клас студэнты, і гэта тры з іх. Іншымі словамі, чаму я не магу прыйсці з маёй уласнай тыпу дадзеных, званага Студэнты, усярэдзіне якіх з'яўляецца імя, з'яўляецца ідэнтыфікатарам, з'яўляецца інтэрнат, любую колькасць іншых галінах. І атрымліваецца, вам можа зрабіць менавіта гэта. Так З мае гэтую функцыю пад назвай структура. Гэта асаблівасць мовы, які дазваляе зрабіць менавіта гэта. Я збіраюся ісці наперад і адкрыць structs.h куды мы ідзем, каб убачыць наступнае вызначэнне студэнта. Аказваецца - і гэта адна нават прасцей, чым той, з удзелам ідэнтыфікатар Хвіліну таму. Калі вы хочаце, каб прыдумаць Ваш хатні тып дадзеных, і ў дадатак да INT, CHAR і і плаваць і ўсе гэтыя іншыя, якія існуюць, Вы можаце зрабіць гэта ў літаральным сэнсе пісаць TYPEDEF-структуру, то некаторыя фігурныя дужкі, усярэдзіне якога вы спіс зменных, якія вы хочаце звязаць з гэтай новай карыстацкай інфармацыі увядзіце як імя і інтэрнаце, а затым, пасля фігурных дужках Вы даць імя для новага тыпу дадзеных. Так, напрыклад, студэнт. І, што прыемна пра гэта цяпер, што калі мы паглядзім на адпаведны код, Канвенцыя, у першую за ўсё, гэта паставіць гэта ў файле то кропка ч, файл загалоўка, які мы не пачалі выкарыстоўваць сябе занадта шмат. Але мы збіраемся, каб пачаць выкарыстоўваючы зусім трохі ў цяперашні час. І тое, што мы можам зрабіць з гэтым, У канчатковым рахунку, у гэтыя некалькі радкоў кода гэта аб'явіць, што менавіта Тып дадзеных, студэнт. А цяпер давайце выкарыстоўваць яго. Я збіраюся зараз паглыбляцца ў файл называецца structs1.c. І давайце паглядзім на некалькі характарыстык тут. Такім чынам, матэрыял тут з'яўляецца у асноўным знаёмыя, і мы вярнуцца да таго, што не знаёмыя у хвіліну. Гэта, вядома, у тым ліку мой уласны Файл загалоўка, які з'яўляецца новым, а таксама, для Pset 3, дзе акрамя, Нагадаем, у нас ёсць helpers.h. Такім чынам, вы, магчыма, памятаеце #include helpers.h. Чаму, хоць я выкарыстоўваю цытаты а кутнія дужкі? Калі я выбіраю паміж імі? Амаль заўсёды я, здаецца, выкарыстоўваць вуглавыя дужкі. А потым, раптам на Лінія шэсць я выкарыстоўваю падвойныя двукоссі. Чаму гэта можа быць? Да? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Гэта актуальна, што? АЎДЫТОРЫЯ: Гэта ў IDE. Дэвід Дж малая: Так, што ў маёй фактычнай IDE. І давайце не будзем спыняцца на IDE, так як гэта проста інструмент, які я выкарыстоўваю. Вось у маім току Каталог, у прыватнасці. Так structs.h мой уласны файл не ўстаноўлены ў IDE, у самой аперацыйнай сістэме, хутчэй гэта ў маім бягучым каталогу. Такім чынам, Канвенцыя, калі вы хочаце каб уключыць свой уласны файл загалоўка, Вы проста выкарыстоўваць двайныя двукоссі. Што мы называем гэтую рэч у лінія 8, наогул кажучы? Гэта што? #define то. Гэта ўяўляе канстанты, праўда? Калі вы хочаце, каб мець значэнне ў вашай праграме выкарыстоўваць цэлы кучу раз, гэта Добрае пагадненне фактар ​​яго, аб'явім яго з хэш-сімвала вызначыць, то, у адпаведнасці з пагадненнем, усяго верхні рэгістр word-- хоць гэта не строга неабходным, але гэта пагадненне чалавекам зарабіць канстанты так што яны выскокваюць ў вас visually-- прастору і тое значэнне, якое вы хочаце быць эквівалентна імя, што пастаянныя ст. Няма коскі, але вы проста вынікае, што малюнак ёсць. Так што я раблю ў гэтай фактычнага кода. Такім чынам, давайце зірнем на асноўная праграма тут. У радку 12, таму што я ўключылі structs.h, Цяпер я чароўна на маю утылізацыя новы тып дадзеных. Я не проста мець доступ да Int, і сімвал, і паплавок, і радок, і сіні і іншыя. Цяпер у мяне ёсць доступ да тып дадзеных студэнтам. Такім чынам, у радку 12, я аб'яднання дзвюх ideas-- адзін тып дадзеных і два, з выкарыстаннем масіва. І так у гэтай праграме, калі Я хачу, каб на самой справе падтрымліваюць тры розных студэнтаў у маёй праграме, я можна проста сказаць, дайце мне зменную званыя вучні, кожны з якіх гэта тыпу студэнтаў, якія мой карыстацкі тып дадзеных. І, у прыватнасці, даць мне тры з іх у маім масіве. Так што цяпер нам рабіць у гэтай праграме? Вось толькі для контуру ітэрацыі ад 0 да 3, таму што гэта тое, што велічыня студэнтаў. Я проста прапаноўваючы карыстачу даць мне імя студэнта. І тады ў радку 17, мы ёсць у асноўным знаёмыя радкі. У нас ёсць стары сябар GetString справа. І тое, што частка сінтаксісу па-відаць, новы, калі вы ніколі не праграмавалі ў C, перш чым, і ніколі не выкарыстоўваў структур? Да? Аўдыторыя: .name. Дэвід Дж малая: The .name. Але гэта не занадта шмат скачком, таму што цяпер студэнты дужкі I дае I-й студэнт. І калі вы хочаце, каб нырнуць ўнутры гэтай структуры, вы проста карыстаецеся адзін перыяд і то імя зменнай ўнутры, або ўласцівасць ўнутры, што Вы хочаце, каб атрымаць доступ да. Дакладна тое, калі я тады заахвоціць Карыстальнік, дай мне студэнта інтэрнат, Вы можаце так жа магазін, які радок ў зменнай інтэрната ўнутры гэтай студэнцкай структуры. А цяпер усё становіцца трохі фантазіі. І гэта будзе выглядаць на, магчыма, шмат даволі хутка. Але вы ўбачыце, што гэта значна больш Pset 4, так што давайце проста погляд на яго цяпер. Аказваецца, што ў радку 23 праз 38, што вы думаеце, што я, магчыма, робіце? Я зняў каментары на сённяшні дзень, але версія кода для анлайн- даведнік мае ўсе каментары. Што я, здаецца, робяць? АЎДЫТОРЫЯ: Захаванне файла з усімі інфармацыя, увайшоў карыстальнік. Дэвід Дж малая: Так, дакладна, гэта новы спосаб што мы бачым два, Яшчэ адна асаблівасць C, у выніку чаго я магу стварыць мае ўласныя файлы. Да гэтага часу, амаль кожная праграма Вы напісалі з'яўляецца асобай без грамадзянства. Як толькі гэта будзе зроблена працуе, вось і ўсё. Там няма памяці або ўспамін пра яго. Там няма файла захоўваецца. Але калі вы хочаце, каб захаваць ўвод, які мае адбылося, як у гульні або праграме як гэта, аказваецца, мы можам гэта зрабіць. І вы ўбачыце, што гэта больш у Pset 4 і ў раздзеле. Але гэтая лінія 23 па сутнасці стварае файл з імем students.csv. І вы, магчыма, бачылі гэта раней. Нават калі вы ніколі не вывучалі CS раней, CSV з'яўляецца падзеленых коскамі зменных. Гэта як вельмі беднага чалавека версія файла Excel, што азначае, што яна можа быць адкрыта у Excel і ў Apple, Numbers, і мае радкоў і слупкоў. Але гэта не ўласнасць Фармат, як Microsoft або Apple. Гэта проста коскі, якія падзяляюць каштоўнасці, якія мы бачым у цяперашні час. І толькі зрабіць здагадку. У радку 23, у самым канец, мой другі аргумент да гэтай новай функцыі, званай е адкрыты для адкрытага файла з'яўляецца ш. Што ж, магчыма, азначаюць? Да? АЎДЫТОРЫЯ: Гэта дазваляе запісаць у файл? Дэвід Дж малая: Гэта дазваляе Вы пішаце ў файл. Такім чынам, ёсць пара варыянтаў што мы можам падключыць тут. Але калі вы проста хочаце, каб прачытаць файл, які глядзець на яго і чытаць яго ў памяці, вам проста выкарыстоўваць двукоссі канец цытаты "г". Калі вы хочаце напісаць у Файл, вы карыстаецеся цытату канец цытаты "ж". Там жа дадаваць і пару іншых рэчаў, калі вы хочаце змяніць існуючыя файлы. Цяпер мы збіраемся, каб бачыць гэта рэч, то мы вернемся да лініі 24. NULL, то аказваецца, спецыяльнае значэнне, што могуць быць вернутыя пэўных функцый калі нешта пайшло wrong-- калі файл не існуе, калі вы запусціце з памяці, або куча іншых памылак. Але цяпер, давайце выкажам здагадку, што гэта проста звычайны праверка памылак. Тут, у лініі 26, я ітэрацыі ад 0 да 3 на працягу ўсіх маіх студэнтаў. І гэта свайго роду роду новай функцыі, fprintf, але проста ўзяць здагадку. Калі Printf проста раздрукаваць адфарматаваную радок, Што ж fprintf, верагодна, азначае? АЎДЫТОРЫЯ: Друк у файл. Дэвід Дж малая: Раздрукуйце адфарматаваць радок у файле. Гэта тое, што дадатковыя е сродкі файлаў. І новы першы аргумент павінен быць пераменная, якая ўяўляе файл. Тады мы проста павінны фармат радок, як Printf. І нават калі гэта Сінтаксіс з'яўляецца новым, гэта толькі сродкі падключыць імя студэнта, убудова ў студэнцкіх інтэрнатах, а затым з fclose, зачыніць файл. А потым lastly-- гэта новы і мы вернемся да гэтага Перад long-- Я вызваляючы студэнт па прычынах што здарылася наверсе там. Але мы вернемся каб што да long-- гэта таму, што, як гэта GetString на самай справе працуе пад капотам. Такім чынам, давайце зірнем тут. Калі я друкую Ls ў маім каталогу, заўважыць, што я не ёсць файл з імем students.csv, проста не існуе, не існуе. Так што, калі цяпер я скампіляваць гэтую праграму, зрабіць Структуры 1 ,. / Структуры-1, і я збіраюся ісці наперад і ўвесці ў Эндзі, які жыве ў Берклі ў Ельскім універсітэце. Мы збіраемся, каб мець Адзежа, які жыве ў Тайер ў гэтыя дні. І давайце прыдумаць, дзе гэта, я думаю, Марыя знаходзіцца ў Mather, калі я правільна ўспомніў. Так што нічога, здаецца, не адбудзецца. Але калі я тыпу Ls зараз, ёсць students.csv. Давайце ісці наперад і адкрыты students.csv. Гэта зноў вельмі лёгкі фармат. Але я проста прыняла канвенцыю што ў мяне ёсць два радкоў і слупкоў тут. У першай калонцы Першыя імёны людзей. Другі слупок навучэнца інтэрната, або каледж, або дом, ці яшчэ шмат чаго. І зараз я захаваў гэта на пастаяннай аснове ў выглядзе файла. Так што гэта не ўсё, што цікава. Але гэта ўсяго толькі прыступкай у цяперашні час каб быць у стане захавання інфармацыі пастаянна. Такім чынам, давайце зараз паглядзім, што яшчэ мы можам рабіць з гэтымі і іншымі функцыямі. Але спачатку, якія-небудзь пытанні? Гэта было шмат, і гэта было хутка. Але вы ўбачыце шмат больш Pset 4, а таксама. Да? АЎДЫТОРЫЯ: Ці ёсць спосаб, каб працягнуць даданне імёнаў у гэты файл? Дэвід Дж малая: Добры пытанне. Ці ёсць спосаб, каб працягнуць дадаўшы імёны гэтага файла? Так. І на самай справе, калі вы ў канчатковым да паўторнага адкрыцця файла, Вы б выкарыстоўваць цытату канец цытаты "а" для Append, які б проста дадаць новы радок, А Новая лінія зноў і зноў, дакладна. Добры пытанне. Іншыя пытанні? Да? АЎДЫТОРЫЯ: Калі вы пабег Праграма зноў прама цяпер, б гэта працягваць дадаваць імёны ў падаць ці гэта адкрыць новы файл? Дэвід Дж малая: Ах, добры пытанне. Калі вы зноў адразу пабег праграма Цяпер, можа быць, ўвялі ў новыя імёны, гэта можа дадаць ў файл ці перазапісаць файл? Апошняе, таму што я не выкарыстоўваючы на ​​даданне рэжыму. І таму, што я проста слепа адкрыццё файла для запісу, гэта проста будзе перазапісваць файл. Так што я сапраўды трэба будзе зрабіць, гэта дадаць, калі я хачу на самай справе ёсць доўгі тэрмін базы дадзеных. Цяпер CSV карысна, шчыра кажучы, нават для, як, калі вы writing-- і мы ў канчатковым выніку бачым гэта пазней у семестр, калі мы выкарыстоўваем тамоў CSV для іншых мэтаў. Калі вы хочаце захаваць ўсіх людзей хто зарэгістраваўся для якога-небудзь падзеі, або зарэгістраваліся для студэнта група ці нешта падобнае, захоўвання дадзеных у гэтым родзе фармату супер зручна. Таму што літаральна, калі б я былі ўкласці менавіта гэты файл. Я мог бы і double-- давайце на самой справе спрабуюць гэта калі ў мяне ёсць Excel або Numbers тут. Я збіраюся правай кнопкай мышы або кантроль кнопкай мышы мой файл. Упс. Пстрыкніце правай кнопкай мышы або кантролю кнопкай мой файл. Давай, мая мыш не супрацоўнічае. Download-- я збіраюся спампаваць усе файлы вось так толькі так я магу захапіць гэты. І давайце паглядзім, калі гэта працуе students.csv-- першы раз Я актываваў. Цяпер яны хочуць, каб убачыць мае кантакты. Цяпер, мне трэба, каб зарэгістравацца. Паглядзіце, як лёгка гэта выкарыстоўваць тамоў CSV? Так, трымаць яго ў курсе. Добра, зараз мы гатовыя да класа. ОК, ну, што новага? ОК, блізка. Гэта было чароўна. Добра, зараз у нас ёсць, каб абнавіць. І зараз, гэта забыўся, што падаць Першапачаткова я адкрыў, але тое, што A-- мы ідзем. ОК, так што цяпер у нас ёсць файл Excel. Дзякуй. ОК, так што тое, што я рабіў, было лёгка. Вядома, я мог бы загадзя ўсталяваныя Excel, або лікаў, або тое, што праграма. Але гэта добра, таму што Цяпер я магу маніпуляваць Дадзеныя ў стандартным фармаце. Так што цяпер давайце кантэкст перайсці да дзе мы спыніліся у мінулы раз, які быў пачаць зняць навучальныя колы. Але спачатку, вы не зрабілі паглядзець раней абед адбываецца зноў тут Агню і Лёд у Кембрыджы, сітары ў Нью-Хейвене. Зарэгістравацца на сайце CS50s як мага хутчэй далучыцца да студэнтаў і супрацоўнікам CS50. Таму мы прынялі навучальныя дыскі у панядзелак, як follows-- Радок быў абвешчаны ў Бібліятэка CS50s на працягу некаторага часу. І гэта добра, таму што гэта дазваляе нам казаць аб зменных як поўных слоў і прапаноў і многае іншае. Але, аказваецца, радок не існуе. Гэта проста сінонімам, або псеўданім, што мы стварылі за тое, што на самай справе трохі больш тэхнічная называецца сімвал *. І на самай справе, мы бачылі прыклад праграмы на панядзелак што не вядуць сябе зусім, як мы чакалі. Гэта быў файл, параўнаць і 0. І нагадаем, што параўноўваць-0, калі Я перакампіляваць праграму панядзелак і запусціць параўноўваць-0 і ўвядзіце ў маму у ніжнім рэгістры, і мама ў ніжнім рэгістры зноў. Праграма настаяў, каб я увядзіце розныя рэчы, нават калі мама, усё ў у ніжнім рэгістры, ідэнтычны візуальна. Дык што ж кароткі адказ чаму кампутар лічыць гэтыя два радкі адрозніваюцца? Да? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Дакладна. Так, мама, упершыню Я увядзiце яго ў, у цяперашні час захоўваюцца дзесьці ў маёй кампутара памяці, але ў іншым месцы чым у другі раз я друкую ў маме. Цяпер, вядома, маглі быць аптымізаваныя. Кампутар можа быць разумным і рэалізаваць гэтыя два радкі, эй, яны ідэнтычныя. Дазвольце мне не залішне захоўваць яго. Але кампутары не робяць, што аптымізацыя, калі вы не скажаце ім. Так, па змаўчанні, яны проста хачу, каб у канчатковым выніку у двух розных месцах у памяці. І так больш зразумела, калі мы параўналі два радкі, Першая называлася гадоў, другі быў выкліканы т, што канкрэтна я быў Параўнанне тут, на лініі 13? Так. АЎДЫТОРЫЯ: Гэта месца ў памяці што пераменная будзе паказваць на. Дэвід Дж малая: Сапраўды, я быў Параўноўваючы месца ў памяці што гэтыя зменныя паказваюць на. Так у прыватнасці, калі мама была ў Нумар байта 1, і 2, і 3, і 4--, таму што памятаю, зваротны слеш 0 павінна быць цалкам у канцы. А другі асобнік мама, м-о-м, быў па адрасе 10, 11, 12 і 13. Я параўноўваў 1, што адрас, што размяшчэнне ў памяці, супраць 10, які відавочна, не тое ж самае. 1 не 10. Так што гэта добра ў тым, што гэта даволі проста. Але гэта праблематычна, паколькі мы не можам, здаецца, для параўнання радкоў. Так fundamentally-- і ў гэтым нізкім узроўні, калі вы хочаце рэалізаваць праграма для параўнання два асобных словы, якія карыстач увёў у якасць, яны выстройваюцца сімвал для сімвал, толькі ў агульных рысах, тое, што нам трэба зрабіць, па-відаць? Гэта не дастаткова проста паглядзіце на гэтыя два адрасы. Што нам трэба рабіць? Да? АЎДЫТОРЫЯ: перабіраць радок [неразборліва]. Дэвід Дж малая: Так, давайце перабору радка. Давайце выкарыстоўваць цыкл, у той час як завесы, або Усё, што вы найбольш камфортна. І калі ў нас ёсць два радкі дзесьці ў памяці, давайце паглядзім на кожны гадоў Першы знак, то кожная другім характар, то трэці, і чацвёрты, і пяты, пакуль мы не трапілі тое, што асаблівае значэнне вартавога? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Так, зваротны слеш нуля, і ў гэты момант у любым радкі мы можам вырашыць, што гэта яго. Хіба мы адпавядае кожны сімвал? Калі няма, вярнуцца ілжывым. Калі гэта так, вяртае ісціну. І так, што менавіта тое, што гэтая версія праграмы параўноўваць-1.c робіць. Гэта ідэнтычна таго, што мы паглядзеў на панядзелак акрамя таго, што я пазбавіўся ад слова string-- хоць што не мае ніякага функцыянальнага impact-- ўсе Я зараз раблю гэта выдаленне некаторыя візуальныя навучальныя дыскі, але ясна бачыць, што з і Т-адрасы. І гэта тое, што зорка, зорачка, уяўляе гэта адрас, у адваротным выпадку вядома больш тэхнічна як паказальнік. Так што, калі я заяўляю, з на радок 9 і кажуць сімвал * з, гэта не значыць, даць мне радок. Гэта азначае, што даць мне зменную, Мэта ў жыцці з'яўляецца захоўванне адрасы. Таму што я збіраюся паставіць адрас радкі ў ім. І на самай справе, GetString, каб быць ясна, не вяртае радок. Ён не вяртае маме Зваротная касая рыса нуля, як такія. Што канкрэтна GetString і дакладна вярнуцца? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: адрас, адрас адрас першага сімвала у нейкай радкі ён атрымаў. І вось зараз мы бачым спецыяльнае ключавое слова зноў. І, я згадваў пра гэта раней. Гэта будзе добра канвенцыя што мы ўбачым зноў і зноў цяпер. Я правяраю, каб пераканацца, што з не нулявы і т не з'яўляецца нулявым. Таму што на аснове майго сапраўды Хуткі любое раней, тое, што можа азначаць, калі не вяртае GetString адрас, але Н-У-Л-Л, што зноў-такі, некаторыя асаблівае значэнне? АЎДЫТОРЫЯ: Памылка. Дэвід Дж малая: Гэта памылка. Што-то пайшло не так. І тое, што, як правіла, можа адбыцца, асабліва з strings-- якая можа быць з невядомай даўжыні ў advance-- Магчыма кампутары » з памяці, можа быць, Вы ўвялі ў такім доўгае слова або прапанову або ўставіць такую ​​велізарную эсэ там проста не хапае памяці. І так GetString не можа вярнуцца адрас ўсёй рэчы, так што проста нічога не вяртае. І гэта кажа пра памылку адбылося вярнуўшы асаблівае значэнне NULL. Гэта нулявы адрас, так бы мовіць. Цяпер высвятляецца, З пастаўляецца з Функцыя, якая робіць гэтую ітэрацыю. Мы не павінны рэалізоўваць гэта з для цыклу або час цыклу самі. Мы можам выкарыстоўваць функцыю, называецца лаканічна, змяшаць комп, або радок параўноўваць, чыя Мэта ў жыцці з'яўляецца менавіта гэта і робяць. Вы даеце яму два паказальніка, два адрасы, і яна будзе ісці па гэтых адрасах а затым параўнаць ліст для літара ў літару за якасць, спыняючыся толькі калі тое, што гэта праўда? Калі інтуітыўна варта змяшаць комп спыніць ітэрацыі, проста каб быць зразумела? Калі яна трапляе зваротны слеш 0 ў любым Радок, у гэты момант ён можа вырашыць, мае ўсе адпавядае, або яшчэ не было неадпаведнасць? Такім чынам, калі мы запусцім гэта цяпер і спрабуюць наша маленькая капіталізацыя гульня, таму пераканайцеся, параўнаць-1, ./compare-1, і увядзіце мама ў ніжнім рэгістры абодва разы. Цяпер тое ж самае. І калі я зраблю гэта зноў малыя і вялікія то, магчыма ,. Цяпер сапраўды адрознівае паміж загалоўнымі і малымі. Так што не ўсё так складана, ці чароўны, але гэта цяпер вытлумачальны што адбываецца пад капотам. Так што яшчэ мы можам атрымаць ад гэтага віду ўрока? Такім чынам, давайце зірнем на гэта. Я збіраюся ісці наперад і напісаць Хуткі праграмы тут называецца капіявання 0. А цяпер давайце ісці наперад і фактычна давайце зробім this-- з копіяй 0, зірнем на тое, што я трапіў сюды. Я спачатку расказаць карыстачу, што-небудзь сказаць. Тады я атрымліваю радок і я захаваў яго ў с. Затым я правяраю, калі ёй роўная роўны NULL, проста вяртае 1. Так што гэта проста стандартная праверка памылак. Нічога цікавага не адбылося. І на самай справе, калі мы пазбавімся ад памылкі праверкі, як гэта выглядае тыдзень 1 кода на дадзены момант. Але я пачаў, каб атрымаць крыху лепш пра гэта. Зараз у лініі 16, тыдзень таму, можа быць, нават пару дзён ці гадзін таму, Вы маглі б сказаць лініі 16 Стварэнне зменнай называецца т і капіраванне S ў яго. І гэта зусім разумна вынас. Але дакладней гэтага часу. Што адбываецца ў радку 16? Што становіцца скапіяваныя справа налева? Да? АЎДЫТОРЫЯ: т атрымліваць гэта адрас з? Дэвід Дж малая: Роўна, т становіцца адрас с. Такім чынам, каб быць ясна, цяпер, калі я іду вярнуцца да гэтага папярэднім прыкладзе і я выцягнуць рэч я надрукавалі. І тое, што мы набралі in-- вось з, а вось гэта тое, што я набраў у дзесьці ў памяці, мама, а затым зваротны слеш 0, які дадаецца для мяне. Тое, што я захоўваюцца тут, нагадаем, Гэта ў месцазнаходжанні 1, 2, 3, 4, гэта тое, што ў цяперашні час у с. Так што, калі ў радку 16, я кажу дайце мне іншай зменнай называецца т і магазін па меншай кошту з, тое, што атрымлівае захоўваецца тут не будзе мама а проста лік 1. Так што, калі мы паглядзім наперад у гэтай праграме Цяпер, што адбудзецца? Так заўважыць, што ёсць гэтая функцыя вы маглі выкарыстаў гэта некаторы час таму для Цэзара, або Vigenere, або, можа быць, не на ўсіх. Я сцвярджаю, з майго Printf, я збіраецца атрымаць выгаду капіявання т. Першы ў лініі 19, хутка разважнасці праверыць, STRLEN правярае даўжыню т. Таму што я не хачу, каб паспрабуйце скарыстацца нешта калі няма радка там. Калі карыстальнік проста націсніце Enter, няма нічога, каб атрымаць выгаду. Так што я не хачу, каб зрабіць лінію 21. Так лінія 21 спекулюючы якая літара, па-відаць, у т? АЎДЫТОРЫЯ: м? Дэвід Дж малая: Гэта выглядае як гэта капіяванне які? АЎДЫТОРЫЯ: м. Дэвід Дж малая: Э-э, м. Такім чынам, першым т, таму паведамлення, што я перайсці да TOUPPER, што калі вы ніколі не бачылі яго, гэта проста функцыя выгаду ў якасці ўваходных дадзеных. т кранштэйн нуль азначае даць мне нулявы характар ​​т. І так, як робіць гэта змена малюнка, каб было ясна? Што трэба, каб перапісаць ці змяніць па адносінах да S і T і мама Зваротная касая рыса нуля. АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Так, так што гэта адно тут проста неабходна атрымаць змянілася, мэтай якіх выправіць this-- неабходна атрымаць зменены на літары М. Але цяпер, паглядзіце пазней у Праграма, калі я раздрукаваць з і т, як я чышчу тут, глядзець тое, што адбудзецца раздрукоўкі з і т. Так што капіявання 0, ./copy-0. Дазвольце мне ісці наперад і ўвесці у маме ў ніжнім рэгістры. Звярніце ўвагу, як арыгінальны і копія былі капіталізаваць. Чаму? Ну, з т і абодва паказваючы на, калі хочаце, тое ж самае кавалак памяці. І, шчыра кажучы, гэта становіцца сапраўды uninteresting-- той факт, што мы выкарыстоўваем адрас нуля тут. Я маю на ўвазе, я сапраўды не хвалюе, дзе матэрыял у памяці. На жаль, я пры спробе ачысціць занадта шмат. Але я сапраўды не хвалюе, дзе рэчы знаходзяцца ў памяці. І так, сапраўды тое, што праграмісты схільныя думаць аб з'яўляецца тое, што калі вы кажаце пра адрас, або паказальнік, хто клапоціцца, дзе яна знаходзіцца ў памяці. Я не хвалюе, калі гэта ў байт адзін або адзін мільярд. Я проста ўсё роўна, што гэта пераменная эфектыўна паказваючы на ​​тое кавалак памяці. І так з гэтага часу замест каламбур над адвольным адрасах памяці, давайце проста пачаць маляваць паказальнікі як паказальнікі, як стрэлы. Так што з і т на самай справе, у адпаведнасці з гэтай праграмай, таму што, як я стварыў т, гэта проста два асобных зменных паказваючы ў той жа кавалка памяці. І мы не хвалюе, дзе яны знаходзяцца. Такім чынам, мы можам абстрагавацца ад гэтай дэталі. Так як я магу гэта выправіць? Калі я хачу, каб напісаць версію копіі праграма, якая непасрэдна капіюе радок і капитализирует толькі копія, проста інтуітыўна, што атрымаў быць інгрэдыент для нашага рашэння? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Нам трэба што? АЎДЫТОРЫЯ: Кавалак памяці. Дэвід Дж малая: Мы павінны іншы кавалак памяці, праўда? Мы не ведаем, як зрабіць яго яшчэ, абавязкова. Але я накшталт трэба, каб гэта адбылося, так што арыгінальны мама ў ніжнім рэгістры заканчваецца ў той дадатковай кавалак памяці. А потым, калі я змяніць копію, я не хачу, каб змяніць гэтую копію тут. Я замест гэтага хочаце, каб змяніць толькі гэты копія, так што арыгінал застаецца нязменным. Такім чынам, давайце паглядзім, як мы можам гэта зрабіць. У копія-1, які ўжо быў пазбаўлены каментар, але пракаментаваў анлайн. Замест гэтага мы зрабіць гэта following-- лініі ідэнтычныя, дай мне радок і называюць гэта S. Але цяпер давайце паглядзім на адзін з нашых самых складаны, але апошні з-за складанасці на некаторы час, радок 16 робіць менавіта гэта. Так што, калі ваш зручны з Карціна, якую мы толькі што drew-- даць мне новую частку памяці, скапіяваць ўсе ў яе, давайце паглядзім, як мы пераводзім што код. Так лініі 16, на левым баку, сімвал * т дае мне гэтую скрынку тут. Гэта ўсё, што ён робіць. На правай баку, м Alloc, або Таноса, з'яўляецца вылучэнне памяці, супер фантазіі, загадкавыя спосаб проста кажу даць мне кавалак памяці. Колькі памяці трэба? Ну, гэта свайго роду вялікі выразы. Але давайце паглядзім, што ён кажа тут. Так што гэта, вядома, даць мне даўжыню радка з с. Так, мама гэта павінна быць што? Так што тры, ці не так? мама трох знакаў. Вы не палічыць Зваротная касая рыса нуля, калі вы казаць аб даўжыні радка гэта На самай справе чалавека бачныя літары. Так мама, так што гэта дае мне 3. Але пачакайце хвіліну, я зараз, дадаўшы 1. Чаму я на самой справе хачу, каб вылучыць 4 байта, а не толькі 3? Да? АЎДЫТОРЫЯ: Для значэння дазорнай? Дэвід Дж малая: Роўна, для гэтага значэння дазорнай. Для зваротнай касой рысы нулявы, Мне трэба ўсяго 4 байта. Таму мне трэба даўжыню радкі плюс 1. А потым проста для добрага measure-- нават калі на гэтай сістэме, гэта заўсёды будзе 1-- Я кажу памножыць гэта памерам з гольца. Аказваецца SizeOf гэта аператар у З, проста кажа вам, у колькасць байт, што гэта патрабуецца для пэўнага тыпу дадзеных. Гэта не працуе для масіваў, Як правіла, часам ён робіць. Але ўвогуле выпадку, няма. Але ён скажа мне, колькі байтаў, сімвал з'яўляецца, што аказваецца заўсёды 1. Так што гэта, як множанне на 1. Так супер загадкавыя гледзячы радок кода. Але ўсё гэта робіць дае мне кавалак памяці. Але гэта, здаецца, капіраванне нічога ў гэтай памяці? Пакуль няма. І так што я на лініі 22, а 23, 24, 25, ну, я проста гэта зрабіць. І гэта свайго роду старая школа матэрыял у цяперашні час. Гэта як Pset 2, дзе Вы проста перасоўванне рэчы вакол у памяці, або, хутчэй, у радках. Так што я ітэрацыі ад 0 да даўжыня радка з. І я капіявання я-й сімвал у з у я-га сімвала у т. І таму, што я, праграміст, зрабіў Абавязкова вылучыць роўна столькі байтаў як мне трэба, гэта выдатна адзін-да-аднаму. І я скапіяваць маму ніжні рэгістр на новы. А потым, нарэшце, я гэтую лінію. І так што эфект толькі зарабіць гэтую т тут. Так шмат, каб паглынуць, але калі вы проста разгледзець што на самой справе адбываецца на пад капотам проста рухаецца іх Байты вакол, усё, што Неабходна, каб вырашыць гэтую праблему проста каб даць нам гэты кавалак памяці. Цяпер на рызыку Пераважная, дазвольце мне паказаць адзін прыклад, які амаль ідэнтычныя, за выключэннем аднаго гэтага радок кода. Так што гэта хакер версія гэтай праграмы, калі вы будзеце. Але давайце проста пераганяць гэта ў той, што адбываецца. Лінія 24 выкарыстоўваецца, каб быць у гэтым т Кранштэйн я атрымлівае ы кранштэйн я. Зараз, я мяняю гэта значна больш загадкавымі зорка т плюс 1 складае зорка з плюс 1. Так, што адбываецца і чаму у нас ёсць зоркі характар? Мы бачылі зорку перш, і ён выкарыстоўваецца па-рознаму тут. Мы раней бачылі сімвал *, цяпер я бачу зорка ў пачатку, і гэта нармальна. Таму што аказваецца мы можа заключыць свайго роду проста ад тых, у першую чаргу прынцыпы, што адбываецца. Так проста быць зразумела, што ёй? На мінулым тыдні, гэта было радок. Чаго не хапае больш. Што ёй канкрэтна? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: Гэта паказальнік. Гэта адрас Першы знак мы набралі ў. Добра, што гэта т? АЎДЫТОРЫЯ: [неразборліва] Дэвід Дж малая: The адрас першага байта у т, што частка памяці пераразмеркаваны. Вось і атрымліваецца, што, калі мы ітэрацыі ад 0 да ад радка length-- у першую чаргу, я пачынаецца з 0, таму што гэтай старой школы завесы рэчы. Так што для прастаты, давайце Выкажам здагадку, што першы радок кода на самай справе проста гэта, права. Калі я роўная нуля, дадаўшы нуль да чаго-то, верагодна, не будзе мець эфекту. Так што гэта выказванне? Аказваецца, зоркі Аператар у дадзеным кантэксце гэта разыменовать Аператар, які знаходзіцца ўсяго мудрагелісты спосаб сказаць перайсці па наступным адрасе. Так што, калі ёй гэта адрас першага характар ​​гэтага кавалка памяці, * З сродкам ісці туды. І таму, што мы намалявалі карціна, такім чынам, Вы можаце прыняць наступная мадэль псіхічнага. Калі гэта ёй, а вы кажаце * S * S, накшталт як жолабаў і ўсходаў, калі вы памятаеце гульню з дзяцінства, гэта як след, што стрэлку і перайсці па адрасе. * Т тое ж самае. Так што пачніце тут, перайдзіце да яго кавалак. Я не магу проста намаляваць на Гэты экран такім чынам. * Т азначае ісці сюды. І потым, для цыклу гэта проста кажучы перамясціць гэты сімвал тут, перамясціць гэты сімвал тут, перамясціць гэты сімвал тут. Але як я магу зрабіць гэта прырашчэнне? Мне трэба, каб выправіць тое, што я толькі што выдалілі. Гэта тое, што звычайна называюць арыфметыка паказальнікаў, якія азначае матэматыку з адрасамі. Калі ў гэты цыкл, Я працягваю павялічваючы I, і з ўяўляе сабой адрас і т з'яўляецца адрас, калі я проста буду дадаваць 1, гэта проста азначае, працягваць рухацца наперад, і наперад, і наперад у памяці. Гэта як Оксфард-стрыт, Вуліца, што будынак КС на. У CS будынка знаходзіцца ў 33 Оксфард-стрыт. Так што, калі вы павінны былі зрабіць 33 Оксфард-стрыт плюс 1, што прыносіць вам 34 Оксфард Вуліца, то 35 Оксфард-стрыт, затым 36 Оксфард-стрыт, усе тыя, будынка на самай справе - калі яны існуюць. І так, што ўсё, што мы робім тут з арыфметыкай паказальніка. Так што гэта супер таямніцай спосаб выразы сябе. Але ўсё, што адбываецца пад капотам толькі наступныя адрасы, як пасля карты, калі хочаце, або пасля стрэлкі як мы намалявалі на экране. ОК, шмат, каб пераварыць. Любое пытанне па сінтаксісе, канцэпцыі, паказальнікі, Таноса, і таму падобнае. Так, тут у першую чаргу. АЎДЫТОРЫЯ: Дык дзе, што кажа * т роўная ToUpper * т, з'яўляецца тое, што збіраецца скарыстацца усе літары ці просто-- Дэвід Дж малая: Ах, вельмі добрае пытанне. Такім чынам, у гэтай лініі тут, 31, гэта збіраецца атрымаць выгаду першая літара або ўсе лісты. Так давайце адкажам, што, перайшоўшы вярнуцца да першых прынцыпам. І першыя прынцыпы тут я маю на ўвазе проста зайдзіце на асноўных азначэнняў што ўдзельнічае. Так ToUpper гэта функцыя што капитализирует паўкокс. Гэта ўсё. * Т азначае ісці да first-- перайсці па адрасе ў т. Так, у карціне, калі гэта кавалак памяці мы вылучылі з Таноса, і гэта т, * т азначае ісці сюды. Між тым, вы перадаеце што значэнне, у ніжнім рэгістры м каб ToUpper, вы атрымліваеце назад Сталіца М, дзе вы пакласці яго? Ты ставіш яго ў тым жа месцы. І так па гэтай логіцы тых, асноўныя вызначэння, што гэта толькі загалоўнай першую літару калі вы не ітэрацыі з I або а цыкл або час цыклу, ён не збіраецца рабіць што-небудзь большае, чым вы спытаеце яго. Добры пытанне. Да? АЎДЫТОРЫЯ: Чаму вы карыстаецеся разыменовать метаду, а не масіў? Дэвід Дж малая: Ах, добры пытанне. Чаму б вам выкарыстоўваць разнаймення Метад замест метаду масіва? Няма асаблівых прычын, не быць сумленным. І на самай справе, для гэтага выгляд, напрыклад, права, Я проста сцвярджаючы, што робіць Праграма складаней, больш вочы шкленне над, людзі правяраючы таму што гэта выглядае супер таямніцай, але нават калі ён робіць тое ж самае. І так, шчыра кажучы, гэта залішне візуальна комплекснае рашэнне да праблемы. Ён па-ранейшаму добры дызайн, пяць з пяці дызайну, будзь то ў кранштэйне абазначэнне або абазначэнне паказальніка. Но-- асабліва, калі мы атрымліваем пазней у ходзе ў Pset 5 калі мы рэалізуем гэтую слоўніка, Я ўжо згадваў пару times-- мы на самай справе клапоцяцца аб адрасы нізкі ўзровень памяці што мы сапраўды разумеем, тое, што адбываецца. Але цяпер, аказваецца, што гэта радок кода тут квадратныя дужкі самай справе не існуе. Яны, што называецца сінтаксічны цукар, які гэта проста дзіўна халаднавата спосаб сказаць кампілятар пераўтворыць квадратныя дужкі, каб быць што матэматычнае выраз. Так што гэта чалавек канвенцыі каб мець магчымасць проста напісаць гэтыя вельмі зручныя кранштэйны. Але тое, што кампілятар, ляск, на самай справе робіць любы час Вы пішаце што выдзелены ў адпаведнасці 24, пад капотам, гэта сапраўды ператвараючы яго на гэта. Гэта проста больш прыемным, як чалавек чытаць і пісаць код, як лініі 24. Але ў рэшце рэшт тых, навучальныя колы занадта адарвацца калі сваё ўласнае камфорт мацнее. Добра, так ўспомніць тое, што гэта быў свайго роду вялікай праблемай мы пабеглі ў. І гэта тое, што выклікала гэтае цэлае блін размова аб паказальнікаў, і адрасы, і капіраванне рэчы. Гэта таму, што мы спатыкнуўся гэта глупства, дурное пытанне, у выніку чаго Я рэалізаваў logically-- з Ларэн тут, на дэма і апельсінавага соку у milk-- цалкам алгарытмічных правільная функцыя для перапампоўкі дзве зменныя " значэння, але рыса не мае якога-небудзь пастаянныя або пастаянны, эфект на мой код. І чаму? У двух словах, чаму гэта Рэалізацыя абмену лагічна правільна, але не мае ніякага ўплыву ад зменных, якія перадаюцца яму, як х і ў для асноўнай? У чым жа сутнасць пытання? Да? АЎДЫТОРЫЯ: Таму што пераменная зрабіў копіі зменнай у праходзе праз функцыю. Дэвід Дж малая: Роўна, калі вы праходзіце зменныя ў функцыі, або аргументы у функцыі, яны прыняты экзэмпляры, які азначае, што вы атрымаеце ідэнтычны гледзячы ўзор бітаў для абодвух х і у, называецца тут і б. І вы можаце зрабіць што-небудзь Вы хочаце з гэтых копій, але яны збіраюцца мець не Ўплыў на выклікае функцыю. І на самай справе, мы звярнулі, што малюнак на экране, нагадаем Апошні раз, у выніку чаго, калі вам сапраўды думаю пра тое, што гэта адбываецца пад hood-- калі гэта памяць кампутара, і тут ёсць кавалак памяць выкарыстоўваецца для асноўнай, гэта кавалак памяць выкарыстоўваецца для абмену, і таму, нават калі асноўная мае дзве зменныя х і у, своп можа мець ідэнтычныя гледзячы Значэння, абодва з якіх з'яўляюцца 1 і 2, але яны цалкам розныя ўчасткі памяці. Такім чынам, мы павінны рашэнне гэтага. І, шчыра кажучы, здаецца, што мы зараз ёсць рашэнне гэтай праблемы, правільна. Калі цяпер у нас ёсць магчымасць для маніпуляваць рэчамі шляхам адрасоў і, накшталт латкі і лесвіцы стыль, выканайце наступныя стрэлкі і нікуды мы хочам ў памяці, мы не маглі вырашыць гэтую праблему пераходзячы ад асноўнай памяняць ня каштоўнасці, якія мы хочам, каб своп, але толькі інтуітыўна тое, што мы маглі б прайсці, каб памяняць замест гэтага? [Рэле ГАЛАСЫ] Дэвід Дж малая: Чаму б нам проста не перадаць яго адрасы, праўда? Чаму б нам не даць абмяняць Карта скарбаў, калі хочаце, што прыводзіць да яго фактычныя значэння х і у. Давайце падпампоўкі, на самай справе змяніць гэтыя арыгінальныя біты, а не проста праходзячы копіі біт. І так, на самай справе, гэта тое, што будзе рашэнне. Гэтая версія тут ясна дрэнна і недахопы. І цяпер, на першы погляд, гэта проста выглядае як мы дадалі кучу зорак выпадковым і перасёк пальцы што б сабраць. Але, у цяперашні час кампіляцыі будзе. Але давайце паглядзім, што азначаюць гэтыя рэчы. І, на жаль, аўтары З мог бы выбраць іншы сімвал каб зрабіць гэта крыху ясней, але зорка аператар мае рознае значэнне ў два розных кантэкстах. І мы бачылі, як, але давайце адрозніваць. Так на вяршыні там, калі я змяніў а і б ад таго, INT ў ў дрэнна Версія для INT зорак, а, бы, раней, былі цэлыя. Якія а і Ь ў цяперашні час у добры, зялёны версія? Яны адрасоў. Адрасы што, каб быць ясна? Адрасы лікаў. Таму той факт, што я кажучы INT зоркі сродкі гэта адрас цэлы лік, у прыватнасці. Так што цяпер заўважыць у радкоў кода, нешта яшчэ занадта змянілася. TMP застаецца нязменным, паколькі гэта проста часовае цэлае, няма чароўнай памяці там. Але ў цяперашні час мае патрэбу ў зорку. І, на самай справе, кожны іншы любое а і Ь, заўважыць, што ўсё, што змены ад чырвонага да зялёнага з'яўляецца тое, што я, папярэднічаючы гэтыя зменныя з зоркамі. Таму што я не хачу, каб скапіяваць і б. Таму што, калі я проста скапіяваць А і В і абмен а і б, што я на самой справе абмен? Усяго адрасы, я хачу, каб памяняць што ў гэтых адрасоў. Я хачу, каб пайсці туды. І так зорка аператар ўнутры маёй функцыі, не ўнутры спісу параметраў, азначае, што вы ідзяце па гэтых адрасах а на самай справе змяніць гэтыя значэння. Такім чынам, што ж карціну выглядаць так, як замест. Ну, калі замест гэтага я праходжання у а і б ня 1 і 2-- Я на самой справе трэба, каб дадаць адзін вызначэнне тут. Такім чынам, хай гэтага блока памяці знаходзіцца ў месцы 10. Гэта ў месцазнаходжанні 11, але гэта гэта крыху спрашчэння, Цяпер у мяне ёсць два варыянту я прайсці х і ў ці мне прайсці іх адрасы? Калі я праходжу іх адрасы як гэта, я проста Зараз трэба рэалізаваць своп за зялёнай код так што, калі ён бачыць, і калі ён бачыць б, не проста скапіяваць а і Ь і рухацца малако і апельсінавы сок. Малако і апельсінавы сок Метафара ў цяперашні час ламаецца, таму што тыя кубкі вадкіх і ня карт. Замест гэтага мы павінны ісці для вырашэння 10 і мы трэба ісці да вырашэння 11, і затым выканаць, што перастаноўка логіку. Таму логіка тая ж, але нам патрэбны крыху іншы спосаб доступу гэтыя зменныя. І так, у рэшце рэшт, тое, што Праграма павінна выглядаць гэтая. У swap.c літаральна скапіяваныя і ўставіць зялёны версіі. Але мне трэба, каб зрабіць адно змяненне. Гэта не дастаткова проста змяніць падпампоўкі. Якія іншыя радкі кода мне трэба змяніць? Да? АЎДЫТОРЫЯ: Дзе ён прымае аргументы. Дэвід Дж малая: Дзе ён прымае аргумент. Так што, калі я пракруткі уверх на галоўную, я не можа проста перадаць па х і у, і я абяцаю, апошні кавалак новага сінтаксісу сёння. Мне трэба прайсці ў ня х і у, але таксама адрас хну. І аказваецца, сімвал што аўтары абралі C , Калі вы выкарыстоўваеце Ампэрсанд тут, не блытаць з пабітавае Ампэрсанд, калі вы выкарыстоўваеце Ампэрсанд тут і Ампэрсанд тут, гэта высвятляе для вас, што адрас X, можа быць, гэта 10, то гэта адрас у, можа быць, гэта 11, і перадае тыя, у замест. Так шмат, каб паглынуць усё адразу. Але давайце зараз паглядзім хутка нашы пакінутыя чатыры хвіліны дзе ўсё можа пайсці наперакасяк. І, як у бок, на самай справе Я ўзяў гэтую карціну, TF ўзяў гэтую карціну ў год ці два таму. Так што гэта яшчэ кут Эліота сталовай. Паказальнікі з'яўляюцца, бадай, самая цяжкая тэма, што мы разгледзім у CS50. Так што, калі вы турбуецеся выгляд нахілу, як можа быць, гэта больш хакейнай клюшкі як гэта, разумею, мы накшталт набліжаецца пік Умовы канцэптуальнай складанасці. І я выхоўваю гэта фота, таму што я клянуся, богу, восенню 1996 года, калі я ўзяў CS50 з маёй выкладчыцкай хлопец, Нишат Мехта, ён пасадзіў мяне ў кут Эліёт Д. Хол за абедам, ці вячэру, ці нешта, каб паспрабаваць каб дапамагчы мне зразумець паказальнікі. І гэта, дзе я быў тыдняў пасля яна была ўведзена ў лекцыі калі гэта Я, нарэшце, зразумеў паказальнікі. І я спадзяюся, што гэта прыціснуць значна раней для вас. Але разумею, што гэта абсалютна сярод больш складаныя тэмы мы глядзелі на. Але гэта адным з самых магутных. І калі вы атрымаеце яго, гэта сапраўды ўсё проста хачу, каб, нарэшце, прыйсці разам. Так будзьце ўпэўненыя, гэта не трэба ўсяго ракавінай ў сённяшні дзень. Дык вось апошняя праграма мы будзем глядзець на. І мы збіраемся, каб скончыць з хуткія тры хвіліны claymation зрабіў наш сябар, Нік Parlante. Вось праграма, што на двух верхніх Лініі аб'яўляе зменную х і у. Абодва з якіх з'яўляюцца адрасы цэлых лікаў, AKA паказальнікі. Мы тады вылучыць дастаткова памяць для захоўвання Int і захоўваць адрас гэтай памяці ў х. Такім чынам, гэта яшчэ прасцей Напрыклад, чым раней. Дайце мне чатыры байта памяці, гэта памер з Int, і паставіць гэты адрас у х. Гэтая лінія азначае тут перайсці па адрасе у х і паставіць значэнне жыццё, лік 42 ёсць. Але гэтая лінія мяне турбуе. Зорка ў сродкі ідуць на адрас у у, і паставіць там нешчаслівае лік 13. Чаму гэта небяспечна, у гэтай кропцы у story-- хоць хутка сказаў у нашых слабее хвілін here-- чаму гэта дрэнна для мяне, каб сказаць, перайсці па адрасе ў г.? АЎДЫТОРЫЯ: Вы ня [неразборліва]. Дэвід Дж малая: Я не пакласці што-небудзь у у. Так што значэнне у, на дадзены момант у гэтай гісторыі? Мы не маем ні найменшага паняцця. Гэта некаторы значэнне смецця і таксама ня Бинки ведаю. Калі б мы маглі скончыць на гэтай ноце. [Прайграванне відэа] Эй, Бинки, прачнуцца. Гэта час для паказальніка задавальнення. -Што Гэта? Даведайцеся аб паказальнікаў? О, станоўчы герой. -Ну, Для пачатку, я думаю, мы спатрэбіцца пару паказальнікаў. -ДОБРА. Гэты код вылучае два паказальніка якія могуць паказваць на цэлых лікаў. -Добра, Добра, я бачу два паказальніка, але яны не здаецца, паказваючы на ​​што-небудзь. -Гэта Дакладна. Першапачаткова паказальнікі не паказвае ні на што. Рэчы, якія яны паказваюць на гэта называецца pointees і ўстаноўка іх асобны крок. Ох, дакладна, дакладна. Я ведаў, што. У pointees асобна. Такім чынам, як вы вылучыць pointee? -Добра, А гэты код вылучае новая лік pointee, і гэтая частка камплекта х, каб паказаць на яго. Эй, што выглядае лепш. Так што гэта нешта рабіць. -Добра, Я буду разнаймення паказальніка х да захаваць нумар 42 у яго pointee. Для гэтага трука, мне трэба маё Чароўная палачка разнаймення. -Ваш Чароўная палачка разнаймення? Э-э, што гэта выдатна. -Гэта Тое, што код выглядае. Я проста ўсталяваць колькасць и-- [POP SOUND] Эй, паглядзіце там ідзе. Так, робячы разнаймення на х наступным стрэлка, каб атрымаць доступ да яго pointee. У гэтым выпадку для захоўвання 42 там. Эй, паспрабуйце выкарыстоўваць яго, каб захаваць нумар 13 праз іншы паказальнік, у. -ДОБРА. Я проста пайду сюды, каб у, і атрымаць нумар 13 Налада. А потым узяць палачку разнаймення і просто-- [Гукавы сігнал] Ох, эй, што не працуе. Скажыце, ну, Бинки, я не думаю разнаймення у гэта добрая ідэя, таму што ўстаноўка уверх па pointee асобны крок. І я не думаю, што мы калі-небудзь рабілі гэта. -Hmm, Добры момант. -Так, Мы выдзелілі паказальнік, у, але мы ніколі не ставілі яго, каб паказаць на pointee. -Hmm, Вельмі назіральныя. Эй, вы шукаеце там добра, Бинки. Вы можаце гэта выправіць, так што ў пункту да таго ж, як pointee х. -Вядома, Я выкарыстоўваю свой чароўную палачку прысваення паказальніка. -Гэта Будзе Праблема, як і раней? Не, гэта не датычыцца pointees. Гэта проста мяняе адзін паказальнік каб паказаць на тое ж самае thing-- [Воплескамі] --as іншы. -О, Я бачу. Цяпер у паказвае на тое ж месца, што і х. Так, пачакайце, зараз у фіксавана. Ён мае pointee. Такім чынам, вы можаце паспрабаваць палачку разнаймення зноў адправіць 13 на працягу. Ох, добра, тут ідзе. Эй, паглядзі на гэта. Цяпер разнаймення работ па у. І таму, што паказальнікі дзеляцца што адной pointee, яны абодва ўбачыць 13. -Так, Абмен, э-э, што заўгодна. Так, мы збіраемся, каб памяняцца месцамі цяпер? -ай, Глядзіце, мы па-за часам. -But-- -Проста Памятаеце тры правілы паказальнік. Колькасць 1, базавая структура з'яўляецца тое, што ў вас ёсць паказальнік, і паказвае на больш pointee. Але паказальнік і pointee асобна. І агульная памылка з'яўляецца стварэнне паказальнік але забудзьцеся даць яму pointee. Нумар 2, паказальнік разнаймення пачынаецца з паказальнікам і варта яго стрэлку над каб атрымаць доступ да яго pointee. Як мы ўсе ведаем, гэта працуе толькі, калі ёсць з'яўляецца pointee, які выгляд атрымлівае назад правіць нумар 1. Нумар 3, паказальнік прысвойванне аднаго паказальніка і змяняе яго, каб паказаць на жа, як pointee іншы паказальнік. Такім чынам, пасля заданні, два паказальнікі будзе паказваць на той жа pointee, часам, што называецца сумеснае. І гэта ўсё, што ёсць у ім, на самай справе. Да пабачэння ў цяперашні час. [КАНЕЦ ПРАГЛЯДУ] Дэвід Дж малая: Вось гэта для CS50. Дзякуючы прафесару Нік Parlante. Мы будзем бачыць Вас на наступным тыдні. [Электронны прайгравання музыкі]