2 00:00:00,000 --> 00:00:02,760 >> SPEAKER 1: Ni skribi programon kiu stimulanta la uzanto por la nomoj kaj 3 00:00:02,760 --> 00:00:04,700 domoj de tri studentoj. 4 00:00:04,700 --> 00:00:08,840 Nun, por gardi tiujn nomojn kaj domoj ni povus uzi, kion, ses variabloj. 5 00:00:08,840 --> 00:00:12,260 Tri kordoj por la nomoj, kaj alia tri kordojn por la domoj, 6 00:00:12,260 --> 00:00:16,560 sed ni jam scias ke ni povas purigi ke kodo uzante arrays anstataŭe, 7 00:00:16,560 --> 00:00:20,220 ekzemple tabelo de amplekso 3 por la tri nomoj, kaj alia tabelo de 8 00:00:20,220 --> 00:00:22,110 grandeco 3 por la domoj. 9 00:00:22,110 --> 00:00:25,870 Sed ĝi rezultas ni povas purigi ĉi supren pliaj ankoraŭ, kaj efektive observu tiujn 10 00:00:25,870 --> 00:00:30,520 nomoj kaj domoj kune, tiel ke studenta nomo kaj lia aŭ ŝia domo 11 00:00:30,520 --> 00:00:34,940 estas iel encapsulada, por tiel paroli, en la sama variablo. 12 00:00:34,940 --> 00:00:39,095 >> Por fari tion, kvankam, ni bezonas por deklari nian propran datumtipo, nia propra tipo en C, 13 00:00:39,095 --> 00:00:42,660 ke la aŭtoroj de C ne nepre pensi jarojn. 14 00:00:42,660 --> 00:00:45,630 Por fari tion ni povas uzi la ŝlosilvorto typedef, kune kun la 15 00:00:45,630 --> 00:00:47,200 alia ŝlosilvorto struct. 16 00:00:47,200 --> 00:00:48,160 Ni rigardu. 17 00:00:48,160 --> 00:00:50,650 Interne de structs.h, mi havas jam alveninta komenciĝis per 18 00:00:50,650 --> 00:00:52,560 inkludante la CS50 biblioteko. 19 00:00:52,560 --> 00:00:57,640 Mi sekvanta tuj tajpi typedef struct, kaj tiam krispa streĉa. 20 00:00:57,640 --> 00:01:01,370 Interne de la struct, mi tuj specifi ke studento devas havi 21 00:01:01,370 --> 00:01:04,960 ŝnuro nomita nomon, kaj la alian kordo nomata domo. 22 00:01:04,960 --> 00:01:08,430 Mi tuj poste fermi miajn krispa krampoj, kaj specifi ke la nomo de 23 00:01:08,430 --> 00:01:11,420 tiu nova datumtipo farigxos studento. 24 00:01:11,420 --> 00:01:15,550 En aliaj vortoj, tra tiu sintakso mi deklarita nova datumtipo de mia propra 25 00:01:15,550 --> 00:01:19,910 ke ne ekzistis antaŭ momento, kaj ene de tiu datumtipo estas du datumoj 26 00:01:19,910 --> 00:01:24,270 kampoj aŭ datumoj membroj, oni nomis nomon, oni nomis domo, ambaŭ el kiuj 27 00:01:24,270 --> 00:01:25,630 estas el tipo String. 28 00:01:25,630 --> 00:01:27,690 >> Ni nun uzas tiun tipon en reala programo. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 En structs0.c, mi simile alveninta mem komenciĝis jam kun iuj 31 00:01:34,090 --> 00:01:36,999 boilerplate kodo, kaj mi estas nun tuj uzi ĉi datumoj 32 00:01:36,999 --> 00:01:39,100 tajpi studento, kiel sekvas. 33 00:01:39,100 --> 00:01:42,450 Mi unue tuj deklaru tabelo de tipo studento, mi 34 00:01:42,450 --> 00:01:43,920 alvoki la tabelo studentoj - 35 00:01:43,920 --> 00:01:44,630 pluralo - 36 00:01:44,630 --> 00:01:49,360 kaj mi specifi ke ĝia grandeco estos tri, kiuj, avizo, estas la valoro de 37 00:01:49,360 --> 00:01:50,880 la konstanta Lernantoj - 38 00:01:50,880 --> 00:01:51,890 en ĉiuj ĉefurboj - 39 00:01:51,890 --> 00:01:54,930 ke mi deklaris supren tien, pli frue en la dosiero. 40 00:01:54,930 --> 00:01:58,280 Ni nun persisti super tiuj tri studentoj, kaj instigas la uzanton por 41 00:01:58,280 --> 00:02:00,050 iliaj nomoj kaj domoj. 42 00:02:00,050 --> 00:02:05,422 >> por int i get 0, i estas malpli ol tiu konstanto, i + +. 43 00:02:05,422 --> 00:02:08,600 Kaj nun interne de la korpo de ĉi por buklo, mi tuj presi ion 44 00:02:08,600 --> 00:02:11,470 kiel studenta nomo. 45 00:02:11,470 --> 00:02:14,890 Mi tiam tuj reale atingi tiun studenta nomo de preciziganta 46 00:02:14,890 --> 00:02:17,290 studentoj heligas i. 47 00:02:17,290 --> 00:02:21,550 En aliaj vortoj mi volas la i-a student en la tabelo nomata studentoj, sed nun 48 00:02:21,550 --> 00:02:25,340 Mi deziras ricevi en tiu i-a studenta nomon, kaj fari tion, mi tuj uzos 49 00:02:25,340 --> 00:02:30,160 La. operatoro, la celo akiri ĉe specifa kampo ene de la struct. 50 00:02:30,160 --> 00:02:37,100 Do mi specifi studentoj heligas i. Nomo gets la reveno valoro de GetString (). 51 00:02:37,100 --> 00:02:40,310 Dume, mi tuj presi io simila, dirante studento 52 00:02:40,310 --> 00:02:45,410 domo, kaj nun mi iras al precizigi ke la i-a lernantoj domo kampo 53 00:02:45,410 --> 00:02:49,480 ricevos la reveno valoro de alia alvoko al GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Nun ni faru ion kun tiuj tri studentoj 'nomoj kaj domoj, 55 00:02:52,350 --> 00:02:56,230 iu simpla kiel impreso ĉiun el en frazo. 56 00:02:56,230 --> 00:03:07,580 por int i get 0, cetere mi estas malpli ol studentoj, i + +, printf "% s estas en% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", kaj nun lasu min konekti la valoroj de tiuj du kampoj, 58 00:03:12,600 --> 00:03:19,055 studentoj heligas i. nomo, komo, studentoj heligas i. domo, proksime 59 00:03:19,055 --> 00:03:21,290 paren, punktokomo. 60 00:03:21,290 --> 00:03:23,020 >> Kaj nun mi bezonas fari alia afero. 61 00:03:23,020 --> 00:03:26,600 Ĉe la malsupro de tiu dosiero, mi bezonas liberigi la memoron kiu estis asignitaj 62 00:03:26,600 --> 00:03:30,290 malantaux la scenoj de GetSring (), kiu kompreneble nomas malloc, celo 63 00:03:30,290 --> 00:03:32,500 rezervi memoron por la kordoj la uzanto tajpas. 64 00:03:32,500 --> 00:03:35,720 Sed tio al estas simpla. 65 00:03:35,720 --> 00:03:42,610 por int i get 0, i estas malpli ol studentoj, i + +, kaj interne de la korpo de 66 00:03:42,610 --> 00:03:48,670 ĉi por buklo, mi simple tuj provizi liberan studentoj krampo i. nomo, 67 00:03:48,670 --> 00:03:52,300 kaj libera studentoj heligas i. domo. 68 00:03:52,300 --> 00:03:55,620 >> Nun, ni klare uzis tri por masxojn en tiu programo, kiam vere mi 69 00:03:55,620 --> 00:03:58,800 Povus esti simple uzi unu, sed tio estas nur por pruvo de sake, por ke 70 00:03:58,800 --> 00:04:02,850 ni povas specifi en tri distingaj paŝas kio ekzakte ni faras. 71 00:04:02,850 --> 00:04:06,120 Ni unue prenanta nomon kaj regxan domon por ĉiu el la lernantoj, ni do 72 00:04:06,120 --> 00:04:08,900 presi ekstermi la nomon kaj la domon por ĉiu el la tri studentojn, kaj 73 00:04:08,900 --> 00:04:11,910 tiam ni tuj liberigi la memoron uzata de ĉiu de la lernantoj. 74 00:04:11,910 --> 00:04:15,310 Sed certe ni povus jam kombini tiun en unu pli granda por buklo. 75 00:04:15,310 --> 00:04:18,650 >> Ni nun savu, kompili, kaj kuri ĉi programo. 76 00:04:18,650 --> 00:04:26,850 fari structs 0. / structs 0, studento nomumi, ni provizas al David, li devos vivi 77 00:04:26,850 --> 00:04:31,580 en Mather Domo, studenta nomo, ni diru Lauren, ŝi devos vivi en Leverett 78 00:04:31,580 --> 00:04:36,590 Domo, studenta nomo, Rob, li tuj vivi en Kirkland Domo. 79 00:04:36,590 --> 00:04:39,440 Kaj efektive David estas en Mather, Lauren estas en Leverett, 80 00:04:39,440 --> 00:04:40,810 kaj Rob estas en Kirkland. 81 00:04:40,810 --> 00:04:43,425