[Powered by Google Translate] [Sadaļa 6] [ērtāk] [Robs Bowden] [Hārvarda] [Tas ir CS50.] [CS50.TV] Mēs varam doties uz mūsu sadaļu jautājumiem. Es nosūtīja URL telpā pirms. Par sadaļā jautājumu sākums saka- acīmredzot es neesmu pilnīgi unsick-ir ļoti viegli jautājums tikai to, ko ir Valgrind? Kāda Valgrind darīt? Kāds vēlas pateikt, ko Valgrind dara? [Studentu] Pārbaudes atmiņas noplūde. Jā, Valgrind ir vispārējs atmiņas pārbaudītājs. Tas, galu galā, stāsta jums, ja jums ir kādi atmiņas noplūde, kas ir galvenokārt, ko mēs, izmantojot to, jo, ja jūs vēlaties, lai darīt arī problemātisko komplektā vai, ja jūs vēlaties, lai nokļūt uz lielā kuģa, jums ir nepieciešams, lai nav atmiņas noplūdes nekāda, un gadījumā, ja jums ir atmiņas noplūde, ka jūs nevarat atrast, arī paturēt prātā, ka, ja jūs atvērt failu un, ja jums nav to aizvērtu, ka ir atmiņas noplūde. Daudzi cilvēki meklē kādu mezglu, ka viņi nav atbrīvojot ja tiešām, viņi ne tuvu vārdnīcu pašā pirmajā solī. Tā arī stāsta jums, ja jums ir kāds nederīgs lasa vai raksta, kas nozīmē, ja jūs mēģināt un noteikt vērtību kas ir ārpus beigām kaudze, un tas nenotiek uz SEG vaina bet Valgrind nozvejas to, kā jums nav faktiski rakstot tur, un tāpēc jums noteikti nevajadzētu būt kāds no tiem, vai nu. Kā jūs izmantojat Valgrind? Kā jūs izmantojat Valgrind? Tas vispārīgs jautājums veida palaist to un apskatīt pie izejas. Produkcija ir milzīgs daudz reižu. Pastāv arī jautras kļūdas kur, ja Jums ir dažas briesmīgi nepareizi lieta notiek pa apli, tad tas būs iespējams pateikt, "pārāk daudz kļūdas. Es esmu gatavojas pārtraukt skaitīšanu tagad. " Tā būtībā tekstuālā produkcija, kas jums ir, lai parsēt. Beigu beigās, tas pateiks jums nekādas atmiņas noplūdes, kas jums ir, cik blokus, kas var būt noderīgi, jo ja tas ir viens bloks unfreed, tad tas parasti ir vieglāk atrast kā 1000 bloki unfreed. 1000 bloki unfreed iespējams, nozīmē, jūs ne atbrīvojot Jūsu saistītas saraksti pareizos vai kaut. Tas ir Valgrind. Tagad mums ir mūsu sadaļā jautājumiem, kas jums nav nepieciešams, lai lejupielādētu. Jūs varat noklikšķināt uz manu vārdu un velciet tos telpā. Tagad noklikšķiniet uz mani. Pārskatīšana 1 būs kaudze, ko mēs darām pirmās. Pārskatīšana 2 būs rinda, un pārskatīšana 3 būs atsevišķi saistīts saraksts. Sākot off ar mūsu kaudze. Kā tas saka šeit, kaudze ir viens no visvairāk pamata, fundamentālas datu struktūras datorzinātnēs. Ļoti prototipu piemērs ir kaudzīti paplātes ēdamzālē. Tā būtībā kad jums tiek iepazīstināti ar steku, kāds gatavojas teikt: "Ak, kā kaudze paplātes." Jūs kaudze paplātes augšu. Tad, kad jūs iet, lai vilktu ar paplāti, pirmais paplātes, kas ir kļūst velk ir pēdējais, kas tika likts uz skursteņa. Viņiem arī līdzīgi tas kaudze saka šeit- mums ir atmiņas segmentu sauc kaudze. Un kāpēc to sauc par kaudze? Jo, piemēram, kaudze datu struktūra, tā nospiež un pops kaudze rāmji uz skursteņa, ja kaudze rāmji ir kā īpaša aicinājuma funkciju. Un kā kaudze, jums vienmēr ir atgriezties no funkciju zvanu, pirms jūs varat saņemt uz leju apakšējo kaudze rāmji vēlreiz. Jūs nevarat būt galvenais zvanu foo zvanu bārs un bārs atgrieztos galvenais tieši. Tas vienmēr got sekot pareizo kaudze grūšanas un popping. Abas operācijas, kā jau teicu, ir push un pop. Tie ir universāli termini. Jums vajadzētu zināt push un pop ziņā skursteņi vienalga ko. Redzēsim rindas ir sava veida atšķiras. Tas nav īsti ir universāls jēdziens, bet push un pop ir universālas par skursteņi. Push ir tikai likts uz skursteņa. Pop ir pacelšanās kaudzīti. Un mēs redzam šeit mums ir mūsu typedef struktūrai steku, tāpēc mums ir char ** stīgas. Vai nav bail ar jebkādiem **. Tas ir gatavojas galu galā ir masīvs stīgas vai masīvs norādes uz zīmēm, kur norādes uz zīmēm mēdz būt stīgas. Tai nav jābūt stīgas, bet šeit, viņi būs stīgas. Mums ir masīva stīgas. Mums ir lielums, kas parāda, cik daudz elementi pašlaik skursteņa, un tad mums ir iespējas, kas ir, cik daudz elementi var būt uz skursteņa. Par jaudu vajadzētu sākt, jo kaut kā lielāka nekā 1, bet izmērs ir gatavojas sākt kā 0. Tagad pastāv galvenokārt trīs dažādi veidi, kā jūs varat iedomāties kaudze. Nu, tur ir iespējams vairāk, bet divi galvenie veidi ir Jūs varat īstenot, izmantojot masīvu, vai jūs varat īstenot, izmantojot saistīts saraksts. Saistīti saraksti ir sava veida niecīgs, lai padarītu skursteņi no. Tas ir ļoti viegli izdarīt kaudze izmantojot saistītos sarakstus, tāpēc šeit mēs esam gatavojas darīt kaudze izmantojot bloki, un tad, izmantojot masīvu, tur ir arī divi veidi, jūs varat domāt par to. Pirms tam, kad es teicu, mums ir spēja kaudze, lai mēs varētu fit elementu uz skursteņa. Viens veids, kā tas varētu notikt, ir, tiklīdz jūs hit 10 elementi, tad jūs darīts. Jūs varētu zināt, ka ir augšējā robeža 10 lietas pasaulē ka jums nekad ir vairāk nekā 10 lietas par savu steku, un tādā gadījumā jūs varat būt augšējā robeža uz izmēru jūsu kaudze. Vai jūs varētu būt jūsu kaudze būtu neierobežots, bet, ja jūs darāt masīvs, tas nozīmē, ka katru reizi, kad jūs hit 10 elementi, tad jūs nāksies augt līdz 20 elementiem, un, kad jūs hit 20 elementus, Jums nāksies uzlabot savu masīvs 30 elementiem vai 40 elementiem. Jūs esat dodas uz nepieciešamību palielināt jaudu, kas ir tas, ko mēs gatavojamies darīt šeit. Katru reizi, kad mēs sasniegtu maksimālo lielumu mūsu kaudze, kad mēs push kaut kas cits, mēs spēsim nepieciešams palielināt jaudu. Lūk, mēs esam push deklarēti kā bool push (char * str). Char * str ir virkne, kas mums ir stumšanas uz steku, un bool vienkārši saka, vai mums izdevās vai neizdevās. Kā mēs varam neizdoties? Kāda ir vienīgais apstāklis, ka jūs varat iedomāties ja mums būtu nepieciešams atgriezties viltus? Yeah. [Studentu] Ja tas ir pilns, un mēs esam izmantojot norobežo īstenošanu. Jā, tā kā mēs noteikt, viņš atbildēja ja tas ir pilns, un mēs esam izmantojot norobežo īstenošanu. Tad mēs noteikti atgriezties viltus. Tiklīdz mēs hit 10 lietas masīvā, mēs nevaram fit 11, tāpēc mums atgriezties viltus. Ko darīt, ja tas ir neierobežots? Yeah. Ja jūs nevarat paplašināt masīvs kāda iemesla dēļ. Yeah, tāpēc atmiņa ir ierobežots resurss, un galu galā, ja mēs pastāvīgi stumšanas lietas uz skursteņa atkal un atkal, mēs esam gatavojas izmēģināt un piešķirt lielāku masīvs, lai ietilptu lielāks jaudu, un malloc vai kāds mēs esam, izmantojot gatavojas atgriezties viltus. Nu, malloc atgriezīsies Null. Atcerieties, katru reizi, kad jūs kādreiz zvanīt malloc, jums vajadzētu pārbaudīt, lai redzētu, vai tas atgriež Null vai kas cits, kas ir pareizība atskaitījumu. Tā kā mēs vēlamies, lai būtu neaprobežots kaudze, vienīgais gadījums, mēs ejam, lai būtu atgriešanās nepatiesa ir, ja mēs cenšamies palielināt jaudu un malloc vai kāds atgriežas nepatiesa. Tad pop neuzņemas nekādu argumentu, un tas atgriež virkni, kas ir uz augšu no skursteņa. Neatkarīgi nesen bija uzstājām uz skursteņa ir tas pop atgriežas, un tas arī novērš to no skursteņa. Un paziņo, ka tā atgriež null ja nekas uz skursteņa. Tas vienmēr ir iespējams, ka kaudze ir tukšs. Java, ja jūs esat pieraduši, ka, vai citās valodās, mēģinot pop no tukšas kaudze varētu izraisīt izņēmums vai kaut. Bet C, Null ir veida daudz gadījumu, kā mēs risinām šīs problēmas. Atgriežoties null, kā mēs spēsim neizsaka ka kaudze bija tukšs. Mēs esam ja kods, kas būs pārbaudi jūsu kaudze funkcionalitāti, īstenot push un pop. Tas nebūs daudz kodu. Es-tiešām, pirms mēs to darām, mājienu, mājienu- ja neesat redzējuši, malloc ir ne tikai funkcija kas sadala atmiņas par kaudzē jums. Ir par alloc funkciju ģimene. Pirmais ir malloc, ko jūs esat pieraduši. Tad tur ir calloc, kas dara to pašu, ko malloc, bet tas būs nulle viss par Jums. Ja esat kādreiz vēlējās noteikt viss uz null pēc mallocing kaut Jums vajadzētu būt tikai izmanto calloc pirmajā vietā, nevis rakstot lai cilpa, lai nulle visu bloku atmiņas. Realloc ir kā malloc un ir daudz īpašu gadījumu, bet būtībā kas realloc dara, ir tas aizņem rādītāju, kas jau bija piešķirti. Realloc ir funkcija jūs vēlaties būt pievēršot uzmanību šeit. Tas aizņem rādītāju, kas jau bija atgriezies no malloc. Pieņemsim, ka jūs lūgt no malloc rādītāju par 10 baitu. Tad vēlāk tu saproti tu gribēji 20 baiti, lai jūs aicinu realloc par šo rādītāju ar 20 baiti, un realloc automātiski kopēt pāri visam jums. Ja jūs vienkārši sauc malloc atkal, tāpat kā man ir sastāv no 10 baitu. Tagad man vajag bloku 20 baitu, tāpēc, ja es malloc 20 baiti, tad man ir manuāli kopēt pa 10 bytes no pirmā lieta uz otro lieta, un tad bez pirmā lieta. Realloc tiks galā, ka jums. Pamanīt paraksts būs spēkā neesošu *, kas ir tikai atgriežas rādītāju uz bloka atmiņu, tad anulēts * PTR. Jūs varat domāt par spēkā neesošs * kā vispārējs rādītājs. Vispār, jūs nekad nodarbojas ar spēkā neesošs *, bet malloc atgriežas tukšuma izjūta *, un tad tas ir tikai izmanto kā tas faktiski būs char *. Iepriekšējā neesošu *, kas tika atgriezta ar malloc tagad būs nodota realloc, un tad izmēra ir jauna baitu skaits jūs vēlaties piešķirt, lai jūsu jaunā jauda. Es jums pāris minūtes, un darīt to mūsu vietā. Sākt ar 1 Revision. Es tevi apturēt pēc cerams par pietiekami daudz laika, lai īstenotu push, un tad es došu jums citu pārtraukuma darīt pop. Bet tas tiešām nav tik daudz kodu vispār. Visvairāk kods ir iespējams paplašinās sīkumi, paplašinot jaudu. Labi, nav spiediena, ir pilnīgi darīts, bet, kamēr jūs jūtaties kā jūs esat uz pareizā ceļa, tas ir labi. Vai kāds ir kods viņi jūtas komfortabli ar mani velkot? Jā, es gribu, bet vai kāds ir kādu kodu varu uzvilkt? Labi, jūs varat sākt, to saglabāt, kāds tas ir? Es vienmēr aizmirst šo soli. Labi, meklē push, Vai jūs vēlaties, lai izskaidrotu savu kodu? [Studentu] Pirmkārt, es palielināja lielumu. Es domāju, varbūt man vajadzētu būt, ka, vienalga, es palielināja lielumu, un es redzēt, ja tas ir mazāk nekā spēju. Un, ja tas ir mazāk nekā spēju, es pievienot masīva ka mums jau ir. Un, ja tas nav, es reizināt jaudu ar 2, un es pārdalīt virknes masīvs uz kaut ar lielāku jaudu izmēra tagad. Un tad, ja tas neizdodas, es pateikt lietotājam un atgriezties viltus, un, ja tas ir labi, tad man stīgu jaunajā vietā. [Robs B.] arī to, ka mēs izmantojām jauku Bitu līmeņa operatoru šeit reizināt ar 2. Atcerieties, kreisā nobīdes vienmēr būs jāreizina ar 2. Tiesības maiņa ir dalīts ar 2, kamēr jūs atceraties, ka tas nozīmē, dalīt pa 2 kā veselums dalīts ar 2. Tas varētu nogriezt a 1 šeit vai tur. Bet nobīde pa kreisi 1 vienmēr būs jāreizina ar 2, ja vien jūs pārplūdes robežas skaitlim, un tad tas nebūs. Pusē komentārs. Man patīk darīt, tas nav gatavojas mainīt kodēšanas nekādā veidā, bet man patīk darīt kaut kas līdzīgs šim. Tas faktiski ir gatavojas darīt to nedaudz ilgāk. Varbūt tas nav ideāls gadījums, lai parādītu to, bet man patīk segmentā to šie bloki labi, ja šo, ja notiek, tad es esmu gatavojas darīt kaut ko, un tad funkcija tiek darīts. Man nav nepieciešams, lai pēc tam ritiniet manas acis galam funkcijas lai redzētu, kas notiek pēc cits. Tas ir, ja tas, ja notiek, tad es vienkārši atgriezties. Tā ir arī jauka papildu labums no visu pēc šīs Tagad nobīdīts pa kreisi reizi. Man vairs nav nepieciešams, ja jums kādreiz netālu smieklīgi garas rindas, tad šie 4 baiti var palīdzēt, un arī vairāk pa kreisi kaut kas ir, mazāk nomākti tu justos, ja patīk-labi, man ir jāatceras Es esmu šobrīd, kamēr cilpa iekšā no cita iekšpuses uz cilpas. Jebkur jūs varat darīt šo peļņu uzreiz, es veida, piemēram. Tas ir pilnīgi obligāta, un nav paredzams, nekādā veidā. [Studentu] Vai jābūt lielums - no nelabvēlīgā stāvoklī? Kļūme nosacījums ir mums neizdevās realloc, tā jā. Ievērojiet, kā ar nelabvēlīgā stāvoklī, iespējams, ja mēs brīvi stuff vēlāk, mēs vienmēr gatavojas neveiksmei Nav svarīgi, cik reizes mēs cenšamies virzīt kaut ko. Ja mēs saglabāt stumšanas, mēs turpinām palielināšanai lielumu, pat ja mēs ne liekot kaut uz skursteņa. Parasti mums nav pieauguma lielumu līdz pēc mēs esam veiksmīgi nodot to uz skursteņa. Mēs varētu darīt to, teiksim, nu šeit un šeit. Un tad tā vietā, lai sakot s.size ≤ jaudu, tas ir mazāk, nekā spēju, tikai tāpēc, ka mēs pārcēlās kur viss bija. Un atceries, ka vienīgā vieta, kur mēs, iespējams, varētu atgriezties viltus ir šeit, kur realloc atgriezās null, un, ja jums gadās atcerēties standarta kļūda, varbūt jūs varētu apsvērt šo gadījumu, kad jūs vēlaties, lai izdrukātu standarta kļūda, tāpēc fprintf stderr nevis tikai drukājot tieši uz standarta out. Atkal, tas nav cerības, bet, ja tas ir kļūda, rakstiet printf, tad jūs varētu vēlēties, lai būtu drukāt uz standarta kļūda, nevis standarta out. Kāds ir kaut kas cits, lai atzīmēt? Jā. [Studentu] Vai jums iet pa [bijusi dzirdama]? [Robs B.] Jā, faktisko tā binariness vai tikai kas tas ir? [Studentu] Tātad jūs reizināt to ar 2? [Robs B.] Jā, būtībā. Binārā zemi, mums vienmēr ir mūsu noteikt cipariem. Apstāšanos kreisi 1 būtībā ievieto to šeit labajā pusē. Atpakaļ uz šo, tikai atcerēties, ka viss bināro ir jauda 2, tāpēc tas bija 2 līdz 0, Tas 2-1 The, šis 2-2 The. Ievietojot 0 uz labo pusi tagad, mēs vienkārši novirzīt viss vairāk. Ko izmanto, lai ir 2 līdz 0 ir tagad 2-1 The, ir 2 līdz 2. Labajā pusē mēs ievietots neizbēgami būs 0, kas ir jēga. Ja jūs kādreiz reizināt numuru ar 2, tas nav gatavojas, lai galu galā dīvaini, tāpēc 2 no 0 vietā vajadzētu būt 0, un tas ir tas, ko es pusi brīdināja par pirms ir, ja jūs notikt novirzīt ārpus bitu skaitu veselam skaitlim, tad šis 1 gatavojas galu galā iet off. Tas ir tikai jāuztraucas, ja jums gadās būt darīšana ar patiesi lielu jaudu. Bet tajā brīdī, tad jums ir darīšana ar masīvu miljardiem lietām, kas varētu ievietot atmiņā vienalga. Tagad mēs varam nokļūt uz pop, kas ir vēl vieglāk. Jūs varētu darīt to, piemēram, ja jums gadās pop visu ķekars, un tagad tu esi pusi jaudas vēlreiz. Jūs varētu realloc sarukt atmiņas apjomu jums ir, bet jums nav jāuztraucas par to, lai tikai realloc lieta būs aug atmiņu, nekad sarūk atmiņu, kas notiek, lai pop super viegli. Tagad rindas, kas būs tāpat skursteņi, bet lai jums veikt lietas ir pretēja. Prototipu piemērs rindā ir līnija, tāpēc es domāju, ja tu būtu angļu, es būtu teicis prototipu piemērs rindā ir rinda. Tātad, piemēram, līnijas, ja tu esi pirmais cilvēks rindā, jūs sagaida, lai būtu pirmais cilvēks no līnijas. Ja jūs esat pēdējais cilvēks rindā, jums būs pēdējais cilvēks apkalpo. Mēs to saucam par FIFO modelis, bet kaudze bija LIFO modelis. Šie vārdi ir diezgan universāls. Piemēram skursteņi un atšķirībā masīvos, rindas parasti neļauj piekļūt elementiem vidū. Lūk, kaudze, mums ir push un pop. Lūk, mēs gadās aicināja viņus ierindod un dequeue. Esmu arī dzirdējis viņus sauc pārmaiņas un unshift. Es esmu dzirdējis cilvēkus sakām push un pop arī uz rindām. Esmu dzirdējis ievietot, izņemt, tik push un pop, ja jūs runājat par skursteņi, jūs stumšanas un popping. Ja jūs runājat par rindām, jūs varētu izvēlēties vārdus, kurus vēlaties izmantot par ievietošanai un izņemšanai, un nav par to, ko vajadzētu saukt vienprātība. Bet šeit, mums ir ierindod un dequeue. Tagad, struktūrai izskatās gandrīz identiski kaudze struct. Bet mums ir sekot galvas. Es domāju, tas saka šeit lejā, bet kāpēc mums vajag galvu? Prototipi ir būtībā identiski push un pop. Jūs varat domāt par to kā push un popmūzikai. Vienīgā atšķirība ir pop atgriežas-nevis no pēdējā, tas atgriežas pirmais. 2, 1, 3, 4, vai kaut ko. Un šeit ir sākums. Mūsu rinda ir pilns, tāpēc tur ir četri elementi tajā. No mūsu rindas beigas ir pašlaik 2, un tagad mēs ejam, lai ievietotu kaut ko citu. Ja mēs vēlamies, lai ievietotu, ka kaut kas cits, ko mēs izdarījām kaudze versiju tiek mēs paplašināt mūsu bloku atmiņas. Kas ir ar šo problēmu? [Studentu] Jūs pārvietot 2. Ko es teicu iepriekš par rindas beigās, tas nav jēgas, ka mēs sākam pēc 1, tad mēs vēlamies līdz 1 dequeue, tad dequeue 3, tad dequeue 4, tad dequeue 2, tad dequeue šo vienu. Mēs nevaram izmantot realloc tagad, vai vismaz, jums ir izmantot realloc savādāk. Bet jūs, iespējams, ne tikai izmantot realloc. Jums nāksies manuāli kopēt savu atmiņu. Ir divas funkcijas kopēt atmiņu. Ir memcopy un memmove. Es esmu šobrīd lasījums cilvēks lapas, lai redzētu, kura jūs gatavojas vēlaties izmantot. Labi, memcopy, atšķirība ir ka memcopy un memmove, viens rokturi lietu pareizi kur jūs kopēšana uz reģionu, kas notiek, lai pārklājas reģionu jūs kopēšana no. Memcopy nav to rīkoties. Memmove dara. Jūs varat domāt par šīs problēmas- pieņemsim, ka es gribu, lai kopētu šo puisis, šie četri līdz šim puisi. Beigās, ko masīva vajadzētu izskatīties Pēc kopija ir 2, 1, 2, 1, 3, 4, un pēc tam daži sīkumi beigās. Bet tas ir atkarīgs no pasūtījuma, kurā mēs tiešām kopēt, jo, ja mēs neuzskatām, ka šis reģions mēs kopēšana uz pārklājas viens mēs esam kopēšana no, tad mēs varētu darīt, piemēram, sākuma šeit, kopēt 2 uz vietas mēs gribam iet, tad pārvietot mūsu norādes uz priekšu. Tagad mēs gribam būt šeit un šeit, un tagad mēs vēlamies, lai kopētu Tas pār šo puisis puisis un pārvietot mūsu norādes uz priekšu. Ko mēs esam gatavojas galu galā kļūst ir 2, 1, 2, 1, 2, 1 vietā atbilstošā 2, 1, 2, 1, 3, 4, jo 2, 1 neievērot ierobežojumu dēļ sākotnējo 3, 4. Memmove rokturi, ka pareizi. Šajā gadījumā, būtībā tikai vienmēr izmantot memmove jo tā rīkojas pareizi. Tā parasti neveic jebkurā sliktāk. Ideja ir, nevis sākot no sākuma un kopēšanas šādā veidā kā mēs tikko darīja šeit, tas sākas no beigām un eksemplāros, un tādā gadījumā, jūs nekad nevar būt problēma. Nepastāv sniegumu zaudēts. Vienmēr izmantot memmove. Nekad nav jāuztraucas par memcopy. Un tur tu esi nāksies atsevišķi memmove ietin ap porciju savā rindā. Neraizējieties, ja ne pilnīgi darīts. Tas ir daudz grūtāk, nekā kaudze, stumtu, un pop. Kāds ir kods, mēs varētu strādāt ar? Pat ja pilnīgi nepilnīga? [Studentu] Jā, tas ir pilnīgi nepilnīga, lai gan. Pilnīgi nepilnīga ir labi, kamēr mēs-jūs varat ietaupīt pārskatīšanu? Es aizmirst, ka katru reizi. Labi, ignorējot to, kas notiek, kad mums ir nepieciešams, lai mainītu lietas. Pilnībā ignorēt resize. Izskaidrot šo kodu. Es esmu pārbaudes vispirms, ja izmērs ir mazāks nekā kopiju vispirms un tad pēc tam, es ievietot-es galvu + izmēru, un es pārliecinieties, ka tā apņem jaudu masīva, un es ievietot jaunu stīgu šajā pozīcijā. Tad es palielinātu un atgriezties taisnība. [Robs B.] Šis noteikti ir viens no tiem gadījumiem, kad jūs gatavojas vēlaties, lai, izmantojot mod. Jebkāda veida gadījumā, ja jums ir ietīšana apkārt, ja jūs domājat ietīšana ap, tūlītēja doma būtu mod. Kā ātri optimizāciju / padarīt savu kodu vienā rindā īsāks, Jūs ievērosiet, ka līnija tūlīt pēc šo vienu ir tikai izmērs + +, lai jūs apvienot, ka šajā līnijā, izmērs + +. Tagad šeit lejā, mums ir lieta ja mums nav pietiekami daudz atmiņas, tāpēc mēs palielinām mūsu spējas ar 2. Es domāju, jūs varētu būt tāda pati problēma šeit, bet mēs varam ignorēt to tagad, kur, ja jums nav, lai palielinātu savu kapacitāti, tad jūs gatavojas vēlaties, lai samazinātu savu kapacitāti ar 2 vēlreiz. Vēl īss piezīme ir tāpat kā jūs varat darīt + =, Jūs varat arī darīt << =. Gandrīz jebko var doties pirms vienāds, + =, | =, un =, << =. Char * jaunais ir mūsu jaunā bloka atmiņu. Ak, nekā šeit. Ko cilvēki domā par to, kādi mūsu jauno bloka atmiņu? [Studentu] Tas būtu char **. Atceroties mūsu struct šeit, stīgas ir tas, ko mēs pārdalīšanai. Mēs padarīt visu jauno dinamisku uzglabāšana par šiem rindā elementiem. Ko mēs gribam būt piešķirot jūsu stīgas ir tas, ko mēs esam mallocing tieši tagad, un tik jauns būs char **. Tas būs masīvs stīgas. Tad kāda ir gadījumā, saskaņā ar kuru mēs ejam, lai atgriezties viltus? [Studentu] Vai mums darīt char *? [Robs B.] Jā, labi zvanu. [Studentu] Kas tas bija? [Robs B.] Mēs vēlējāmies darīt izmēru char * jo mēs vairs- tas tiešām būs ļoti liela problēma, jo sizeof (char) būtu 1. Sizeof char * būs 4, tāpēc daudz reizes, kad jūs nodarbojas ar Ints, Jums ir tendence iegūt prom ar to, jo izmēru int un izmēru int * uz 32-bitu sistēmā būs tas pats. Bet šeit, sizeof (char) un sizeof (char *) tagad būs tas pats. Kas ir gadījums, kad mēs atgriezties viltus? [Studentu] Jauns ir nulle. Jā, ja jaunais ir nulle, mēs atgriezties viltus, un es esmu gatavojas gāzt šeit- [Studentu] [dzirdams] [Robs B.] Jā, tas ir labi. Jūs varētu vai nu izdarīt 2 reizes jaudu vai jaudas maiņu 1 un tad tikai noteikt to šeit vai neatkarīgi. Mēs darīsim to, kā mums bija tā. Jauda >> = 1. Un jūs nekad nav jāuztraucas par iespēju zaudēt gada 1 vietu jo jums atstājis nobīdīts 1, tātad 1 vieta ir vienmēr 0, tik labi novirzot 1, jūs joprojām būs kārtībā. [Studentu] Vai jums ir nepieciešams to darīt, pirms atgriešanās? [Robs B.] Jā, tas padara absolūti nekādas jēgas. Tagad pieņemam mēs esam gatavojas galu galā atgriešanās patiess līdz galam. Veids, kā mēs gatavojamies darīt šos memmoves, mums jābūt uzmanīgiem ar to, kā mēs viņus. Vai kāds ir kādi ieteikumi par to, kā mēs viņus? Lūk, mūsu sākums. Neizbēgami, mēs vēlamies sākt sākumā atkal un kopēt lietas no turienes, 1, 3, 4, 2. Kā jūs to darīt? Pirmkārt, man ir jāskatās uz cilvēka lapā memmove vēlreiz. Memmove, lai argumentu vienmēr ir svarīga. Mēs vēlamies, lai mūsu galamērķi pirmais, avots otrais, izmēru trešais. Ir funkcijas, kas reversētas avotu un galamērķi daudz. Galamērķis, avots mēdz būt konsekventi nedaudz. Gājiens, kas tas ir atgriešanās? Tā atgriež rādītāju uz galamērķi, lai kāda iemesla dēļ jūs varētu vēlēties, ka. Es varu attēlu lasīt, bet mēs vēlamies virzīties uz mūsu mērķi. Kas ir mūsu galamērķis būs? [Studentu] Jauns. [Robs B.] Jā, un kur mēs kopēšana no? Pirmā lieta, mums ir kopēšanu tas ir 1, 3, 4. Kas ir-tas 1, 3, 4. Kāds ir no 1 šīs adreses? Kāds ir no 1 šīs adreses? [Studentu] [dzirdams] [Robs B.] galva adrese pirmais elements. Kā mēs varam iegūt pirmo elementu masīvu? [Studentu] rinda. [Robs B.] Jā, q.strings. Atcerieties, šeit, mūsu galvenais ir 1. Darn to. Es tikai domāju, ka tas ir maģiski- Lūk, mūsu galvenais ir 1. Es esmu gatavojas mainīt savu krāsu pārāk. Un šeit ir stīgas. Tas, mēs varam vai nu rakstīt to kā mēs to darījām nekā šeit ar galvas + q.strings. Daudzi cilvēki arī rakstīt IT & q.strings [galvu]. Tas nav īsti mazāk efektīva. Jūs varētu domāt par to, kā jūs dereferencing to un pēc tam iegūt adresi, bet kompilators gatavojas tulkot to, ko mums bija pirms vienalga, q.strings + galva. Katrā ziņā jūs vēlaties, lai padomātu par to. Un cik daudz baitu mēs vēlamies kopēt? [Studentu] Ietilpība - galva. Jauda - galva. Un tad jūs vienmēr varētu uzrakstīt piemēru lai noskaidrotu, vai tas ir labi. [Studentu] Tai ir dalīts ar 2, tad. Jā, tāpēc es domāju, mēs varētu izmantot lielumu. Mums joprojām ir izmērs ir- izmantojot izmēru, mums ir lielums ir vienāds ar 4. Mūsu izmērs ir 4. Mūsu galvenais ir 1. Mēs vēlamies, lai kopētu šos 3 elementiem. Tas ir veselība pārbaudītu, ka izmērs - galva ir pareizi 3. Un nāk atpakaļ šeit, tāpat kā mēs teicām iepriekš, ja mēs izmantot jaudas, tad mēs ir dalīt pa 2 jo mēs esam jau pieaudzis mūsu spējas, tāpēc tā vietā, mēs spēsim izmantot izmēru. Kas kopijas ka porcija. Tagad, mums ir nepieciešams, lai kopētu citu daļu, daļu, kas ir pa kreisi no sākuma. Tas notiek, lai memmove uz kāda nostāja? [Studentu] Plus izmērs - galva. Jā, tāpēc mēs jau esam kopēt izmēros - galvas baiti, un tāpēc, ja mēs gribam, lai kopētu atlikušos baiti ir jauns un tad izmēra mīnus-labi, baitu skaits, mēs esam jau kopē iekšā Un tad, kad mēs kopēšana no? [Studentu] Q.strings [0]. [Robs B.] Jā, q.strings. Mēs varētu vai nu darīt & q.strings [0]. Tas ir ievērojami mazāk izplatīta nekā šis. Ja tas ir tikai būs 0, tad jūs parasti redzēt q.strings. Tas ir, ja mēs kopēšana no. Cik daudz baitu mēs esam atstājuši, lai kopētu? >> [Studentu] 10. Tiesības. [Studentu] Vai mums ir vairoties 5-10 reizes lielāka par baitu vai kaut ko? Jā, tā tas ir, ja, ko tieši mēs kopēšanu? [Studentu] [dzirdams] Kāda ir par ko mēs esam kopēšanas veids? [Studentu] [dzirdams] Yeah, tāpēc char * s, ka mēs esam kopēšanu, mēs nezinām, kur tie nāk no. Nu, ja viņi norāda uz, piemēram, stīgas, mēs galu galā spiežot to uz rindā vai enqueuing uz rindā. Kur tie nāk no mums nav ne jausmas. Mums ir nepieciešams, lai sekotu char * s paši. Mēs nevēlamies, lai kopētu izmērs - galvas baiti. Mēs vēlamies, lai kopētu izmērs - galva char * s, tāpēc mēs esam gatavojas reizināt šo ar sizeof (char *). Pats šeit lejā, galvu * sizeof (char *). [Studentu] Kas par [dzirdams]? Tas tieši šeit? [Studentu] Nē, zem, izmērs - galva. [Robs B.] Tas tieši šeit? Rādītājs aritmētika. Kā rādītājs aritmētika iet uz darbu, ir tas automātiski reizina ar izmēru veidu, ka mums ir darīšana ar. Tāpat kā nekā šeit, jaunais + (lielums - galva) ir tieši līdzvērtīgs & jaunā [lielumu - galvas] kamēr mēs sagaidām, ka strādāt pareizi, jo, ja mums ir darīšana ar int masīvu, tad mums nav indeksu par int- vai, ja tas ir par izmēru 5 un jūs vēlaties 4. elementu, tad mēs indekss par int masīvs [4]. Jūs Don 't-[4] * lielumu int. Kas rīkojas ar to automātiski, un šis gadījums ir burtiski līdzvērtīgs, tāpēc kronšteins sintakse ir tikai gatavojas pārvērst šo tiklīdz jūs sastādīt. Tas ir kaut kas jums ir jābūt uzmanīgiem, ka ja jūs pievienojat izmērs - galva Jums ir pievienot ne vienu baitu. Tu esi pievienojot vienu char *, kas var būt viens baiti vai neatkarīgi. Citi jautājumi? Labi, dequeue būs vieglāk. Es došu jums minūti, lai īstenotu. Ak, un es domāju, tas ir tāda pati situācija, kad ko Enqueue gadījumā, ja mēs esam enqueuing null, varbūt mēs vēlamies rīkoties tā, varbūt mums nav. Mēs ne darīt to vēlreiz šeit, bet pats kā mūsu kaudze gadījumā. Ja mēs ierindod null, mēs varētu vēlēties, lai ignorēt to. Kāds ir daži kodu es varētu uzvilkt? [Studentu] Man vienkārši ir dequeue. Versija 2 ir tas, ka-labi. Jūs vēlaties, lai izskaidrotu? [Studentu] Pirmkārt, jums pārliecinieties, ka tur ir kaut kas rindā un ka izmērs ir iet uz leju līdz 1. Jums ir nepieciešams to darīt, un tad jums atgriezties galvu un pēc tam pārvietot galvu uz augšu 1. Labi, tā ir stūra gadījumā mums ir jāapsver. Yeah. [Studentu] Ja jūsu galva ir pēdējā elementā, tad jūs nevēlaties galvu norādīt ārpus masīva. Jā, tā tiklīdz vadītājs hits beigās mūsu masīvs, kad mēs dequeue, mūsu galvas būtu modded atpakaļ līdz 0. Diemžēl, mēs nevaram darīt, ka ar vienu soli. Es domāju, kā es, iespējams noteikt tā Tas būs char *, ko mēs esam atpakaļ, neatkarīgi no jūsu mainīgā vārds vēlas būt. Tad mēs vēlamies mod galvu pēc mūsu spējas un pēc tam atgriezties pūt. Daudzi cilvēki šeit viņi varētu darīt, šis ir gadījums-you'll redzēt cilvēkus darīt, ja galva ir lielāks nekā jaudas, do galvu - kapacitāti. Un tas ir tikai darbs ap to mod ir. Galva MOD = jauda ir daudz tīrāks no iesaiņojuma ap nekā tad, ja vadītājs ir lielāks nekā jaudas galvu - jaudas. Jautājumi? Labi, pēdējā lieta, ko mēs esam atstājuši ir mūsu saistīts saraksts. Jūs varētu izmantot, lai dažas no saistīts saraksts uzvedību, ja jūs saistīti sarakstus jūsu hash tabulu, ja jūs hash tabulu. Es stingri ieteiktu darīt hash tabulu. Jums varētu būt jau veikuši Trie, bet cenšas ir daudz grūtāk. Teorētiski viņi asimptotiski labāk. Bet paskatieties uz lielo kuģa, un mēģina nekad darīt labāk, un tie aizņem vairāk atmiņas. Viss par mēģina beidzas ar to sliktāks par vairāk darba. Tas ir tas, ko David Malan risinājums vienmēr ir Vai viņš vienmēr raksti viņa Trie risinājums, un redzēsim, kur viņš šobrīd ir. Ko viņš ar David J? Viņš ir # 18, tā ka nav briesmīgi slikti, un tas būs viens no labākajiem mēģina jūs varat iedomāties vai viens no labākajiem mēģina no Trie. Vai tas nav pat viņa oriģināls risinājums? Es jūtu Trie risinājumi mēdz būt vairāk šajā diapazonā RAM izmantošana. Iet uz leju līdz ļoti top, un RAM izmantošana ir vienotā cipariem. Iet uz leju uz leju, un tad jūs sākat redzēt mēģina kur jūs saņemsiet absolūti masveida RAM izmantošana, un cenšas ir grūtāk. Nav pilnīgi tā vērts, bet par izglītības pieredzi, ja jūs vienu. Pēdējā lieta ir mūsu saistīts saraksts, un šīs trīs lietas, skursteņi, rindas, un piesaistītie saraksti, turpmākais lieta, ko jūs kādreiz darīt datorzinātnēs pieņemam, ka jūs ir iepazinuši šīm lietām. Tie ir tikai tik svarīga visam. Saistīts sarakstus, un šeit mēs esam atsevišķi saistīts saraksts būs mūsu īstenošana. Kāda atsevišķi saistītas nozīmē, salīdzinot ar divkārt saistīts? Jā. [Studentu] Tas tikai norāda uz nākamo rādītāju nevis uz norādes, piemēram, viena pirms to un pēc tam vienu. Yeah, tāpēc attēla formāts, ko es tikko darīt? Man ir divas lietas. Man ir attēlu un attēlu. Jo attēla formātā, mūsu atsevišķi saistīti saraksti, neizbēgami, mums ir sava veida rādītāju uz galvas mūsu sarakstā, un tad ietvaros mūsu sarakstā, mums vienkārši ir norādes, un varbūt tas norāda uz null. Tas būs jūsu tipiskā zīmējums atsevišķi saistīts saraksts. Divkārt saistīts saraksts, jūs varat doties atpakaļ. Ja es jums dot nekādu mezglu sarakstā, tad jūs varat noteikti nokļūt jebkuru citu mezglu saraksta, ja tas ir divkārt saistīts saraksts. Bet, ja es iegūtu Jums trešo mezglu sarakstā un tas ir atsevišķi saistīts saraksts, Nav veids, kā jūs kādreiz gatavojas saņemt uz pirmo un otro mezgliem. Un tur ir priekšrocības un kaitējumus, un viena acīmredzama ir jums aizņem vairāk izmēra, un jums ir sekot līdzi, kur šīs lietas ir norādot tagad. Bet mēs tikai rūp atsevišķi saistītas. Dažas lietas mēs esam nāksies īstenot. Jūsu typedef struktūrai mezglā, int i: struct mezglā * nākamo; mezglā. Ka typedef būtu sadedzināt savos prātos. 1 viktorīna būtu gribētu sniegt typedef par saistītu saraksta mezglā, un jums vajadzētu būt iespējai nekavējoties ķeburs ka uz leju pat domāt par to. Es domāju, pāris jautājumi, kāpēc mums vajag struct šeit? Kāpēc mēs nevaram teikt mezglā *? [Studentu] [dzirdams] Yeah. Vienīgais, kas definē mezglā kā lieta ir typedef pati. Bet kā šo punktu, kad mēs esam veida parsēšana caur šo struct mezglā definīciju, mēs neesam pabeiguši mūsu typedef vēl, tāpēc jo typedef nav pabeigts, mezglu neeksistē. Bet struktūrai mezglā dara, un tas mezgls šeit, Tas varētu arī saukt kaut kas cits. Tas varētu saukt n. To varētu saukt saistīts saraksts mezglā. To varētu saukt neko. Bet tas struktūrai mezglā ir jāizmanto tas pats, kas šajā struct mezglā. Ko jūs aicinu šo ir arī šeit, un lai arī atbilde uz otro punktu par jautājuma tāpēc, daudz reizes, kad jūs redzat structs un typedefs no structs, jūs redzēsiet anonīmi structs kur jūs vienkārši redzēt typedef struktūrai, īstenošana struct, vārdnīcas, vai neatkarīgi. Kāpēc šeit mums vajag teikt mezglu? Kāpēc nevar tā būt anonīms struktūrai? Tas ir gandrīz tas pats atbildi. [Studentu] Jūs nepieciešams atsaukties uz to, kā struct. Jā, saskaņā ar struct, jums ir nepieciešams atsaukties uz struct pati. Ja tu nedod struct nosaukumu, ja tas ir anonīms struktūrai, jūs nevarat atsaukties uz to. Un pēdējais, bet ne mazāk tie būtu visi ir nedaudz vienkāršs, un tie palīdzēs jums saprast, ja jūs esat rakstiski šo leju ka jūs darāt kaut ko nepareizi, ja šīs lietas veidu, nav jēgas. Pēdējais, bet ne mazāk svarīgi, kāpēc tas ir jābūt struktūrai mezglu *? Kāpēc nevar tā vienkārši tikt struct mezglā tālāk? [Studentu] rādītāju uz nākamo struct. Tas ir neizbēgami, ko mēs gribam. Kāpēc tas varētu nekad būt struct mezglā nākamais? Kāpēc tas ir jābūt struktūrai mezglu * nākamais? Yeah. [Studentu] Tas ir tāpat bezgalīgu cilpu. Yeah. [Studentu] viss būs vienā. Jā, tikai domā par to, kā mēs varētu darīt izmēru vai kaut. Lielums struct ir būtībā + vai - daži raksts šeit vai tur. Tas būtībā būs summa no attiecīgās struct lietām izmēriem. Šīs tiesības šeit, nemainot neko, lielums būs viegli. Izmēra struct mezglā būs lielums I + izmēra nākamo. Izmēra i būs 4. Izmēra next būs 4. Izmēra struct mezglā būs 8. Ja mums nav *, domājot par sizeof, Tad sizeof (i) būs 4. Izmēra struct mezglā blakus būs lielums I + izmēra struct mezglā Nākamās + Lielums I + izmēra struct mezglā nākamo. Tas būtu bezgalīgs rekursija mezglu. Tas ir iemesls, kāpēc tas ir, kā lietas ir. Atkal, noteikti iegaumēt, ka, vai vismaz to saprotu pietiekami, ka jūs varat būt iespējai Iemesls caur to, ko tas izskatās. Lietām, ko mēs gatavojamies vēlamies īstenot. Ja garums saraksta- jūs varētu pievilt un turēt ap pasaules garums vai kaut ko, bet mēs nebrauksim, lai to izdarītu. Mēs ejam, lai saskaitītu garumu saraksta. Mēs esam satur, tā ka būtībā tāpat meklēšanas, tāpēc mums ir saistīts saraksts integers, lai redzētu, ja tas skaitlis ir saistītajā sarakstā. Prepend gatavojas ievietot sākumā sarakstā. Pievienošana gatavojas ievietot beigās. Insert_sorted gatavojas jāiekopē sakārtotās pozīciju sarakstā. Insert_sorted veida pieņem, ka jums nekad nav izmantots prepend vai pievienot sliktos veidos. Insert_sorted ja jūs īstenojot insert_sorted- pieņemsim, ka mums ir mūsu saistīts saraksts. Tas ir tas, ko tā šobrīd izskatās, 2, 4, 5. Es gribu, lai ievietotu 3, tik ilgi, kamēr saraksts pats par sevi ir jau sakārtoti, tas ir viegli atrast kur 3 pieder. Es sāktu ar 2. Labi, 3 ir lielāka par 2, tāpēc es gribu, lai saglabātu turpinās. Ak, 4 ir pārāk liels, tāpēc es zinu 3 gatavojas iet starp 2 un 4, un man ir noteikt norādes un visu, kas stuff. Bet, ja mums nav strikti izmantot insert_sorted, patīk pieņemsim tikai teikt, es prepend 6, tad mans saistīts saraksts ir gatavojas kļūt arī. Tagad tā nav jēgas, tāpēc insert_sorted, jūs varat vienkārši pieņemu ka saraksts ir sakārtots, lai gan operācijas eksistē kas var izraisīt to, lai netiek sakārtoti, un tas arī viss. Atrast noderīgs ievietot tik tie ir galvenās lietas, jums nāksies īstenot. Tagad, ņemt minūti, lai darīt garumu un satur, un tiem jābūt samērā ātri. Tuvojas slēgšanas laiku, lai kāds ir kaut ko par garumu vai satur? Viņi būs gandrīz identisks. [Studentu] Garums. Let 's redzēt, pārskatīšanu. Labi. Jūs vēlaties, lai izskaidrotu? [Studentu] Es tikai izveidot rādītāja mezglu un sāktu to, pirmkārt, kas ir mūsu globālo mainīgo, un tad es varētu pārbaudīt, lai redzētu, vai tas ir Null, lai man nav iegūt seg vaina un atgriezties 0, ja tas gadījums. Citādi, es cilpa ar, sekot ietvaros skaitlim cik reizes es esmu piekļuvis nākamo elementu sarakstu un tajā pašā pieauguma operācijas arī piekļūt, ka faktiskā elementa, un tad es nepārtraukti veikt pārbaudi, lai redzētu, vai tas ir nulle, un, ja tas ir nulle, tad tas aborts notiek un tikai atgriež elementu skaitu es esmu piekļūt. [Robs B.] Vai kāds ir kādi komentāri par kaut ko? Tas izskatās labi pareizību gudrs. [Studentu] Es nedomāju, ka jums ir nepieciešams mezglā == null. Jā, tāpēc, ja mezgla == null atpakaļ 0. Bet, ja mezgla == null tad šī-ak, tur ir pareizības jautājums. Tas bija tikai jūs atpakaļ es, bet tas nav joma šobrīd. Jums vienkārši vajag int i, tāpēc es = 0. Bet, ja mezgls ir nulle, tad es joprojām būs 0, un mēs esam gatavojas atgriezties 0, tāpēc šī lieta ir identisks. Vēl viena kopīga lieta ir turēt deklarāciju mezgla iekšpusē cilpa. Jūs varētu teikt-ak, nē. Pieņemsim glabā to kā šis. Es droši vien likt int i = 0 šeit, tad mezglu * mezgls = vispirms šeit. Un tas ir iespējams, kā-atbrīvojoties no šo tagad. Tas ir iespējams, kā es būtu rakstījis to. Jūs varētu arī-meklē to, kā šis. Šis cilpu struktūru tieši šeit vajadzētu būt gandrīz tikpat dabiski, lai jūs kā int i = 0 Man ir mazāk nekā garums masīva i + +. Ja tas ir, kā jūs atkārtot pa masīvu, tas ir, kā jūs atkārtot pa saistīts saraksts. Tas būtu otro dabu kādā brīdī. Paturot to prātā, tas būs gandrīz tas pats. Jūs gatavojas vēlaties atkārtot vairāk saistītu sarakstu. Ja mezgla-man nav ne jausmas, ko vērtību sauc. Mezglā i. Ja šajā mezglā vērtība = man atgriezties true, un tas arī viss. Ievērojiet, ka vienīgais veids, kā mēs kādreiz atgriezties viltus ir, ja mēs pārietu visā saistīts saraksts un nekad atgriezties taisnība, Tātad tas, ko šis dara. Kā pusē piezīmi, mēs, iespējams, netiks saņemt pievienot vai prepend. Ātri Pēdējā piezīme. Ja redzat statisko atslēgvārdu, tāpēc pieņemsim, ka statisko int skaits = 0, tad mēs skaits + +, jūs varat būtībā domāt par to kā globālā mainīgā, kaut gan es tikko teicu tas nav kā mēs spēsim īstenot garumu. Es esmu to izdarīt šeit, un tad skaits + +. Jebkurš veids, kā mēs varam ieiet mezglu mūsu saistīts saraksts mēs palielināšanai mūsu skaitu. Šī punkts ir tas, ko statisks atslēgvārds nozīmē. Ja es tikko bija int skaits = 0, kas būtu regulāru veco globālo mainīgo. Kas statisko int skaits nozīmē, ka tā ir globāla mainīga par šo failu. Tas ir neiespējami kādu citu failu, patīk domāt no 5 PSET, ja jums ir sākusies. Jums ir gan speller.c, un jums ir dictionary.c, un, ja jūs vienkārši pasludināt lieta pasaulē, tad neko speller.c var piekļūt dictionary.c un vice versa. Global mainīgie ir pieejami ar jebkuru. C failu, bet statiskās mainīgie ir pieejami tikai no iekšienes failu pati, tāpēc iekšpusē pareizrakstības pārbaudītāju vai iekšpusē dictionary.c, Tas ir veids, kā es varētu paziņot savu mainīgo par lielumu mana masīva vai izmēru mana skaitu vārdus vārdnīcā. Tā kā es nevēlos atzīt globālu mainīgo ka kāds ir piekļūt, Es tiešām tikai rūpējas par to, lai saviem mērķiem. Laba lieta par šo ir arī viss vārds sadursme sīkumi. Ja kādu citu failu mēģina izmantot globālo mainīgo sauc skaits, lietas iet ļoti, ļoti nepareizi, tāpēc šis labi saglabā lietas droši, un tikai jūs varat piekļūt, un neviens cits nevar, un, ja kāds cits deklarē globālā mainīgā sauc skaits, tad tas nav pretrunā ar jūsu statisko mainīgo sauc skaits. Tas ko statiska ir. Tas ir fails globālo mainīgo. Jautājumi par kaut ko? Visu komplektu. Bye. [CS50.TV]