[Daqq tal-mużika] Doug LLOYD: Kull dritt. Ħidma ma wieħed varjabbli hija pjuttost divertenti. Imma x'jiġri jekk irridu naħdmu bil-lott ta 'varjabbli, iżda ma rridux li jkollhom mazz ta ' ismijiet differenti jtajru madwar kodiċi tagħna? F'dan il-każ, arrays huma ser jidħlu fil handy verament. Arrays huma data verament fundamentali struttura għal kwalunkwe lingwa ta 'programmar li int ser tuża. U dawn qed tassew, tassew utli, partikolarment, kif Ser naraw, fl CS 50. Aħna nużaw arrays li jżommu valuri tal-istess tip data f'postijiet memorja kontigwi. Jiġifieri, huwa mod li nistgħu grupp mazz ta 'numri interi flimkien memorja jew mazz ta 'karattri jew sufruni fil-memorja verament qrib flimkien u jaħdmu magħhom mingħajr ma jkollhom jagħtu kull wieħed isem uniku tagħha stess, li jistgħu jiksbu ineffiċjenti wara ftit ftit. Issa, mod wieħed biex analogize arrays huwa li wieħed jaħseb dwar post lokali tiegħek uffiċċju għat-tieni. Allura pass lil hinn minn programmazzjoni u biss qrib l-għajnejn tiegħek u Ħares fil moħħok uffiċċju tiegħek posta lokali. Normalment, fil-maġġoranza post uffiċċji, hemm bank kbir a kaxxi postali fuq il-ħajt. Firxa hija blokk ġgant ta 'memorja kontigwa, bl-istess mod li mail bank fil-kariga tiegħek post huwa spazju kbir fuq il- ħajt tal-uffiċċju tal-posta. Arrays ġew maqsuma fi żgħar, identiku blokki daqs ta 'spazju, kull wieħed minnhom huwa msejjaħ element, fil bl-istess mod li l-ħajt tal-post uffiċċju ġie maqsuma fi żgħar, identiku blokki daqs ta 'spazju, li nitolbu kaxxa PO. Kull element ta 'l-array jista jaħżnu ċertu ammont ta 'data, partikolarment għaliex kull kaxxa postali huwa kapaċi li jżommu ċertu ammont ta 'posta. Liema jistgħu jkunu maħżuna f'kull element tal il-firxa hija varjabbli tal-istess data tip, bħal int jew char, just bħal fil-kaxxa postali tiegħek, inti tista 'biss tajbin affarijiet ta 'tip simili, bħal ittri jew pakketti żgħar. Fl-aħħar nett, nistgħu aċċess għal kull element tad l-array direttament mill-index number, eżatt kif nistgħu aċċess uffiċċju tal-posta tagħna kaxxa billi jkun jaf in-numru mailbox tiegħu. Nisperaw, li analoġija jgħinek tikseb ras tiegħek madwar l-idea ta 'arrays mill analogizing għal xi ħaġa oħra li inti probabilment diġà familjari magħhom. Fil C, l-elementi ta 'firxa huma indiċjati jibdew minn 0, mhux mill-1. U dan huwa verament importanti. U fil-fatt, dan huwa għaliex aħna, f 'CS-50, u għaliex il-kompjuter xjentisti spiss se jgħoddu minn 0, huwa minħabba firxa C indiċjar, li dejjem jibda b'0. Mela jekk firxa tikkonsisti f'elementi n, l-ewwel element ta 'dik array tinsab fil-indiċi 0, u l-aħħar element tal-firxa tinsab fil-indiċi n minus 1. Għal darb'oħra, jekk hemm elementi n fil tagħna firxa, l-aħħar indiċi huwa n minus 1. Mela jekk array tagħna għandha 50 elementi, il- ewwel element jinsab fil-indiċi 0, u l-aħħar element tinsab fil-indiċi 49. Sfortunatament, jew fortunatament, jiddependi fuq il-perspettiva tiegħek, C huwa klementi ħafna hawn. Dan mhux se jipprevjeni milli għeluq ta 'limiti ta' firxa tiegħek. Inti tista 'aċċess għall-minus 3 element ta 'firxa tiegħek jew l-element 59 tat firxa tiegħek, jekk array tiegħek biss għandha 50 elementi. Dan mhux se tieqaf program tiegħek mill kumpilazzjoni, iżda fil-ħin run, inti tista 'tiltaqa' ma ' tort segmentazzjoni dreaded jekk tibda aċċess memorja jiġifieri jitilgħu lil hinn minn dak li inti tlabt program tiegħek li jtik. Allura jkun attent. Xi jfisser firxa dikjarazzjoni look like? Kif nistgħu kodiċi firxa fis-eżistenza bħal aħna kodiċi kwalunkwe varjabbli oħra? Hemm tliet partijiet għal firxa declaration-- tip, isem, u daqs. Dan huwa simili ħafna għal dikjarazzjoni varjabbli, li huwa biss tip u l-isem, l-element daqs huwa -każ speċjali għal firxa, għaliex aħna qed jkollna mazz minnhom fl-istess ħin. Allura l-tip hija dwar liema tip ta 'varjabbli inti tixtieq kull element tal-array li jkun. Do tixtieq li firxa ta 'numri interi? Imbagħad, it-tip tad-data tiegħek għandha tkun int. Do inti tixtieq li tkun firxa ta 'jirdoppja jew sufruni? Tip ta 'data għandhom ikunu doppji jew float. L-isem huwa dak li inti tixtieq li hija sejħa firxa tiegħek. What do inti tixtieq li insemmu dan il-ġgant bank ta 'numri interi jew kannizzati jew Chars jew jirdoppja, jew kwalunkwe ikollhom inti? What do inti tixtieq li hija sejħa? Pjuttost awto spjegazzjoni. Fl-aħħar nett, id-daqs, li tmur ġewwa tal-parentesi kwadri, huwa kif Elementi ħafna inti bħal firxa tiegħek li jkollhom. Kemm interi tridu? Kemm sufruni tridu? Hekk per eżempju, int gradi student 40. Dan jiddikjara firxa imsejħa Student gradi, li jikkonsisti ta '40 numri interi. Pjuttost awto spjegazzjoni, I hope. Hawn eżempju ieħor. Prezzijiet menu Double 8. Dan joħloq firxa imsejħa Prezzijiet menu, li jikkonsisti spazju fil-memorja għal tmien jirdoppja. Jekk taħseb ta 'kull element ta 'firxa ta' tip tip ta 'data, hekk per eżempju, element wieħed ta ' firxa ta 'int tip, bl-istess mod inti ser jaħseb ta 'kwalunkwe varjabbli ta 'int tip, l-operazzjonijiet familjari li aħna diskuss qabel fl-operazzjonijiet video se jagħmel sens. Allura hawnhekk, nistgħu jiddikjaraw firxa tal Booleans imsejħa Truthtable, li jikkonsisti kamra għal 10 Booleans. U mbagħad, bħad nistgħu biss tassenja valur għal kull varjabbli ieħor ta 'tip Boolean, nistgħu ngħidu xi ħaġa bħal Truthtable bracket kwadru 2, li hija kif aħna jindikaw, li element tat-tabella verità? It-tielet element tal- tabella verità, għax ftakar, aħna qed isserraħ minn 0. Allura li kif aħna jindikaw l tielet element tat-tabella verità. Truthtable 2 ugwali falza, bħad nistgħu declare-- jew nistgħu tassenja, pjuttost, xi Varjabbli tip Boolean li hi falza. Nistgħu wkoll tagħmel użu minnha fil-kondizzjonijiet. jekk (truthtable 7 == veru), li fi kliem ieħor, jekk it-tmien element tal Truthtable huwa veru, forsi irridu li jistampa messaġġ lill-utent, printf ("VERU! n") ;. Li tikkawża magħna biex ngħid Truthtable 10 ugwali vera, right? Well, I tista ', iżda huwa pjuttost perikolużi, minħabba ftakar, għandna firxa ta '10 Booleans. Allura l-ogħla indiċi li l- kompilatur tatna huwa ta '9. Dan il-programm se jiġbor, iżda jekk xi ħaġa oħra fil-memorja teżisti fejn nixtiequ jistennew Truthtable 10 li tmur, nistgħu jsofru tort segmentazzjoni. Aħna tista 'jitbiegħed magħha, iżda b'mod ġenerali, pretty perikolużi. Allura dak li qed nagħmel hawnhekk huwa C legali, iżda mhux neċessarjament l-aħjar pass. Issa, meta inti tiddikjara u initialize firxa simultanjament, hemm attwalment pretty sintassi speċjali li inti jistgħu jużaw biex jimlew il-firxa mal-valuri tal-bidu tiegħu. Hija tista 'tikseb diffiċli biex jiddikjara firxa ta 'daqs 100, u mbagħad ngħid, element 0 ugwali dan; element 1 huwa ugwali għal dan; element 2 huwa egwali għal dak. X'hemm il-punt, id-dritt? Jekk huwa firxa żgħira, inti tista 'tagħmel xi ħaġa bħal din. Truthtable BOOL 3 ugwali miftuħa Brace kaboċċi u mbagħad comma separati l-lista ta 'elementi li inti tixtieq li jitqiegħdu fil-firxa. Mbagħad mill-qrib virgola Brace kaboċċi. Dan joħloq firxa ta ' daqs tliet imsejħa Truthtable, ma 'elementi falza, vera, u vera. U fil-fatt, il-istanzazzjoni sintassi Għandi hawnhekk huwa eżattament l-istess bħal tagħmel l- sintassi element individwali taħt. Dawn iż-żewġ modi ta 'kodifikazzjoni kien jinkoraġġixxi jipproduċu l-istess firxa eżatt. Bl-istess mod, nistgħu jtenni fuq l-elementi kollha ta 'firxa tuża loop, li, fil- fatt, huwa rrakkomandat ħafna ħafna fuq il-home eżerċizzju. Kif taħseb li toħloq firxa ta '100 interi, fejn kull element tal-firxa huwa indiċi tagħha? Hekk per eżempju, għandna firxa ta '100 interi, u fl-ewwel element, irridu li tqiegħed 0. Fit-tieni element, irridu li tqiegħed 1. Fit-tielet element, irridu li jpoġġu 2; u hekk u hekk. Li verament tajba fuq il-home eżerċizzju biex tagħmel dan. Hawnhekk, ma tfittex bħal wisq inbidlet. Iżda avviż li fl bejn il- parentesi kwadri, din id-darba, Stajt attwalment titħalla barra n-numru. Jekk inti qed tuża dan ħafna istanzazzjoni speċjali sintassi biex toħloq firxa, inti fil-fatt ma jeħtieġ li jindikaw id-daqs mill-firxa minn qabel. Il kompilatur huwa intelliġenti biżżejjed li tkun taf li inti fil-fatt jridu firxa ta 'daqs 3, għaliex inti tpoġġi tliet elementi għad-dritt għas-sinjal ugwali. Jekk kellek tpoġġi erba, huwa jkollu tak tabella verità ta 'daqs erbgħa u hekk u hekk. Arrays mhumiex ristretti għal wieħed dimensjoni, li huwa pjuttost jibred. Inti tista 'attwalment jkollhom daqs specifiers sekondarji kif tixtieq. Hekk per eżempju, jekk inti tixtieq li toħloq bord għal-logħba Battleship, li, jekk inti qatt lagħbu, hija logħba li huwa lagħbu inxir fuq il-10 sa l-10 grid, inti tista 'toħloq firxa bħal din. Tista 'tgħid BOOL battleship kwadru bracket 10 kwadru magħluqa bracket kwadru bracket 10 magħluqa parentesi kwadri. U allura, inti tista 'tagħżel li jinterpretaw dan f'moħħu tiegħek bħala 10 b'10 grid ta 'ċelluli. Issa, fil-fatt, fil-memorja, huwa verament ma biss jibqgħu element 100, firxa dimensjonali wieħed. U dan, fil-fatt, tmur għall jekk inti jkollha tliet dimensjonijiet jew erba 'jew ħames. Huwa verament ftit ma jimmultiplikaw kollha tal-indices-- jew kollha tad-daqs specifiers-- flimkien, u inti biss tikseb wieħed dimensjonali firxa ta 'dak id-daqs. Iżda f'termini ta 'organizzazzjoni u viżwalizzazzjoni u l-perċezzjoni tal-bniedem, jista 'jkun ħafna aktar faċli li jaħdmu ma 'grid jekk inti qed jaħdmu fuq logħba bħal Tic tac toe jew Battleship, jew xi ħaġa bħal dik. Huwa estrazzjoni kbir, minflok li li wieħed jaħseb dwar Tic-TAC toe board bħala linja ta 'disa kwadri jew bord Battleship bħala linja ta '100 kwadri. A 10 permezz 10 grid jew tlieta bi tlieta grid huwa probabbilment ħafna aktar faċli li jipperċepixxi. Issa, xi ħaġa verament importanti dwar arrays. Nistgħu jittrattaw kull individwu element tad-array bħala varjabbli. Rajna li qabel meta konna jassenjaw il-valur Veru li ċerti Booleans jew ittestjar tagħhom fil conditionals. Iżda aħna ma jista 'jikkura kollu Arrays infushom bħala varjabbli. Ma nistgħux, per eżempju, tassenja matriċi semikonduttur wieħed li array ieħor bl-assenjazzjoni operatur. Mhuwiex C. legali Jekk irridu li, għal dak li example-- nkunu qed nagħmlu f'dak eżempju Ikun li kopja matriċi semikonduttur wieħed għal ieħor. Jekk irridu nagħmlu dan, aħna fil-fatt bżonn tuża loop li kopja fuq kull element individwali wieħed kull darba. Naf huwa ftit jikkunsmaw żmien. Għalhekk, per eżempju, jekk kellna dawn koppja ta 'linji ta' kodiċi, kieku dan ix-xogħol? Well, no, dan ma jkunux jistgħu, right? Għaliex aħna qed tipprova li tassenja ikel li bar. Li mhux sejjer jaħdem, għaliex dan huwa firxa, u aħna biss deskritti li dan mhux C. legali Minflok, jekk irridu li kopja tal-kontenut ta 'ikel fis bar, li huwa dak aħna qed tipprova tagħmel hawn, ikollna sintassi bħal dan. Għandna għal loop li tmur minn J hija ugwali għal 0 sa 5, u aħna inkrement J fuq kull iterazzjoni ta il-linja u l-elementi tassenja bħal dik. Dan kieku jirriżulta fi bar wkoll ħaġa waħda, tnejn, tlieta, erba ', ħames, iżda għandna nagħmlu dan il-ħafna bil-mod element--element permezz, minflok bi ftit ikkupjar il matriċi kollu. Fil-programmazzjoni oħra lingwi, dawk l-aktar moderni, inti tista ', fil-fatt, tagħmel biss li sempliċi ugwali sintassi. Iżda C, sfortunatament, aħna qed mhux permess li jagħmlu dan. Issa, hemm waħda oħra ħaġa nixtieq insemmi dwar arrays li jista 'jkun ftit daqsxejn diffiċli l-ewwel darba li inti jaħdmu magħhom. Iddiskutejna fil-video dwar ambitu varjabbli, li ħafna fatturi varjabbli fis-C, meta inti sejħa minnhom fil-funzjonijiet, huma mgħoddija minn valur. Do you remember dak li jfisser li jgħaddu xi ħaġa mill-valur? Dan ifisser li aħna qed jagħmlu kopja tad- varjabbli li l-jiġu mgħoddija fil. Il-funzjoni callee, il-funzjoni li l-li tirċievi l-varjabbli, ma jiksbu l-varjabbli innifsu. Jiġrilha lokali tagħha stess Kopja ta 'din taħdem magħhom. Arrays, naturalment, do ma jsegwux din ir-regola. Pjuttost, dak li nsejħu dan hija tgħaddi b'referenza. Il callee attwalment ma jirċievu l-firxa. Hija ma jirċevix tagħha Kopja lokali stess ta 'dan. U jekk taħseb dwar dan, dan jagħmel sens. Jekk arrays huma verament kbar, huwa jieħu tant ħin u sforz li tagħmel kopja ta 'firxa ta' 100 jew 1,000 jew 10,000 elementi, li huwa mhux worth it għal funzjoni li jirċievu kopja tiegħu, jagħmlu xi xogħol magħha, u mbagħad biss 'jsir bl-kopja; ma għandux bżonn li jkollhom huwa mdendlin madwar aktar. Minħabba arrays huma wħud goffi u ineffiċjenti, aħna biss jgħaddihom b'referenza. Aħna biss fiduċja li l-funzjoni li, ma jqassmux xejn. Għalhekk ma attwalment tikseb l-array. Hija ma jiksbu kopja lokali tagħha stess ta 'dan. Allura dak li jfisser dan, imbagħad, meta l-callee jimmanipula elementi tal-firxa? X'jigri? Għal issa, aħna ser tleqqija fuq għaliex eżattament din jiġri, għaliex arrays huma mgħoddija permezz ta 'referenza u kull ħaġa oħra huwa mgħoddi mill-valur. Imma I wegħda inti, aħna se ritorn u jagħtik l-risposta għal dan fil-video aktar tard. Hawn wieħed eżerċizzju aktar għalik qabel we nagħlaq affarijiet fuq arrays. L-għanqud tal-kodiċi hawn, li mhux partikolarment stil tajjeb, biss jien ser jagħmlu dan twiddiba. M'hemm l-ebda kummenti fil hawn, li hija forma pretty bad. Iżda huwa biss għaliex jien ridt li tkun kapaċi li jitwaħħal kollox fuq l-iskrin. Fil-quċċata, tista 'tara li għandi żewġ dikjarazzjonijiet funzjoni għall array sett u sett int. Set firxa apparentement jieħu firxa ta 'erba' numri interi bħala input tagħha. U int sett apparentement tieħu numru sħiħ wieħed bħala input tagħha. Iżda tnejn minnhom ma jkollu output. Il-produzzjoni, ir-ritorn tip, ta 'kull wieħed huwa null. Fl Main, għandna Koppja ta 'linji ta' kodiċi. Aħna niddikjaraw varjabbli numru sħiħ imsejħa A u tassenja din l-valur 10. Aħna niddikjaraw firxa ta 'erba' numri interi imsejħa B u tassenja l-elementi 0, 1, 2, u 3, rispettivament. Imbagħad, aħna għandna sejħa biex jistabbilixxu int u sejħa biex jistabbilixxu firxa. Id-definizzjonijiet ta 'firxa sett u sett int huma stabbiliti hawn taħt, fil-qiegħ. U għalhekk, għal darb'oħra, Nitlobkom l-kwistjoni. Liema gets stampata hawn fl-aħħar tal Main? Hemm col printout. Jien stampar ta 'żewġ numri interi. Jien istampar l-kontenut ta 'A u il-kontenut tal B kwadru bracket 0. Pause il-video hawn u tieħu minuta. Inti tista 'ċifra barra dak li dan funzjoni se print fl-aħħar? Nisperaw, jekk inti mfakkra l- distinzjoni bejn tgħaddi mill-valur u li jgħaddi permezz ta 'referenza, dan problema ma kienx wisq diffiċli għalik. U t-tweġiba inti sabu hija din. Jekk int verament mhux ċert dwar għaliex dan huwa l-każ, tieħu t-tieni, jmorru lura, jirrevedu dak I kien biss tiddiskuti dwar tgħaddi arrays b'referenza, versus tgħaddi varjabbli oħra skont il-valur, u wieħed jittama, hija ser tagħmel ftit aktar sens. Jien Doug Lloyd, u dan huwa CS50.