[Powered by Google Translate] Parunāsim par masīvu. Tātad, kāpēc mēs kādreiz vēlaties izmantot bloki? Nu pieņemsim, ka jums ir programma, kas nepieciešams, lai saglabātu 5 studentu ID. Tas varētu likties saprātīgi, ir 5 atsevišķas mainīgie. Par iemeslu mēs redzam mazliet, mēs sāksim skaitot no 0. Mainīgie lielumi Mums būs būs int id0, int ID1, un tā tālāk. Any loģika mēs vēlamies, lai veiktu uz studentu ID būs nepieciešams kopēt un ielīmēt par katru no šīm studentu ID. Ja mēs gribam, lai pārbaudītu, kas studentiem gadās būt CS50, mēs vispirms ir nepieciešams, lai pārbaudītu, ja id0 pārstāv students kursa. Tad darīt to pašu par nākamo studentu, mums būs nepieciešams, lai kopētu un ielīmētu kodu id0 un aizstāt visus gadījumus id0 ar ieliktņiem ID1 un tā par ID2, 3, 4 un. Tiklīdz jūs dzirdat, ka mums ir nepieciešams, lai kopētu un ielīmētu, Jums vajadzētu sākt domāt, ka tur ir labāks risinājums. Ko darīt, ja tu saproti, jums nav nepieciešams 5 studentu identifikācijas kartes, bet gan 7? Jums ir nepieciešams, lai dotos atpakaļ uz jūsu avota kodu un pievienot kādā id5, ar id6, un kopēt un ielīmēt loģiku pārbaudītu, ja ID pieder klasei par šiem 2 jaunu ID. Nekas savieno visus šos ID kopā, un tāpēc nav, lūdzot veidā Programma to darīt par 0 ID līdz 6. Nu tagad tu saproti, jums ir 100 studentu ID. Tas sāk likties mazāk nekā ideāls uz nepieciešamību atsevišķi deklarēt katru no šiem ID, un kopēt un ielīmēt jebkuru loģiku šiem jaunajiem ID. Bet varbūt mēs esam apņēmušies, un mēs to visu 100 studentiem. Bet ko tad, ja jūs nezināt, cik daudz studentu tur patiesībā ir? Ir tikai daži n skolēni un jūsu programma ir pieprasīt no lietotāja, kas tas N. Uh Oh. Tas nav dodas uz darbu ļoti labi. Jūsu programma darbojas tikai kādu pastāvīgu studentu skaita. Atrisinātu visas šīs problēmas ir skaistums masīvi. Tātad, kādi ir masīvs? Dažās programmēšanas valodas masīvs veids varētu izdarīt mazliet vairāk, bet šeit mēs koncentrēties uz pamata masīva datu struktūru tāpat kā jūs redzēt to C. Masīvs ir tikai liels bloks atmiņas. Viss. Kad mēs sakām, ka mums ir masīva 10 integers, ka tikai nozīmē, ka mums ir dažas bloks atmiņas, kas ir pietiekami liela, lai noturētu 10 atsevišķas integers. Pieņemot, ka skaitlis ir 4 baiti, tas nozīmē, ka masīva 10 integers ir nepārtraukts bloks 40 baitu atmiņā. Pat tad, kad jūs izmantojat daudzdimensiju masīvus, kas mums nebūs iet, lai šeit, tas joprojām tikai liels bloks atmiņas. Daudzdimensiju notācija ir tikai ērtības. Ja jums ir 3 ar 3 daudzdimensiju masīva integers, tad jūsu programma būs tiešām tikai ārstēt to kā liels bloks 36 baiti. Kopējais skaits integers ir 3 reizes 3, un katrs skaitlis aizņem 4 baitus. Pieņemsim to apskatīt pamata piemērs. Mēs varam redzēt šeit 2 dažādos veidos deklarēt masīvu. Mums nāksies komentēt 1 no tiem, kas par programmu, lai apkopotu jo mēs atzīt x divreiz. Mēs to apskatīt dažus no šiem 2 veidu deklarāciju atšķirību mazliet. Abas no šīm līnijām deklarēt masīvu izmērs N, kur mēs esam # define N kā 10. Mēs varētu tikpat viegli ir lūgusi lietotājam uz pozitīvu skaitlim un izmanto šo skaitlim vairākiem elementiem mūsu masīvs. Patīk mūsu studentu ID piemēru, pirms tas ir veids kā deklarējot 10 pilnīgi atsevišķa iedomāts mainīgie x0, x1, x2, un tā tālāk līdz XN-1. Ignorējot līnijas, kur mēs atzīt masīvs, ievēroju kvadrātiekavas neskarts iekšā uz cilpas. Kad mēs rakstīt kaut ko līdzīgu x [3], ko es ņemšu tikai lasīt kā x grupā 3, Jūs varat domāt par to kā lūdzot iedomātu X3. Pamanīt, nekā ar masīvu izmēra N, tas nozīmē, ka skaits iekšpusē iekavās, ko mēs saucam indeksu, var būt jebkas no 0 līdz N-1, kas ir pavisam N indeksu. Domāt par to, kā tas reāli darbojas atcerieties, ka masīvs ir liels bloks atmiņas. Pieņemot, ka skaitlis ir 4 baiti, viss masīvs x ir 40 baitu bloka atmiņas. Tāpēc x0 attiecas uz pirmajiem 4 baiti bloka. X [1] attiecas uz nākamo 4 baiti un tā tālāk. Tas nozīmē, ka x starts visu programmu jebkad ir nepieciešams, lai sekotu. Ja jūs vēlaties izmantot x [400], tad programma zina, ka tas ir līdzvērtīgs lai tikai 1600 bytes pēc sākuma x. Where'd mēs 1600 bytes no? Tas ir tikai 400 reizes 4 baiti skaitlim. Pirms pāriešanas uz, tas ir ļoti svarīgi saprast, ka C nepastāv indeksa ka mēs izmantojam masīvā izpildi. Mūsu liels bloks ir tikai 10 veseli garš, bet nekas kliegt uz mums, ja mēs rakstītu x [20] vai pat x [-5]. Indeksa nav pat jābūt numuru. Tas var būt patvaļīgi izteiksme. Programmā mēs izmantojam mainīgo i no cilpa uz indeksu stājies masīvā. Tas ir ļoti bieži modelis, looping no i = 0 līdz garumu masīvs, un tad, izmantojot man kā indeksu masīvā. Tādā veidā jūs faktiski cilpa visam blokam, un jūs varat piešķirt katram vietas masīvā vai izmantot to kādu aprēķinu. Pirmajā cilpa, es sākas ar 0, un tā tas būs piešķirt līdz 0 vietas masīvā, vērtība 0 reizes 2. Tad es soli, un mēs piešķirt pirmo vietu masīvā vērtība 1 reizes 2. Tad es soli atkal un tā tālāk, līdz mēs piešķiram pozicionēt N-1 masīvā vērtība N-1 reizes 2. Tāpēc mēs esam izveidojuši masīvu ar pirmajām 10 pāra numuri. Varbūt izlīdzina būtu bijis mazliet labāk nosaukumu mainīgo nekā x, bet kas būtu dota lietām prom. Lai cilpa 2. tad vienkārši izdrukā vērtības, kas mums jau ir saglabāti iekšpusē masīvs. Pamēģināsim darbojas programma ar abiem masīvu deklarācijām veidiem un to apskatīt pie izejas no programmas. Ciktāl mēs varam redzēt, ka programma uzvedas tāpat abiem deklarāciju veidiem. Pieņemsim arī to apskatīt, kas notiek, ja mēs mainītu pirmo cilpa nav apstāties pie N bet drīzāk teiktu 10000. Ceļš pēc projekta beigām masīva. Hmm. Varbūt jūs esat redzējis šo pirms. Segmentēšana vaina nozīmē, ka jūsu programma ir avarējusi. Jūs sākat redzēt šos kad jūs pieskarties jomas atmiņas jums nevajadzētu būt aizkustinoši. Šeit mēs aizkustinošs 10.000 vietas aiz sākuma x, kas acīmredzot ir vieta atmiņā mums nevajadzētu pieskarties. Tātad lielākā daļa no mums, iespējams, nebūtu nejauši likts 10.000 vietā N, Bet ja mēs kaut ko vairāk izsmalcināts izskats teikt rakstīt mazāks vai vienāds ar N kas par cilpa stāvoklī, salīdzinot ar mazāk nekā N. Atcerieties, ka masīvs ir tikai indeksi no 0 līdz n-1, kas nozīmē, ka indekss N ir aiz beigām masīva. Programma varētu crash šajā gadījumā, bet tas joprojām kļūda. Faktiski, šī kļūda ir tik izplatīta, ka tā ir tā paša nosaukuma, off 1 kļūda. Tas ir tas par pamatiem. Tātad, kādi ir galvenās atšķirības starp 2 veidu masīvu deklarācijām? Viena atšķirība ir, ja liels bloks atmiņas iet. Pirmajā deklarācijā, ko es ņemšu zvanīt kronšteins matricas tipa, lai gan tas nekādā ziņā nav tradicionālo nosaukumu, tas iet uz skursteņa. Tā kā otrais, ko es saukšu rādītāju matricas tipu, tas iet uz kaudzes. Tas nozīmē, ka tad, kad funkcija atgriež, kronšteins masīvs tiks automātiski deallocated, tā kā jums ir explicitily zvanīt bez maksas uz bultiņas masīva vai arī jums ir atmiņas noplūde. Turklāt kronšteinu masīvs faktiski nav mainīgs. Tas ir svarīgi. Tas ir tikai simbols. Jūs varat domāt par to kā nemainīgu, ka kompilators izvēlas jums. Tas nozīmē, ka mēs nevaram darīt kaut kas līdzīgs x + + ar stiprinājuma veidam, lai gan tas ir ļoti lietderīga rādītāja tipam. Rādītājs veids ir mainīgs. Par rādītāju veidu, mums ir 2 atsevišķas bloki atmiņas. Mainīgais x pati tiek saglabāta kaudze un ir tikai viens rādītājs, bet liels bloks atmiņas glabājas kaudze. Mainīgo x uz skursteņa tikai veikalos adresi no lielā bloka atmiņas par kaudzes. Tas nozīmē arī to, ir ar izmēru operatora. Ja jūs lūgt lielumu balsteņa masīvs, tas dos jums lielumu lielā bloka atmiņu, kaut kā 40 baiti, bet, ja jūs lūgt izmēra rādītāja veida masīva, tas dos jums lielumu mainīgā x pats, kas uz ierīces, iespējams tikai 4 baiti. Izmantojot rādītājs matricas tipa, tas ir neiespējami tieši lūgt lielumu lielā bloka atmiņu. Tas parasti nav daudz ierobežojumu, jo mēs ļoti reti vēlas lielumu no liels bloks atmiņas, un mēs parasti var aprēķināt, ja mums tas ir vajadzīgs. Visbeidzot, iekava masīvs notiek nodrošināt mūs ar īsceļu inicializēšana masīvs. Let 's redzēt, kā mēs varētu uzrakstīt pirmo 10 pat integers izmantojot īsceļu initilization. Ar rādītāju masīvs, nav veids, kā to izdarīt īsceļu kā šis. Tas ir tikai ievads, ko jūs varat darīt ar masīviem. Tie parādās gandrīz katru programmu jūs rakstīt. Cerams, ka jūs tagad var redzēt labāku veidu, kā to studentu IDS piemēru no sākuma video. Mans vārds ir Rob Bowden, un tas ir CS50.