>> [Мусиц плаиинг]
Даг Ллоид: У реду.
Рад са једним варијабле је прилично забавно.
Али шта ако желимо да радимо са много варијабли,
али ми не желимо да имамо гомилу различита имена лети око нашег кода?
У овом случају, низови су ће доћи у заиста згодно.
Низови су заиста основни подаци структура за сваку програмског језика
да ћете користити.
И они су стварно, стварно корисна, посебно, као што ћемо видети, у ЦС 50.
>> Ми користимо низова држати вредности исте врсте података
у сусједних меморијских локација.
То јест, то је начин на који можемо група
гомила целих бројева заједно у меморија или гомила ликова
или плута у меморији стварно затворити заједно и рад
са њима без потребе да дати сваком један сопствени јединствено име, које могу
гет гломазна после неко време.
>> Сада, један од начина да успостави аналогију низова је да размислите о вашем локалном пост
Канцеларија за секунду.
Дакле, корак даље од програмирања и само затвори очи
и визуализацију у вашем уму ваша локална пошта.
Обично, у већини пост канцеларије, постоји велика банка
пошта кутије на зиду.
>> Низ је огроман блок од целовите меморије,
на исти начин да пошта банка у својој пошти
је велики простор на зид пошти.
Низови су подељена у мала, идентично величине блокова простора,
сваки од њих се назива елемент, ин на исти начин да је зид пост
Канцеларија је подељен на мале, идентично величине блокова простора,
коју зовемо ПО Бок.
Сваки елемент низа може складиштити одређену количину података,
баш као што свака поштанског претинца је у стању да одржи одређену количину поште.
>> Шта се може чувати у сваком елементу Низ је променљиве истог података
тип, као што је инт или цхар, само као у својој посте рестанте,
може да стане само ствари сличног типа,
као што су писма или малим паковањима.
На крају, можемо приступити сваки елемент Низ директно број индекса,
баш као што можете да приступите нашем пошту бок знајући његов број поштанско сандуче.
Надам се, да аналогија ће вам помоћи да спусти главу
око идеје низова од аналогизинг на нешто друго
да сте вероватно упознат.
>> У Ц, елементи низа су индексиран почевши од 0, не од 1.
И ово је стварно важно.
И у ствари, то је разлог зашто смо у ЦС 50, И зашто научници често компјутерски
ће се рачунати од 0, је због низа Ц је
индексирање, који увек почиње од 0.
Дакле, ако низ састоји од н елемената, први елемент тог низа
се налази на индекс 0, и последњи елемент низа
се налази на индекс н минус 1.
Опет, ако има н елемената у нашој арраи последњи индекс је н минус 1.
>> Дакле, ако наша низ има 50 елемената, Први елемент се налази на индекс 0,
а последњи елемент се налази на индекс 49.
Нажалост, или на срећу, у зависности од ваше перспективе,
Ц је веома блага овде.
То вас неће спречити иде изван граница свог поља.
Можете да приступите минус 3 елемент вашег низа
или 59. елемент вашег низа, ако ваш низ има само 50 елемената.
То неће зауставити свој програм из састављање, али у време извршавања,
можете наићи на страшни Сегментатион фаулт
ако почнете да приступи меморији да је изван граница онога што
питао си свог програма да ти дам.
Тако да будите опрезни.
>> Шта низ Декларација изгледати?
Како да кодира низ у постојање Као да кодира било која друга променљива?
Постоје три делови за низ децларатион-- тип, име,
и величине.
Ово је веома сличан променљива декларација, која
је само тип и име, величина елемент је
Посебан случај за низ, јер добијамо гомилу њих
истовремено.
>> Дакле, тип је какав променљивој Желим сваки елемент низа да буде.
Да желе да низ целих бројева?
Затим, ваш тип података треба да буде Инт.
Да ли желите да то буде низ дублу или сплавова?
Тип података би требало да буде дупло или флоат.
Име је шта Желим да позовем свој низ.
Шта желите да име овог великана банка целини или сплавова или карактера
или дубл, или шта год имате?
Шта желите да га зовем?
Прилично само себи.
>> На крају, величина, који иде унутар заградама,
је колико елементи које би као и твој низ садржи.
Колико целих бројева хоћеш?
Колико плута хоћеш?
>> Тако, на пример, инт студентске разреда 40.
Ово декларише низ називом Студентска оцене, које се састоји од 40 целих бројева.
Прилично разумљива, надам се.
Ево још једног примера.
Доубле цене Мени 8.
То ствара низ називом Мени цене, које се састоји
простора у меморији за осам парова.
>> Ако мислите да сваког елемента од низа типа података типа,
тако за пример, један елемент низ типа инт, исто тако вам
би пало на памет било који други променљива типа инт,
сви познати операције да смо ми разговарало раније у операција
Видео имати смисла.
Дакле, овде смо могли прогласити низ од логичке називају Трутхтабле,
који се састоји од просторије за 10 логичке.
>> А онда, баш као што смо могли да додели вредност на било који други променљиву типа
Булова, могли бисмо рећи нешто као Трутхтабле квадратном конзоле
2, што је како указују, који елемент стола истине?
Трећи елемент сто истина, јер запамти,
раиунамо од 0.
Дакле, то је како смо указују на Трећи елемент табеле истине.
Трутхтабле 2 једнако лажна, баш као што смо могли да децларе--
или смо могли доделити, напротив, било Булова променљива типа да је лажна.
>> Такође га можете користити у условима.
иф (трутхтабле 7 == истина), што значи,
ако осмог елемента од Трутхтабле је истина,
Можда желимо да одштампате поруку кориснику, принтф ("ИСТИНА! н") ;.
То нас доводи да кажем Трутхтабле 10 износи истина, зар не?
Па, ја могу, али прилично је опасно, јер запамти,
имамо низ од 10 логичке.
Дакле, највиши индекс да преводилац дао нам је 9.
>> Овај програм ће саставити, али ако нешто друго у меморији
постоји где бисмо Очекујем Трутхтабле 10 да оде,
можемо претрпети сегментације грешку. Ми Можда се извући са тим, али генерално,
прилично опасно.
Па шта ја радим овде је правно Ц али не нужно најбољи потез.
Сада, када прогласи и инитиализе низ истовремено,
заправо постоји прилично Посебан синтакса која вас
Можете користити да попуни низ са својим почетним вредностима.
То може добити гломазан да прогласити низ величине 100,
и онда морам да кажем, елеменат 0 једнако ово; Елемент 1 једнако ово;
Елемент 2 једнако томе.
У чему је поента, зар не?
>> Ако је мали низ, ви могао учинити нешто овако.
Боол трутхтабле 3 једнака отворен коврџава заграда и онда запета
раздвојити списак елемената који желите да поставите у низу.
Затим затворите коврџаву браце зарез.
То ствара низ Величина три зове Трутхтабле,
са елементима лажна, истина, и истина.
И у ствари, примерна синтакса имам овде
исто као што ћете урадити појединац елеменат синтакса испод.
Ова два начина кодирања воулд произвести потпуно исту низ.
>> Слично томе, можемо поновити над свим елементима
од низа коришћењем петље, која, у Чињеница је веома препоручује
ат-хоме вежба.
Како створити низ 100 целих, гдје
сваки елемент низа је његов индекс?
Тако, на пример, имамо низ 100 целие, иу првом елементу,
желимо да стави 0.
У другом елементу, желимо да пут 1.
У трећем елементу, желимо ставити 2; и тако даље и тако даље.
То је стварно добра ат-хоме вежба за то.
>> Ево, да не изгледа Као много тога променило.
Али приметити да у између квадратних заграда, овај пут,
Ја сам заправо изоставио број.
Ако користите ово веома Посебан примерна
синтакса да се створи Арраи, ви заправо не
треба да наведе величину од низа унапред.
Преводилац је довољно паметан да знате да вас у ствари
Желим низ величине 3, јер сте ставили три елемента
на десној страни знака једнакости.
Ако сте ставили четири, то би имало дали вам сто истина величине четири;
и тако даље и тако даље.
>> Низови нису ограничени на један димензија, што је прилично кул.
Можете заправо имати колико сиде спецификатори како желите.
Тако на пример, ако желите да креирате даска за игру Баттлесхип, која,
Ако сте икада играли, је игра која је играо са клиновима на 10 до 10 мрежу,
можете направити низ овако.
Могло би се рећи Боол Баттлесхип квадрат носач 10
затворена заграда квадрат квадратни носач 10 је затворио квадратних конзолу.
>> А онда, можете одабрати да ово тумаче на уму као 10
за 10 мрежу ћелија.
Сада, у ствари, у меморији, то стварно не само
остају елемент 100, један димензионални низ.
И ово, у ствари, важи и за вас ако има три димензије или четири или пет.
То је заиста једноставно не помножите цео индицес--
или све од величине специфиерс-- заједно,
а ти само добити једнодимензионални низ те величине.
>> Међутим, у погледу организације и визуелизација и људски перцепција,
то може бити много лакше за рад са мрежом
ако радите на игри као Тиц-Тац-Тое или Баттлесхип,
или нешто слично.
То је велики апстракција, уместо да
да размишљају о Тиц-Тац-Тое Одбор као линија од девет
квадрати или бојног брода одбор као линија од 100 квадрата.
А 10 од 10 решетку или три са три мрежа је вероватно
много лакше да виде.
>> Сада, нешто стварно битно о низовима.
Можемо третирати сваког појединца елемент низа као променљиве.
Видели смо да је раније кад смо доделе
вредност Прави одређеним логичке или их тестирање у уређаја.
Али не можемо третирати ће сва низови се као варијабле.
Не можемо, на пример, доделити један у низу на другу низа коришћењем задатак
оператер.
То није легално Ц
>> Ако желимо да, за шта екампле-- ћемо радити у том примеру
би било да копирате један у низу у другу.
Ако желимо да урадимо, ми заправо Потребно је да користите петљу да копирате преко
свака појединачна елемент један по један.
Знам да је мало дуготрајан.
>> Тако на пример, ако смо имали ове пар линија кода, зар ово ради?
Па, не, то не би, зар не?
Зато покушавамо да доделите храну бара.
То не иде на посао, зато што је низ,
а ми управо описао да то није законски Ц
>> Уместо тога, ако желимо да ископирате садржај хране
у бар, што је оно што Покушавамо да урадимо,
ћемо морати синтаксу овако.
Имамо за петљу која иде од Ј је једнако 0 до 5,
а ми инкрементирање Ј на сваком итерацију петље и доделити елементи такве.
То би резултирало у бару и као један, два, три, четири, пет,
али морамо то да урадимо ово веома споро елеменат по елеменат начин,
уместо за само копирате целу лепезу.
У другим програмима језици, модерније оне,
можете, у ствари, раде само тако једноставно једнако синтаксу.
Али, Ц, нажалост, ми смо није дозвољено да то урадите.
>> Сада, постоји једна друга ствар коју желим да поменем
абоут низова који може бити помало мало зезнуто први пут вам
рад са њима.
Разговарали смо о у видеу о променљивом обиму,
да већина варијабли у Ц, када позовете их функција, доносе вредности.
Да ли се сећате шта то значи да прође нешто од вредности?
То значи да правиш копију варијабла која је усвајања у.
Позивалац функција, функција који прима променљиву,
не добија саму променљиву.
Постаје своје локалне копију тога да радим.
>> Арраис, наравно, до не пратим ово правило.
Уместо тога, оно што ми називамо пролази као референца.
Позивалац ствари не прими низ.
То не примају своје своју локалну копију тога.
А ако мислите о да, то има смисла.
Ако низови су заиста велике, да потребно толико времена и труда
да направи копију низа 100 или 1.000 или 10.000 елементи,
да не вреди га за функционишу да добије копију тога,
урадите неки посао са њим, а затим само да се уради са копијом;
да не треба имати то висе виси.
>> Зато што су неки низови гломазан и незграпан,
ми их само пролазе кроз цитат.
Ми смо само веруј ту функцију да, не сломи ништа.
Тако да заиста не добије низ.
То не добије своју локалну копију.
>> Дакле, шта то значи, онда, када се позвани
манипулира елемената низа?
Шта се дешава?
За сада ћемо глосс преко зашто баш ово
догађа, зашто низова доносе референце
а све остало је прошло од вредности.
Али ја вам обећавам да ће вратити и дати вам одговор
на ово у каснијем видео.
>> Ево још једна вежба за вас пре него што смо завршили ствари на низовима.
Гомила кода овде, то је није нарочито добар стил,
Само ћу направити ту примедби.
Нема коментара овде, што је прилично лоша форма.
Али то је само зато што сам хтео да будем у стању да стане све на екрану.
>> На врху, можете видети да имам два фунцтион декларације за сет низу
и сет инт.
Комплет низ наизглед има низ четири целих његов улаз.
И скуп Инт очигледно потребно један цео број као свој улаз.
Али обојица немају излаз.
Излаз, повратак типу, свака је неважећи.
У главном, имамо пар линија кода.
Ми изјављујемо целобројну променљиву назива и доделити јој вредност 10.
Ми изјављујемо низ од четири целих бројева назива Б и доделите елементе 0, 1,
2, и 3, респективно.
Затим, имамо позив да подесите инт и позив да подесите низ.
Дефиниције сет низа и низа Инт су доле, на дну.
>> И тако, опет, ја вам поставим питање.
Шта бива одштампан Овде на крају Маин?
Ту је штампање у боји. Ја сам штампање два броја.
Ја штампање садржај и садржај Б квадратном носач 0.
Паусе видео овде и минут.
Да ли можете да схватите шта је ово Функција ће се штампати на крају?
Надам се, ако се сећате Разлика између усвајања од стране вредности
и доношења путем референце, ово проблем није био превише незгодно за тебе.
А одговор ти би нашли је ово.
Ако нисмо сигурни како би зашто је то тако, одвојите пар секунди,
вратимо, прегледајте што сам био расправља о доношењу низова
као референца, версус пролази друге променљиве вредности, по
и надам се, да ће бити мало више смисла.
>> Ја сам Доуг Лојд, а ово је ЦС50.