1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Bölmə 4 - Daha Rahat] 2 00:00:02,520 --> 00:00:04,850 [Rob Bowden - Harvard Universiteti] 3 00:00:04,850 --> 00:00:07,370 [Bu CS50 edir. - CS50.TV] 4 00:00:08,920 --> 00:00:13,350 Uşaqlar olduğunu bilmirdim halda biz, bir viktorina sabah var. 5 00:00:14,810 --> 00:00:20,970 Bu sinif görüldü ola bilər və ya sinif görüldü olmalıdır hər şey əsasən var. 6 00:00:20,970 --> 00:00:26,360 Yəni onlar bir çox son mövzu olmalarına baxmayaraq göstəricilərinə daxildir. 7 00:00:26,360 --> 00:00:29,860 Siz ən azı onların yüksək səviyyədə başa düşməlidir. 8 00:00:29,860 --> 00:00:34,760 Siz viktorina üçün anlamaq lazımdır sinif üzərində getdi ki, bir şey. 9 00:00:34,760 --> 00:00:37,320 Əgər siz onları sualınız varsa Belə ki, indi onlara verə bilərsiniz. 10 00:00:37,320 --> 00:00:43,280 Uşaqlar sual yerləşir Amma bu, tələbə-nun çox sessiyası olacaq 11 00:00:43,280 --> 00:00:45,060 belə ümid insanlar sual var. 12 00:00:45,060 --> 00:00:48,020 Hər kəs sualınız varmı? 13 00:00:49,770 --> 00:00:52,090 Bəli. >> [Tələbə] Siz göstəricilər üzərində yenidən getmək edə bilərəmmi? 14 00:00:52,090 --> 00:00:54,350 Mən göstəricilərinə artıq getmək lazımdır. 15 00:00:54,350 --> 00:00:59,180 Sizin dəyişənlərin bütün mütləq yaddaş yaşayır 16 00:00:59,180 --> 00:01:04,450 lakin adətən bu barədə narahat olmayın və yalnız x + 2 və y + 3 demək 17 00:01:04,450 --> 00:01:07,080 və compiler şeyi sizin üçün yaşadığı həyata rəqəm olacaq. 18 00:01:07,080 --> 00:01:12,990 Sonra indi aydın o yaddaş ünvanları kullanıyorsanız göstəricilər ilə məşğul olursunuz. 19 00:01:12,990 --> 00:01:19,800 Belə bir dəyişən yalnız heç bir zaman bir ünvan yaşayacaqdır. 20 00:01:19,800 --> 00:01:24,040 Biz bir pointer bəyan etmək istəyirsinizsə, nə növü kimi baxmaq edir? 21 00:01:24,040 --> 00:01:26,210 >> Mən bir pointer p bəyan etmək istəyirəm. Növü necə görünür? 22 00:01:26,210 --> 00:01:33,530 [Tələbə] int * p. >> Bəli. Belə ki, int * p. 23 00:01:33,530 --> 00:01:38,030 Və nasıl x qeyd edə bilərəm? >> [Tələbə] Ampersand. 24 00:01:40,540 --> 00:01:45,300 [Bowden] Belə işareti sözün operator ünvan adlanır. 25 00:01:45,300 --> 00:01:50,460 Mən demək və zaman x bu dəyişən x xatirəsinə ünvan əldə edir. 26 00:01:50,460 --> 00:01:56,790 Belə ki, indi mən göstərici p var, hər yerdə mənim kodu I * p istifadə edə bilərsiniz 27 00:01:56,790 --> 00:02:02,960 və ya x istifadə edə bilər və eyni şey olacaq. 28 00:02:02,960 --> 00:02:09,520 (* P). Bu nə edir? Ki, ulduz nə deməkdir? 29 00:02:09,520 --> 00:02:13,120 [Tələbə] Bu nöqtədə bir dəyəri deməkdir. >> Bəli. 30 00:02:13,120 --> 00:02:17,590 Biz baxmaq Belə ki, bu diaqramlardan çıxartmaq üçün çox faydalı ola bilər 31 00:02:17,590 --> 00:02:22,230 bu dəyər 4 üçün baş verən x yaddaş bir az qutusu, olduğu 32 00:02:22,230 --> 00:02:25,980 sonra biz, p üçün yaddaş kiçik bir qutu var 33 00:02:25,980 --> 00:02:31,590 və belə x üçün p bal, biz p x üçün arrow çəkmək. 34 00:02:31,590 --> 00:02:40,270 Beləliklə, biz deyəndə * p biz p olduğunu qutusu getmək deyərək edirik. 35 00:02:40,270 --> 00:02:46,480 Star arrow edin və sonra siz orada ki qutusuna istəyirəm nə. 36 00:02:46,480 --> 00:03:01,090 Belə ki, I * p = 7 demək olar; və x və 7 dəyişiklik olduğunu qutusu gedəcək. 37 00:03:01,090 --> 00:03:13,540 Və ya demək olar int z = * p * 2; çaşdırıcı ki, bu ulduz, star, çünki. 38 00:03:13,540 --> 00:03:19,230 Bir ulduz p dereferencing ki, digər ulduz 2 vurulması olunur. 39 00:03:19,230 --> 00:03:26,780 Mən həmçinin x ilə * p əvəz edə bilərsiniz. 40 00:03:26,780 --> 00:03:29,430 Siz eyni şəkildə istifadə edə bilərsiniz. 41 00:03:29,430 --> 00:03:38,000 Və sonra mən tamamilə yeni bir şey p nöqtəsi ola bilər. 42 00:03:38,000 --> 00:03:42,190 Mən demək olar p = &z; 43 00:03:42,190 --> 00:03:44,940 İndi x artıq bal P o z göstərir. 44 00:03:44,940 --> 00:03:50,510 Mən * p bunu heç vaxt z bunu kimi eyni. 45 00:03:50,510 --> 00:03:56,170 Biz funksiyaları nəzərə almaq başlamaq bir dəfə bu barədə faydalı bir şey. 46 00:03:56,170 --> 00:03:59,790 >> Bu bir şey ki, bal bir pointer elan yararsız növü var 47 00:03:59,790 --> 00:04:03,140 və sonra yalnız dereferencing edirik 48 00:04:03,140 --> 00:04:06,060 siz başlamaq üçün orijinal dəyişən istifadə edə bilər. 49 00:04:06,060 --> 00:04:18,190 Lakin funksiyaları nəzərə almaq zaman - belə ki, biz bir funksiyası, int foo var deyək 50 00:04:18,190 --> 00:04:32,810 bir göstərici edir və yalnız * p = 6 edir; 51 00:04:32,810 --> 00:04:39,990 Biz mübadilə ilə əvvəl gördüm kimi, bir effektiv mübadilə və ayrı-ayrı funksiyası edə bilməz 52 00:04:39,990 --> 00:04:45,180 C hər şeyi həmişə dəyər keçən çünki yalnız integers keçərək. 53 00:04:45,180 --> 00:04:48,360 Siz göstəricilər keçən bile zaman dəyəri ilə keçən edirik. 54 00:04:48,360 --> 00:04:51,940 Bu, yalnız həmin dəyərlərin yaddaş ünvanları ki, baş verir. 55 00:04:51,940 --> 00:05:00,770 Beləliklə, mən demək foo (p); mən funksiyası foo daxil göstərici keçən alıram 56 00:05:00,770 --> 00:05:03,910 və sonra foo * p = 6 edir; 57 00:05:03,910 --> 00:05:08,600 Daxili ki, funksiyası Beləliklə, * p, hələ x bərabərdir 58 00:05:08,600 --> 00:05:12,720 bu funksiya ərzində scoped deyil, çünki ancaq funksiyası daxilində x istifadə edə bilməz. 59 00:05:12,720 --> 00:05:19,510 Belə * p = 6 başqa bir funksiya bir yerli dəyişən edə bilərsiniz yeganə yoludur. 60 00:05:19,510 --> 00:05:23,600 Və ya, yaxşı, göstəricilər başqa bir funksiya bir yerli dəyişən gedə bilərsiniz yalnız bir yoldur. 61 00:05:23,600 --> 00:05:31,600 [Tələbə] edək bir pointer qayıtmaq istədiyini deyirlər. Necə dəqiq ki etməliyəm? 62 00:05:31,600 --> 00:05:44,270 [Bowden] int y = 3 kimi bir şey kimi bir pointer qayıt; qaytarılması və y? >> [Tələbə] Bəli. 63 00:05:44,270 --> 00:05:48,480 [Bowden] Okay. Bunu heç vaxt. Bu pis. 64 00:05:48,480 --> 00:05:59,480 Mən bu məruzə slaydlar gördüm edirəm yaddaş bu bütün diaqram görən açılmış 65 00:05:59,480 --> 00:06:02,880 Ü qədər burada yaddaş ünvan 0 var 66 00:06:02,880 --> 00:06:09,550 və aşağı burada, 32 yaddaş ünvan 4 gigs ya 2 var. 67 00:06:09,550 --> 00:06:15,120 Beləliklə, bəzi məhsulları və bəzi şeylər var və sonra sizin yığını var 68 00:06:15,120 --> 00:06:21,780 və sizə yalnız böyüyən, öyrənmək açılmış olan yığın, var. 69 00:06:21,780 --> 00:06:24,390 [Tələbə] yığını yuxarıda yığın deyilmi? 70 00:06:24,390 --> 00:06:27,760 >> Bəli. Bu yığın üst, bu deyil? >> [Tələbə] Bəli, o üst 0 qoydu. 71 00:06:27,760 --> 00:06:30,320 [Tələbə] Oh, o, üst 0 qoydu. >> [Tələbə] Oh, tamam. 72 00:06:30,320 --> 00:06:36,060 Disclaimer: Yerdə CS50 ilə belə görmək olacaq. >> [Tələbə] Okay. 73 00:06:36,060 --> 00:06:40,290 Bu, sadəcə ki, siz ilk borular gördükdə zaman 74 00:06:40,290 --> 00:06:45,000 Siz bir-birinə üst şeyi yığma hesab bir yığın hesab zaman istəyirəm. 75 00:06:45,000 --> 00:06:50,810 Beləliklə, biz yığını bir yığın zamanki kimi artır belə ətrafında bu flip edirlər 76 00:06:50,810 --> 00:06:55,940 əvəzinə yığını aşağı asma. >> [Tələbə] olsa vaxt texniki, çox böyümək edirsiniz? 77 00:06:55,940 --> 00:07:01,100 Bu böyümək sizə demək nə asılıdır. 78 00:07:01,100 --> 00:07:04,010 Yığını və yığın həmişə əks istiqamətdə inkişaf edir. 79 00:07:04,010 --> 00:07:09,420 A yığını həmişə böyüyür ki mənada qədər artır 80 00:07:09,420 --> 00:07:12,940 ali yaddaş ünvanları və yığın aşağı artır qarşı 81 00:07:12,940 --> 00:07:17,260 ki, bu, aşağı yaddaş ünvanları qarşı artan. 82 00:07:17,260 --> 00:07:20,250 Belə ki, yüksək 0 və aşağı yüksək yaddaş ünvanları edir. 83 00:07:20,250 --> 00:07:26,390 Onlar yalnız istiqamətləri qarşı artan edirik də. 84 00:07:26,390 --> 00:07:29,230 [Tələbə] Siz altındakı yığını sürüb, çünki yalnız o deməkdir 85 00:07:29,230 --> 00:07:33,640 bu yığını bir yığın üst başlamaq çünki daha asan görünür, çünki 86 00:07:33,640 --> 00:07:37,520 yığın də özü üst belə that's var - >> Bəli. 87 00:07:37,520 --> 00:07:44,960 Siz həmçinin yığını daha çox böyüyür və böyük kimi yığın hesab, lakin. 88 00:07:44,960 --> 00:07:50,280 Belə ki, biz yığını cür böyüyən göstərmək istəyirəm ki biridir. 89 00:07:50,280 --> 00:07:55,390 Amma hər yerdə başqa baxmaq üst ünvan 0 göstərmək niyyətindədir 90 00:07:55,390 --> 00:07:59,590 və altındakı ən yüksək yaddaş ünvanı, bu yaddaş sizin adi rəyidir. 91 00:07:59,590 --> 00:08:02,100 >> Bir sual var? 92 00:08:02,100 --> 00:08:04,270 [Tələbə] bizə yığın haqqında daha demək olarmı? 93 00:08:04,270 --> 00:08:06,180 Bəli. Mən ikinci olduğu almaq lazımdır. 94 00:08:06,180 --> 00:08:12,220 Birincisi, & y qaytarılması niyə geri gedir, pis şey 95 00:08:12,220 --> 00:08:18,470 yığını sizi funksiyaları bütün olan yığını çərçivəsində bir dəstə var 96 00:08:18,470 --> 00:08:20,460 adlanan edilmişdir. 97 00:08:20,460 --> 00:08:27,990 Əvvəlki şeylər məhəl Belə ki, yığın üst həmişə əsas funksiyası olacaq 98 00:08:27,990 --> 00:08:33,090 ki adlanan olan ilk funksiyası var-ci ildən. 99 00:08:33,090 --> 00:08:37,130 Və sonra başqa bir funksiyası zəng zaman yığın aşağı artmaqda davam edir. 100 00:08:37,130 --> 00:08:41,640 Mən bəzi funksiyası, foo zəng və öz yığını çərçivəsində əldə əgər, 101 00:08:41,640 --> 00:08:47,280 bəzi funksiyası, bar zəng edə bilərsiniz; öz yığını çərçivəsində olur. 102 00:08:47,280 --> 00:08:49,840 Və bar recursive ola bilər və özü zəng edə 103 00:08:49,840 --> 00:08:54,150 və belə bar ikinci zəng öz yığını çərçivəsində almaq üçün gedir. 104 00:08:54,150 --> 00:08:58,880 Və bu yığını çərçivəsində gedir nə yerli dəyişənlərin bütün 105 00:08:58,880 --> 00:09:03,450 və funksiyası dəlilləri bütün - 106 00:09:03,450 --> 00:09:08,730 Bu funksiya yerli scoped ki, hər hansı bir şeyi bu yığını çərçivəsində gedin. 107 00:09:08,730 --> 00:09:21,520 Belə ki, mən bar kimi bir funksiyası olduğunu bildirib zaman deməkdir 108 00:09:21,520 --> 00:09:29,270 Mən yalnız bir tam bəyan və sonra tam bir pointer qayıtmaq üçün gedirəm. 109 00:09:29,270 --> 00:09:33,790 Belə y yerləşir yaşayır? 110 00:09:33,790 --> 00:09:36,900 [Tələbə] y bar yaşayır. >> [Bowden] Bəli. 111 00:09:36,900 --> 00:09:45,010 Somewhere yaddaş bu kiçik meydanında bu y bir littler kvadrat edir. 112 00:09:45,010 --> 00:09:53,370 I qayıtmaq & y, mən yaddaş bu kiçik blok bir pointer qaytarılması alıram. 113 00:09:53,370 --> 00:09:58,400 Amma sonra bir funksiyası qaytarır, onun yığını çərçivəsində yığını off atdı olur. 114 00:10:01,050 --> 00:10:03,530 Bu yığını deyirlər niyə və ki. 115 00:10:03,530 --> 00:10:06,570 Ki, nə əgər O, yığını data strukturu kimi. 116 00:10:06,570 --> 00:10:11,580 Və ya hətta qablar bir yığın kimi, həmişə nümunə 117 00:10:11,580 --> 00:10:16,060 əsas alt getmək gedir, sonra zəng ilk funksiyası ki, üst getmək niyyətindədir 118 00:10:16,060 --> 00:10:20,400 zəng edilmiş bütün funksiyaları geri qədər və əsas geri ala bilmir 119 00:10:20,400 --> 00:10:22,340 ki, üst yerləşdirilib. 120 00:10:22,340 --> 00:10:28,650 >> Siz əgər [tələbə] Beləliklə & y ki, dəyəri xəbərdarlıq etmədən dəyişiklik etmək məcburiyyətindədir qayıtmaq. 121 00:10:28,650 --> 00:10:31,290 Bəli, it's - >> Bu üzerine ola bilər [tələbə]. >> Bəli. 122 00:10:31,290 --> 00:10:34,660 Cəhd edin və - Bu tamamilə var - 123 00:10:34,660 --> 00:10:38,040 Bir göstərici qaytarılması, çünki Bu, bir int * bar olacaq 124 00:10:38,040 --> 00:10:41,310 belə, onun qaytarılması növü int * edir. 125 00:10:41,310 --> 00:10:46,500 Bu funksiya qaytarılması dəyəri istifadə etməyə cəhd edərsə, bu, müəyyən davranış deyil 126 00:10:46,500 --> 00:10:51,770 ki, göstərici pis yaddaş işarə edir. >> [Tələbə] Okay. 127 00:10:51,770 --> 00:11:01,250 Bəs əgər, məsələn, elan int * y = malloc (sizeof (int))? 128 00:11:01,250 --> 00:11:03,740 Bu daha yaxşıdır. Bəli. 129 00:11:03,740 --> 00:11:07,730 [Tələbə] biz zibil bin şeyi sürükleyin Biz necə danışıb 130 00:11:07,730 --> 00:11:11,750 onlar həqiqətən silinə deyilik, biz yalnız onların göstəricilərinə itirirlər. 131 00:11:11,750 --> 00:11:15,550 Belə ki, bu halda biz həqiqətən yaddaşında hələ dəyəri silmək və ya yoxdur? 132 00:11:15,550 --> 00:11:19,130 Çox hissəsi üçün, hələ də olacaq. 133 00:11:19,130 --> 00:11:24,220 Amma qoy biz bəzi digər funksiyası, baz zəng nə deyirlər. 134 00:11:24,220 --> 00:11:28,990 Baz burada öz yığını çərçivəsində almaq üçün gedir. 135 00:11:28,990 --> 00:11:31,470 O, bu məhsulları bütün yadda olacaq 136 00:11:31,470 --> 00:11:34,180 sonra sonra, əvvəl var ki pointer cəhd və istifadə 137 00:11:34,180 --> 00:11:35,570 eyni dəyər olacaq deyil. 138 00:11:35,570 --> 00:11:38,150 Bu funksiya baz adlı çünki yalnız dəyişib olacaq. 139 00:11:38,150 --> 00:11:43,080 [Tələbə] Amma biz hələ 3 almaq deyil? 140 00:11:43,080 --> 00:11:44,990 [Bowden] bütün ehtimalı, Siz edərdim. 141 00:11:44,990 --> 00:11:49,670 Amma siz ki, etibar edə bilməz. C yalnız müəyyən davranış deyir. 142 00:11:49,670 --> 00:11:51,920 >> [Tələbə] Oh, bunu edir. Okay. 143 00:11:51,920 --> 00:11:58,190 Malloc istifadə gəlir harada Belə bir göstərici qayıtmaq istədiyiniz zaman, bu. 144 00:12:00,930 --> 00:12:15,960 Mən, həqiqətən, yazıyoruz yalnız malloc qayıtmaq (3 * sizeof (int)). 145 00:12:17,360 --> 00:12:24,050 Biz ikinci daha malloc artıq getmək lazımdır, lakin malloc ideyası sizin yerli dəyişənlərin bütün 146 00:12:24,050 --> 00:12:26,760 həmişə yığını getmək. 147 00:12:26,760 --> 00:12:31,570 Malloced ki, bir şey yığın gedir və bu, əbədi və daim yığın olacaq 148 00:12:31,570 --> 00:12:34,490 siz açıq-aydın onu azad qədər. 149 00:12:34,490 --> 00:12:42,130 Belə ki, bu zaman malloc bir şey, bu funksiya yekunları sonra yaşamaq olacaq deməkdir. 150 00:12:42,130 --> 00:12:46,800 Proqram çalışan dayanır sonra [tələbə] Əgər yaşamaq olacaq? >> No 151 00:12:46,800 --> 00:12:53,180 OK, belə ki, bu proqram bütün yol axar görülən qədər orada olacaq. >> Bəli. 152 00:12:53,180 --> 00:12:57,510 Biz proqram çalışan dayanır ne olur detalları üzərində bilərsiniz. 153 00:12:57,510 --> 00:13:02,150 Siz mənə xatırlatmaq lazımdır bilər, lakin tamamilə ayrı bir şeydir. 154 00:13:02,150 --> 00:13:04,190 [Tələbə] Belə malloc bir pointer yaradır? >> Bəli. 155 00:13:04,190 --> 00:13:13,030 Malloc - >> [tələbə] Mən malloc bir pointer istifadə edə bilərsiniz yaddaş blokunun təyin edirəm. 156 00:13:15,400 --> 00:13:19,610 [Bowden] Mən daha diaqram istəyirəm. >> [Tələbə] Beləliklə, bu funksiyası olsa da, işləyir? 157 00:13:19,610 --> 00:13:26,430 [Tələbə] Bəli, malloc istifadə edə bilərsiniz ki, yaddaş blokunun təyin, 158 00:13:26,430 --> 00:13:30,470 və sonra bu yaddaş ilk blokunun ünvan qaytarır. 159 00:13:30,470 --> 00:13:36,750 >> [Bowden] Bəli. Belə ki, zaman malloc, siz yaddaş bəzi məhəllə qənimətçilik edirik 160 00:13:36,750 --> 00:13:38,260 ki, yığın-hazırda var. 161 00:13:38,260 --> 00:13:43,040 Yığın çox kiçik, onda yığın yalnız artmaqda davam edir və bu istiqamətdə artır. 162 00:13:43,040 --> 00:13:44,650 Beləliklə də yığın çox kiçik deyək. 163 00:13:44,650 --> 00:13:49,960 Sonra bir az artır və yalnız artmışdır ki, bu blok bir pointer qayıtmaq haqqında. 164 00:13:49,960 --> 00:13:55,130 Pulsuz stuff, siz yığın daha çox otaq edirik zaman, 165 00:13:55,130 --> 00:14:00,030 belə daha sonra malloc zəng daha azad idi ki, yaddaş yenidən istifadə edə bilərsiniz. 166 00:14:00,030 --> 00:14:09,950 Malloc və pulsuz haqqında əhəmiyyətli şey tam nəzarət verir ki, 167 00:14:09,950 --> 00:14:12,700 Bu yaddaş bloklarının ömrü ərzində. 168 00:14:12,700 --> 00:14:15,420 Qlobal dəyişənlər həmişə diri var. 169 00:14:15,420 --> 00:14:18,500 Yerli dəyişənlərin onların daxilində yaşayır. 170 00:14:18,500 --> 00:14:22,140 Qısa bir buruq brace keçmiş getmək kimi, yerli dəyişənlərin ölü. 171 00:14:22,140 --> 00:14:28,890 Siz onu diri-diri olmaq üçün istədiyiniz zaman Malloced yaddaş sağdır 172 00:14:28,890 --> 00:14:33,480 siz azad demək zaman və sonra azad edilir. 173 00:14:33,480 --> 00:14:38,420 Bu, həqiqətən, həqiqətən, yaddaş yalnız 3 növ var. 174 00:14:38,420 --> 00:14:41,840 Yığını olan avtomatik yaddaş idarəetmə, var. 175 00:14:41,840 --> 00:14:43,840 Things sizin üçün avtomatik olaraq baş verir. 176 00:14:43,840 --> 00:14:46,910 Siz int x deyəndə, yaddaş int x yerləşir. 177 00:14:46,910 --> 00:14:51,630 X çərçivəsində həyata gedir zaman, yaddaşlı x emalı olunur. 178 00:14:51,630 --> 00:14:54,790 Sonra dinamik yaddaş idarə olan malloc nə deyil, var 179 00:14:54,790 --> 00:14:56,740 kontrol zaman olan. 180 00:14:56,740 --> 00:15:01,290 Siz dinamik yaddaş və ayrılmış lazım deyil zaman qərar. 181 00:15:01,290 --> 00:15:05,050 Və sonra statik var, olan yalnız, əbədi yaşayır deməkdir 182 00:15:05,050 --> 00:15:06,610 olan qlobal dəyişənlər nə edir. 183 00:15:06,610 --> 00:15:10,240 Onlar yaddaşında yalnız həmişə istəyirik. 184 00:15:10,960 --> 00:15:12,760 >> Suallar? 185 00:15:14,490 --> 00:15:17,230 [Tələbə] yalnız qıvrım aşırma istifadə edərək, bir blok müəyyən edə 186 00:15:17,230 --> 00:15:21,220 lakin olmayan bir bəyanat və ya kimi bir müddət bəyanat və ya bir şey varsa? 187 00:15:21,220 --> 00:15:29,130 Siz bir funksiyası kimi bir blok müəyyən edə bilərsiniz, lakin çox qıvrım aşırma var. 188 00:15:29,130 --> 00:15:32,100 [Tələbə] Beləliklə, siz yalnız kodu qıvrım aşırma bir təsadüfi cüt kimi ola bilməz 189 00:15:32,100 --> 00:15:35,680 yerli dəyişənlər var ki? >> Bəli, edə bilər. 190 00:15:35,680 --> 00:15:45,900 Int bar daxilində biz {int y = 3;} ola bilər. 191 00:15:45,900 --> 00:15:48,440 Yəni burada ehtimal edir. 192 00:15:48,440 --> 00:15:52,450 Amma tamamilə int y daxilində müəyyən edir. 193 00:15:52,450 --> 00:15:57,320 Ikinci buruq brace sonra, y artıq istifadə edilə bilməz. 194 00:15:57,910 --> 00:16:00,630 Siz də, bunu demək olar ki, heç vaxt. 195 00:16:02,940 --> 00:16:07,370 , Proqram başa zaman nə geri alınması 196 00:16:07,370 --> 00:16:18,760 biz yalnız şeyi daha asan etmək üçün verir ki, bir misconception / yarım yalan cür var. 197 00:16:18,760 --> 00:16:24,410 Biz sizə ki, siz yaddaş ayrılması zaman 198 00:16:24,410 --> 00:16:29,860 ki, dəyişən üçün RAM bəzi yığın ayrılması edirik. 199 00:16:29,860 --> 00:16:34,190 Amma həqiqətən birbaşa proqramları heç RAM aid deyilik. 200 00:16:34,190 --> 00:16:37,490 Siz düşünüyorsanız, necə çəkdi - 201 00:16:37,490 --> 00:16:44,330 Siz gdb vasitəsilə getmək əgər həqiqətən, eyni şey görəcəksiniz. 202 00:16:51,120 --> 00:16:57,590 Asılı olmayaraq sizin proqram və ya yürütüyorsanız hansı proqram çalıştırmak neçə dəfə 203 00:16:57,590 --> 00:16:59,950 yığını həmişə başlamaq niyyətindədir - 204 00:16:59,950 --> 00:17:06,510 həmişə ünvan oxbffff bir şey ətrafında dəyişənlərin görmək olacaq. 205 00:17:06,510 --> 00:17:09,470 Bu bölgədə bir yerdə adətən var. 206 00:17:09,470 --> 00:17:18,760 Amma necə 2 proqramları bəlkə eyni xatirəsinə göstəricilərinə ola bilər? 207 00:17:20,640 --> 00:17:27,650 [Tələbə] oxbfff RAM haqqında ehtimal yerləşir bəzi özbaşına təyin var 208 00:17:27,650 --> 00:17:31,320 əslində funksiyası adlanır zaman asılı olaraq müxtəlif yerlərdə ola bilər. 209 00:17:31,320 --> 00:17:35,920 Bəli. Müddəti virtual yaddaş. 210 00:17:35,920 --> 00:17:42,250 Bu ideya ki, hər bir proses, bilgisayarınızda çalışan hər bir proqram 211 00:17:42,250 --> 00:17:49,450 öz var - tamamilə müstəqil ünvan space - Gəlin 32 bit daşımır. 212 00:17:49,450 --> 00:17:51,590 Bu ünvan sahibidir. 213 00:17:51,590 --> 00:17:56,220 Bu istifadə etmək üçün öz tamamilə müstəqil 4 gigabayt var. 214 00:17:56,220 --> 00:18:02,220 >> Siz eyni zamanda 2 proqramları çalıştırmak Belə ki, bu proqram özünü 4 gigabayt görür 215 00:18:02,220 --> 00:18:04,870 Bu proqram, özünü 4 gigabayt görür 216 00:18:04,870 --> 00:18:07,720 və bu proqram üçün dereference bir pointer mümkün deyil 217 00:18:07,720 --> 00:18:10,920 və bu proqram yaddaş ilə son. 218 00:18:10,920 --> 00:18:18,200 Və nə virtual yaddaş bir proseslərin ünvan kosmik bir harita edir 219 00:18:18,200 --> 00:18:20,470 RAM faktiki şeylər. 220 00:18:20,470 --> 00:18:22,940 Belə ki, bilirik ki, sizin əməliyyat sistemi var, 221 00:18:22,940 --> 00:18:28,080 hey, bu oğlan dereferences göstərici oxbfff ki, həqiqətən deməkdir 222 00:18:28,080 --> 00:18:31,040 o RAM byte 1000, istəyir ki, 223 00:18:31,040 --> 00:18:38,150 halbuki bu proqram dereferences oxbfff, əgər o, həqiqətən RAM byte 10000 istəyir. 224 00:18:38,150 --> 00:18:41,590 Onlar özbaşına qədər ayrı ola bilər. 225 00:18:41,590 --> 00:18:48,730 Bu bir proseslərin ünvan məkanının şeyi hətta doğrudur. 226 00:18:48,730 --> 00:18:54,770 Belə ki, kimi özünü bütün 4 gigabayt görür, amma demək edək - 227 00:18:54,770 --> 00:18:57,290 [Tələbə] hər bir proses mu - 228 00:18:57,290 --> 00:19:01,350 Gəlin siz RAM yalnız 4 gigabayt ilə kompüter demək. 229 00:19:01,350 --> 00:19:06,430 Hər bir proses bütün 4 gigabayt görür? >> Bəli. 230 00:19:06,430 --> 00:19:13,060 Amma görür 4 gigabayt bir yalandır. 231 00:19:13,060 --> 00:19:20,460 Bu, sadəcə onu hər hansı digər proses var bilmir, çünki bütün bu yaddaş var düşünür edir. 232 00:19:20,460 --> 00:19:28,140 Həqiqətən ehtiyacı yalnız çox yaddaş istifadə edir. 233 00:19:28,140 --> 00:19:32,340 Əməliyyat sistemi bu prosesi RAM vermək niyyətində deyil 234 00:19:32,340 --> 00:19:35,750 bu bütün regionda hər hansı bir yaddaş istifadə əgər. 235 00:19:35,750 --> 00:19:39,300 Bu ki, region üçün yaddaş verəcəyəm deyil. 236 00:19:39,300 --> 00:19:54,780 Amma fikir ki, - mən hesab çalışıram - Mən analogiya hesab edə bilməz. 237 00:19:54,780 --> 00:19:56,780 Analogiya çətindir. 238 00:19:57,740 --> 00:20:02,700 Virtual yaddaş məsələlərdən biri və ya həll edir hər bir 239 00:20:02,700 --> 00:20:06,810 proseslər bir-birinə tamamilə xəbərsiz olsun. 240 00:20:06,810 --> 00:20:12,140 Və siz hər hansı bir proqram yazmaq olar ki, yalnız dereferences heç bir göstərici, 241 00:20:12,140 --> 00:20:19,340 yalnız * (ox1234) deyir ki, bir proqram yazmaq istəyirəm 242 00:20:19,340 --> 00:20:22,890 və ki dereferencing yaddaş ünvan 1234. 243 00:20:22,890 --> 00:20:28,870 >> Amma sonra nə 1234 vasitəsilə tərcümə əməliyyat sistemi var. 244 00:20:28,870 --> 00:20:33,960 Belə ki, əgər 1234, bu proses üçün etibarlı yaddaş ünvan olur 245 00:20:33,960 --> 00:20:38,800 bu yığını və ya bir şey var kimi, bu yaddaş ünvan dəyəri qayıdacaq 246 00:20:38,800 --> 00:20:41,960 qədər proses bilir. 247 00:20:41,960 --> 00:20:47,520 Bu torpaq olur kimi Lakin, əgər 1234, cari mail deyil 248 00:20:47,520 --> 00:20:52,910 yığını kənarda ki, burada yaddaş bəzi parça və yığın kənarda 249 00:20:52,910 --> 00:20:57,200 və həqiqətən segfaults kimi şeylər almaq zaman ki, sonra ki istifadə etməyib 250 00:20:57,200 --> 00:21:00,260 sizə aid edilməməlidir yaddaş aid etdiyiniz çünki. 251 00:21:07,180 --> 00:21:09,340 Bu da doğru deyil - 252 00:21:09,340 --> 00:21:15,440 A 32-bit sistemi 32 bit bir yaddaş ünvan müəyyən etmək üçün 32 bit var deməkdir. 253 00:21:15,440 --> 00:21:22,970 Və ya 4 bayt - göstəricilərinə 8 bayt niyə 32 bit 8 bayt çünki bu. 254 00:21:22,970 --> 00:21:25,250 Pointers 4 bayt var. 255 00:21:25,250 --> 00:21:33,680 Beləliklə, siz oxbfffff kimi bir pointer görəndə ki, - 256 00:21:33,680 --> 00:21:40,080 Hər hansı bir proqram çərçivəsində yalnız hər hansı bir ixtiyari pointer tikintisi bilər 257 00:21:40,080 --> 00:21:46,330 yerdə ox0 olan öküz 8 f's üçün - ffffffff. 258 00:21:46,330 --> 00:21:49,180 [Tələbə] Əgər onlar 4 bayt edirik demədimmi? >> Bəli. 259 00:21:49,180 --> 00:21:52,730 [Tələbə] Sonra hər bayt olacaq - >> [Bowden] hexadecimal. 260 00:21:52,730 --> 00:21:59,360 Hexadecimal - 5, 6, 7, 8. Göstəricilərinə Beləliklə, siz həmişə hexadecimal görmək olacaq. 261 00:21:59,360 --> 00:22:01,710 Bu göstəricilər təsnif necə yalnız var. 262 00:22:01,710 --> 00:22:05,240 Hexadecimal hər 2 rəqəm 1 byte edir. 263 00:22:05,240 --> 00:22:09,600 Belə ki, 4 bayt 8 hexadecimal rəqəm olmalıdır olacaq. 264 00:22:09,600 --> 00:22:14,190 Belə ki, bir 32-bit sistem hər bir pointer, 4 bayt olacaq 265 00:22:14,190 --> 00:22:18,550 sizin prosesində hər hansı bir ixtiyari 4 bayt tikintisi o deməkdir ki, 266 00:22:18,550 --> 00:22:20,550 və bu, bir pointer həyata 267 00:22:20,550 --> 00:22:32,730 olan qədər onu xəbərdar kimi, bu, yaddaş, 32 bayt bütün 2 müraciət edə bilərsiniz. 268 00:22:32,730 --> 00:22:34,760 Həqiqətən ki, çıxışı yoxdur baxmayaraq, 269 00:22:34,760 --> 00:22:40,190 kompüter yalnız 512 megabayt olsa da, bu, çox yaddaş var düşünür. 270 00:22:40,190 --> 00:22:44,930 Və əməliyyat sistemi yalnız siz həqiqətən ehtiyac nə ayıracaq ki, kifayət qədər ağıllı deyil. 271 00:22:44,930 --> 00:22:49,630 4 gigs: Bu yalnız, oh, bir yeni prosesi getmir. 272 00:22:49,630 --> 00:22:51,930 >> Bəli. >> [Tələbə] Bu öküz nə deməkdir? Niyə yazmaq edirsiniz? 273 00:22:51,930 --> 00:22:54,980 Bu yalnız hexadecimal üçün rəmzi var. 274 00:22:54,980 --> 00:22:59,590 Siz öküz ilə bir sıra start gördükdə, ardıcıl şeyi hexadecimal var. 275 00:23:01,930 --> 00:23:05,760 [Tələbə] Siz proqram başa zaman nə haqqında izah edilmişdir. >> Bəli. 276 00:23:05,760 --> 00:23:09,480 Nə proqram başa olur əməliyyat sistemi 277 00:23:09,480 --> 00:23:13,600 yalnız erases bu URL malikdir və bu ki mappings. 278 00:23:13,600 --> 00:23:17,770 Əməliyyat sistemi yalnız istifadə başqa bir proqram üçün yaddaş verə bilər. 279 00:23:17,770 --> 00:23:19,490 [Tələbə] Okay. 280 00:23:19,490 --> 00:23:24,800 Beləliklə, siz yığın və ya yığını və ya qlobal dəyişənlər və ya bir şey haqqında bir şey ayıra zaman, 281 00:23:24,800 --> 00:23:27,010 onlar yalnız qısa müddətdə proqram sona kimi yox 282 00:23:27,010 --> 00:23:32,120 əməliyyat sistemi hər hansı digər proses üçün yaddaş vermək pulsuz edir. 283 00:23:32,120 --> 00:23:35,150 [Tələbə] yazılı dəyərləri hələ yəqin ki, var olsa? >> Bəli. 284 00:23:35,150 --> 00:23:37,740 Dəyərləri hələ ehtimal var. 285 00:23:37,740 --> 00:23:41,570 Bu, sadəcə onları əldə etmək çətin olacaq edir. 286 00:23:41,570 --> 00:23:45,230 Bir silinmiş fayl əldə etmək daha onlara almaq üçün daha çətin 287 00:23:45,230 --> 00:23:51,450 və silinmiş fayl cür uzun müddət orada oturur və sabit bir çox böyükdür, çünki. 288 00:23:51,450 --> 00:23:54,120 Belə ki, yaddaş müxtəlif üzerine olacaq 289 00:23:54,120 --> 00:23:58,640 bu fayl olmaq üçün istifadə yaddaş yığın üzerine olur əvvəl. 290 00:23:58,640 --> 00:24:04,520 Amma əsas yaddaş, daha sürətli bir çox vasitəsilə dövrü RAM, 291 00:24:04,520 --> 00:24:08,040 belə ki, çox sürətlə üzerine olacaq. 292 00:24:10,300 --> 00:24:13,340 Bu və ya başqa bir şey Suallar? 293 00:24:13,340 --> 00:24:16,130 [Tələbə] Mən fərqli bir mövzu haqqında suallarınız var. Okay. >> 294 00:24:16,130 --> 00:24:19,060 Hər kəs bu barədə sualınız varmı? 295 00:24:20,170 --> 00:24:23,120 >> Okay. Müxtəlif mövzu. >> [Tələbə] Okay. 296 00:24:23,120 --> 00:24:26,550 Mən təcrübə testlər bəzi keçir edilib 297 00:24:26,550 --> 00:24:30,480 və onlardan biri bu sizeof haqqında söhbət 298 00:24:30,480 --> 00:24:35,630 və dəyəri qaytarır və ya müxtəlif dəyişən növ edir. >> Bəli. 299 00:24:35,630 --> 00:24:45,060 Və int və uzun həm qaytarılması 4, həm onlar, həm də 4 bayt uzun olduğunu bildirib. 300 00:24:45,060 --> 00:24:48,070 Bir int və uzun arasında fərq var, ya da eyni şeydir? 301 00:24:48,070 --> 00:24:50,380 Bəli, bir fərq var. 302 00:24:50,380 --> 00:24:52,960 C standart - 303 00:24:52,960 --> 00:24:54,950 Yəqin ki, mess qədər gedirəm. 304 00:24:54,950 --> 00:24:58,800 C standart yalnız C, C. rəsmi sənədləri nə istəyirəm edir 305 00:24:58,800 --> 00:25:00,340 Bu deyir. 306 00:25:00,340 --> 00:25:08,650 Belə ki, C standart yalnız bir char əbədi və həmişə 1 byte olacaq deyir. 307 00:25:10,470 --> 00:25:19,040 Bundan sonra hər şey - qısa bir zaman yalnız və ya daha çox bir char bərabər olan kimi müəyyən edir. 308 00:25:19,040 --> 00:25:23,010 Bu ciddi daha çox, lakin müsbət ola bilər. 309 00:25:23,010 --> 00:25:31,940 Bir int yalnız və ya daha çox qısa bərabər olan kimi müəyyən edilir. 310 00:25:31,940 --> 00:25:36,210 Və uzun yalnız və ya daha çox bir int bərabər olan kimi müəyyən edilir. 311 00:25:36,210 --> 00:25:41,600 Və uzun uzun və ya daha çox uzun bərabərdir. 312 00:25:41,600 --> 00:25:46,610 Belə ki, C standart müəyyən tək şey hər şey nisbi Siparişinizi edir. 313 00:25:46,610 --> 00:25:54,880 Şeyi almaq yaddaş faktiki məbləği qədər həyata keçirilməsi adətən 314 00:25:54,880 --> 00:25:57,640 lakin bu, olduqca bu nöqtədə müəyyən edir. >> [Tələbə] Okay. 315 00:25:57,640 --> 00:26:02,490 Belə ki, şort həmişə 2 bytes olacaq. 316 00:26:04,920 --> 00:26:09,950 Ints həmişə 4 bayt olacaq. 317 00:26:12,070 --> 00:26:15,340 Uzun longs demək olar ki, həmişə 8 bayt olacaq. 318 00:26:17,990 --> 00:26:23,160 Və siz bir 32-bit və ya 64-bit sistemi kullanıyorsanız asılıdır, longs. 319 00:26:23,160 --> 00:26:27,450 Belə ki, uzun bir sistem növü uyğun gedir. 320 00:26:27,450 --> 00:26:31,920 Siz Aracı kimi bir 32-bit sistemi istifadə edirsinizsə, 4 bayt olacaq. 321 00:26:34,530 --> 00:26:42,570 Siz son kompüter bir çox kimi 64-bit istifadə edirsinizsə, bu, 8 bayt olacaq. 322 00:26:42,570 --> 00:26:45,230 >> Ints demək olar ki, həmişə bu nöqtədə 4 bayt var. 323 00:26:45,230 --> 00:26:47,140 Uzun longs demək olar ki, həmişə 8 bayt var. 324 00:26:47,140 --> 00:26:50,300 Keçmişdə ints yalnız 2 bytes olmaq üçün istifadə. 325 00:26:50,300 --> 00:26:56,840 Amma bu tamamilə daha çox və bərabər bu münasibətlərin bütün cavab fark. 326 00:26:56,840 --> 00:27:01,280 Belə ki, uzun mükəmməl bir tam kimi eyni ölçüdə ola bilər, 327 00:27:01,280 --> 00:27:04,030 və bu da uzun uzun eyni ölçüsü icazə var. 328 00:27:04,030 --> 00:27:11,070 Və yalnız belə sistemlərinin 99.999%, o, bərabər olacaq ki olur 329 00:27:11,070 --> 00:27:15,800 bir int və ya uzun uzun ya. Bu, yalnız 32-bit və ya 64-bit asılıdır. >> [Tələbə] Okay. 330 00:27:15,800 --> 00:27:24,600 Üzüb gedirdi ildə bit baxımından nəzərdə tutulmuş kəsir necə? 331 00:27:24,600 --> 00:27:27,160 Binar kimi istəyirsiniz? >> Bəli. 332 00:27:27,160 --> 00:27:30,570 Siz CS50 ki, bilmək lazım deyil. 333 00:27:30,570 --> 00:27:32,960 Siz hətta 61-ci olduğunu öyrənmək deyil. 334 00:27:32,960 --> 00:27:37,350 Siz hər hansı bir kurs ki, həqiqətən öyrənmək deyil. 335 00:27:37,350 --> 00:27:42,740 Bu yalnız bir təmsil edir. 336 00:27:42,740 --> 00:27:45,440 Mən dəqiq bit ayırmalar unutmayın. 337 00:27:45,440 --> 00:27:53,380 Üzən point ideyası siz təmsil bit müəyyən sayda ayrılması ki - 338 00:27:53,380 --> 00:27:56,550 Ümumiyyətlə, hər şey elmi notation edir. 339 00:27:56,550 --> 00:28:05,600 Beləliklə, siz 1,2345 kimi sayını özü təmsil bit müəyyən sayda ayırırlar. 340 00:28:05,600 --> 00:28:10,200 Mən 5-dən çox rəqəm bir sayı təmsil bilməz. 341 00:28:12,200 --> 00:28:26,300 Bu kimi çalışır ki, Sonra da bit müəyyən sayda ayrılması 342 00:28:26,300 --> 00:28:32,810 ki, siz ola bilər ən böyük göstərici deyil kimi, yalnız müəyyən qədər getmək olar, 343 00:28:32,810 --> 00:28:36,190 və yalnız müəyyən bir eksponent enmək bilər 344 00:28:36,190 --> 00:28:38,770 siz ola bilər ən kiçik eksponent ki, istəyirəm. 345 00:28:38,770 --> 00:28:44,410 >> Mən dəqiq şəkildə bit bu dəyərlərin bütün verilir xatırlamıram 346 00:28:44,410 --> 00:28:47,940 lakin bit sayı müəyyən, 1,2345 həsr olunur 347 00:28:47,940 --> 00:28:50,930 bit başqa müəyyən sayı, eksponent həsr olunur 348 00:28:50,930 --> 00:28:55,670 və müəyyən bir ölçüsü bir eksponent təmsil yalnız mümkündür. 349 00:28:55,670 --> 00:29:01,100 [Tələbə] Və ikiqat? Ki, əlavə uzun float kimi? >> Bəli. 350 00:29:01,100 --> 00:29:07,940 İndi yerine 4 bayt 8 bayt istifadə etdiyiniz başqa bir float kimi eyni şey. 351 00:29:07,940 --> 00:29:11,960 İndi, 9 rəqəm və ya 10 rəqəm istifadə edə bilərsiniz 352 00:29:11,960 --> 00:29:16,630 və bu 300 yerinə 100-ə getmək mümkün olacaq. >> [Tələbə] Okay. 353 00:29:16,630 --> 00:29:21,550 Və üzüb gedirdi də 4 bayt var. >> Bəli. 354 00:29:21,550 --> 00:29:27,520 Bəli, yenə, bu, yəqin ki, ümumi həyata keçirilməsi üzrə ümumi asılıdır 355 00:29:27,520 --> 00:29:30,610 lakin üzüb gedirdi 4 bayt var, ikiqat 8 olunur. 356 00:29:30,610 --> 00:29:33,440 Onlar ikiqat üzüb gedirdi həcmi çünki Çiftler ikiqat deyilir. 357 00:29:33,440 --> 00:29:38,380 [Tələbə] Okay. Və ikiqat iki olunur? >> Yoxdur. 358 00:29:38,380 --> 00:29:43,660 Mən hesab edirəm - uzun longs Bəyəndim >> [tələbə]? >> Bəli. Mən belə düşünmürəm. Bəli. 359 00:29:43,660 --> 00:29:45,950 Keçən il test On [tələbə] əsas funksiyası haqqında bir sual idi 360 00:29:45,950 --> 00:29:49,490 proqram hissəsi olan. 361 00:29:49,490 --> 00:29:52,310 Cavab sizin proqram hissəsi mövcut deyil idi. 362 00:29:52,310 --> 00:29:55,100 Nə vəziyyətdə? Mən gördüm budur. 363 00:29:55,100 --> 00:29:59,090 [Bowden] Görünür - >> [tələbə] nə vəziyyətdə? 364 00:29:59,090 --> 00:30:02,880 Siz problem var? >> [Tələbə] Bəli, Mən mütləq onu qoparmaq bilər. 365 00:30:02,880 --> 00:30:07,910 Bu texniki, olmaq deyil, əsasən bu olacaq. 366 00:30:07,910 --> 00:30:10,030 [Tələbə] Mən fərqli bir il bir gördüm. 367 00:30:10,030 --> 00:30:16,220 Bu doğru və ya yalan kimi olmuşdur: A qüvvədə - >> Oh, bir c faylı.? 368 00:30:16,220 --> 00:30:18,790 . [Tələbə] Hər c faylı olmalıdır - [dəfə danışan hər ikisi - anlaşılmaz] 369 00:30:18,790 --> 00:30:21,120 Okay. Belə ki, ayrı-ayrı deyil. 370 00:30:21,120 --> 00:30:26,800 >> A. C fayl yalnız funksiyaları ehtiva etməlidir. 371 00:30:26,800 --> 00:30:32,400 Siz maşın kodu daxil fayl, ikili, nə olursa olsun, tərtib edə bilərsiniz 372 00:30:32,400 --> 00:30:36,620 olmadan hələ çalıştırılabilir olan. 373 00:30:36,620 --> 00:30:39,420 Cari çalıştırılabilir bir əsas funksiyası olmalıdır. 374 00:30:39,420 --> 00:30:45,460 Siz 100 1 fayl funksiyaları, lakin heç bir əsas yaza bilərsiniz 375 00:30:45,460 --> 00:30:48,800 və sonra, ikili ki, aşağı tərtib 376 00:30:48,800 --> 00:30:54,460 sonra yalnız əsas var ki, başqa bir fayl yazmaq lakin bu funksiyaları bir dəstə çağırır 377 00:30:54,460 --> 00:30:56,720 burada bu ikili fayl. 378 00:30:56,720 --> 00:31:01,240 Və belə yürütülebilir edirik zaman ki, Linker nə var 379 00:31:01,240 --> 00:31:05,960 bu 2 ikili faylları çalıştırılabilir daxil birləşdirir olunur. 380 00:31:05,960 --> 00:31:11,400 Belə ki, bir. C fayl bütün əsas funksiyası lazımdır deyil. 381 00:31:11,400 --> 00:31:19,220 Və böyük kodu əsaslarla siz. C faylları və 1 əsas fayl minlərlə görəcəksiniz. 382 00:31:23,960 --> 00:31:26,110 Ətraflı suallar? 383 00:31:29,310 --> 00:31:31,940 [Tələbə] başqa bir sual var idi. 384 00:31:31,940 --> 00:31:36,710 Bu etmək bir compiler bildirib. Doğru və ya yalan? 385 00:31:36,710 --> 00:31:42,030 Və cavab yalan idi və bu cingilti kimi deyil nə başa düşülür. 386 00:31:42,030 --> 00:31:44,770 Amma biz bunu deyil əgər etmək nə zəng edirsiniz? 387 00:31:44,770 --> 00:31:49,990 Etmək yalnız əsasən - Mən onu çağırır dəqiq nə edə bilərsiniz. 388 00:31:49,990 --> 00:31:52,410 Amma bu yalnız əmrləri çalışır. 389 00:31:53,650 --> 00:31:55,650 Olun. 390 00:31:58,240 --> 00:32:00,870 Mən bu qoparmaq bilər. Bəli. 391 00:32:10,110 --> 00:32:13,180 Oh, evet. Etmək də yoxdur. 392 00:32:13,180 --> 00:32:17,170 Bu markası kommunal məqsədi avtomatik müəyyən etmək üçün deyir 393 00:32:17,170 --> 00:32:19,610 böyük bir proqram ədəd recompiled lazım olan 394 00:32:19,610 --> 00:32:22,350 və onlara derleyeceğiz üçün əmrləri vermək. 395 00:32:22,350 --> 00:32:27,690 Siz tamamilə böyük faylları etmək edə bilərsiniz. 396 00:32:27,690 --> 00:32:33,210 Olun, biz əvvəlki kimi, faylları vaxt stamps baxır və 397 00:32:33,210 --> 00:32:36,930 Siz fərdi faylları aşağı tərtib edə bilərsiniz və siz Linker almaq qədər deyil 398 00:32:36,930 --> 00:32:39,270 onlar bir yürütülebilir daxil araya etdiyiniz. 399 00:32:39,270 --> 00:32:43,810 Siz 10 müxtəlif fayllar var və siz onlardan 1-bir dəyişiklik əgər 400 00:32:43,810 --> 00:32:47,870 sonra nə edə bilərəm gedir yalnız yeniden derlemeyle ki, 1 fayl 401 00:32:47,870 --> 00:32:50,640 və sonra birlikdə hər şey relink. 402 00:32:50,640 --> 00:32:53,020 Amma daha çox dumber var. 403 00:32:53,020 --> 00:32:55,690 Bu tamamilə ki, bunu etmək lazımdır nə olduğunu müəyyən etmək üçün sizə var. 404 00:32:55,690 --> 00:32:59,560 Bu mənim, bu vaxt möhürü məhsulları tanımaq imkanı var 405 00:32:59,560 --> 00:33:03,220 lakin bir şey etmək bir markası fayl yaza bilərsiniz. 406 00:33:03,220 --> 00:33:09,150 Siz yaza bilər bir fayl etmək ki, siz yalnız cd-nin başqa bir dizine etmək yazın zaman. 407 00:33:09,150 --> 00:33:15,560 Mən incidir əldə edilib mən tack hər şey mənim Aracı daxilində çünki 408 00:33:15,560 --> 00:33:21,740 və sonra mən Mac PDF bilərsiniz. 409 00:33:21,740 --> 00:33:30,720 >> Mən Finder getmək və mən dön yoxdur bilər, Server qoşulmaq 410 00:33:30,720 --> 00:33:36,950 və mən qoşulmaq server mənim Aracı, sonra mən PDF açmaq 411 00:33:36,950 --> 00:33:40,190 ki, lateks tərəfindən tərtib edilir. 412 00:33:40,190 --> 00:33:49,320 Amma incidir əldə edilib Mən PDF yenilemek üçün lazım olan hər bir vaxt, çünki 413 00:33:49,320 --> 00:33:53,900 Mən gedə bilər ki, müəyyən bir kataloq kopyalamak üçün idi 414 00:33:53,900 --> 00:33:57,710 və annoying əldə edilib. 415 00:33:57,710 --> 00:34:02,650 Belə ki, əvəzinə mən onu şeyi edir necə müəyyən etmək olan bir markası fayl yazdı. 416 00:34:02,650 --> 00:34:06,130 Siz etmək necə PDF lateks edir. 417 00:34:06,130 --> 00:34:10,090 Hər hansı digər markası fayl kimi - və ya sizə markası faylları görməmişik tapmaq, 418 00:34:10,090 --> 00:34:13,510 lakin biz Aracı yalnız deyir ki, qlobal markası fayl var 419 00:34:13,510 --> 00:34:16,679 Bir C fayl tərtib edildikdə, cingilti istifadə edin. 420 00:34:16,679 --> 00:34:20,960 Və burada markası fayl Mən demək ki, 421 00:34:20,960 --> 00:34:25,020 Bu faylı PDF lateks ilə tərtib etmək istəyirəm olacaq. 422 00:34:25,020 --> 00:34:27,889 Və bu tərtibi edir ki, PDF lateks var. 423 00:34:27,889 --> 00:34:31,880 Olun tərtib deyil. Bu, sadəcə mən göstərilən ardıcıllıqla bu əmrləri çalışan edir. 424 00:34:31,880 --> 00:34:36,110 Belə ki, PDF lateks çalışır ki, mən bu kopyalanır istədiyiniz qovluğu üçün nüsxə 425 00:34:36,110 --> 00:34:38,270 bu cd nin kataloq və başqa şeylər edir 426 00:34:38,270 --> 00:34:42,380 lakin bunu bütün bir fayl dəyişikliklər tanımaq olunur 427 00:34:42,380 --> 00:34:45,489 bu dəyişikliklər, əgər, o, run etməli olan əmrləri davam edəcək 428 00:34:45,489 --> 00:34:48,760 zaman fayl dəyişikliklər. >> [Tələbə] Okay. 429 00:34:50,510 --> 00:34:54,420 Mən qlobal markası faylları mənə kontrol üçün olduğu bilmirəm. 430 00:34:57,210 --> 00:35:04,290 Digər suallar? Keçmişdən şey viktorina? Hər hansı bir pointer şeylər? 431 00:35:06,200 --> 00:35:08,730 Kimi göstəricilər ilə incə şey var - 432 00:35:08,730 --> 00:35:10,220 Mən bu barədə bir viktorina sual tapa olacaq deyiləm - 433 00:35:10,220 --> 00:35:16,250 ancaq şey bu cür kimi. 434 00:35:19,680 --> 00:35:24,060 Mən deyəndə ki, siz başa əmin olun int * x * y - 435 00:35:24,890 --> 00:35:28,130 Bu, məhz burada bir şey deyil, hərhalda. 436 00:35:28,130 --> 00:35:32,140 Amma kimi * x * y, o yığını olan 2 dəyişənlər var. 437 00:35:32,140 --> 00:35:37,220 Mən deyəndə x = malloc (sizeof (int)), x, hələ yığını üzrə dəyişir 438 00:35:37,220 --> 00:35:41,180 malloc yığın artıq bir blok və biz yığın x point qarşılaşdıqda. 439 00:35:41,180 --> 00:35:43,900 >> Yığın üçün yığını xal bir şey idi. 440 00:35:43,900 --> 00:35:48,100 Zaman malloc bir şey varsa, siz qaçılmaz bir pointer daxilində saxlanılması edirik. 441 00:35:48,100 --> 00:35:55,940 Ki, pointer yığını olduğunu Belə ki, malloced bloku yığın edir. 442 00:35:55,940 --> 00:36:01,240 Bir çox qarışıq almaq və demək int * x = malloc; x yığın edir. 443 00:36:01,240 --> 00:36:04,100 X işarə nə saylı yığın edir. 444 00:36:04,100 --> 00:36:08,540 hər hansı səbəbdən siz x qlobal dəyişən ola halda x özü, yığını deyil 445 00:36:08,540 --> 00:36:11,960 bu halda yaddaş bir bölgədə olmaq olur. 446 00:36:13,450 --> 00:36:20,820 Track saxlanılması Belə ki, bu qutu və arrow diaqramlardan viktorina üçün olduqca eynidir. 447 00:36:20,820 --> 00:36:25,740 Bu viktorina 0 bağlı deyil və ya əgər bu viktorina 1 olacaq. 448 00:36:27,570 --> 00:36:31,940 Siz tərtib addımlar bütün bu bilməlidir 449 00:36:31,940 --> 00:36:35,740 bu barədə suallara cavab idi-ci ildən. Bəli. 450 00:36:35,740 --> 00:36:38,940 [Tələbə] biz bu addımlar artıq getmək bilər - >> Sure. 451 00:36:48,340 --> 00:36:58,640 Addımlar və tərtib əvvəl biz preprocessing var 452 00:36:58,640 --> 00:37:16,750 , tərtib quraşdırma və əlaqələndirilməsi. 453 00:37:16,750 --> 00:37:21,480 Preprocessing. O nə edir? 454 00:37:29,720 --> 00:37:32,290 Bu asan addım - də deyil, kimi - 455 00:37:32,290 --> 00:37:35,770 ki, açıq-aydın olmalıdır demək deyil, lakin bu asan addım var. 456 00:37:35,770 --> 00:37:38,410 Siz uşaqlar bunu özünüz həyata bilər. Bəli. 457 00:37:38,410 --> 00:37:43,410 [Tələbə] nə sizin bu kimi daxil edin və nüsxə və sonra da müəyyən edir. 458 00:37:43,410 --> 00:37:49,250 O, # daxildir kimi şeylər üçün görünür və # müəyyən 459 00:37:49,250 --> 00:37:53,800 və yalnız surətləri və pastalar o həqiqətən nə demək. 460 00:37:53,800 --> 00:37:59,240 Beləliklə, siz # cs50.h daxildir demək zaman, preprocessor çıxarmaq və cs50.h sovuşdurmaq olunur 461 00:37:59,240 --> 00:38:01,030 o xəttə. 462 00:38:01,030 --> 00:38:06,640 Siz # 4 x müəyyən demək zaman, preprocessor bütün proqram keçir 463 00:38:06,640 --> 00:38:10,400 və 4 x bütün hallarda əvəz edir. 464 00:38:10,400 --> 00:38:17,530 Belə ki, preprocessor cari C fayl edir və etibarlı C fayl nəticələri 465 00:38:17,530 --> 00:38:20,300 Ü şeyi kopyalanamaz və yapışdırılır edilmişdir. 466 00:38:20,300 --> 00:38:24,230 İndi tərtib. O nə edir? 467 00:38:25,940 --> 00:38:28,210 [Tələbə] Bu C ikili gedir. 468 00:38:28,210 --> 00:38:30,970 >> [Bowden] Bu ikili bütün yol getmək deyil. 469 00:38:30,970 --> 00:38:34,220 [Tələbə] maşın kodu To sonra? >> Bu maşın kodu deyil. 470 00:38:34,220 --> 00:38:35,700 [Tələbə] Assambleyası? >> Assambleyasının. 471 00:38:35,700 --> 00:38:38,890 O C kodu bütün yol gedir əvvəl Assambleyasının gedir, 472 00:38:38,890 --> 00:38:45,010 və ən languages ​​bu kimi bir şey yoxdur. 473 00:38:47,740 --> 00:38:50,590 Hər hansı yüksək səviyyəli dil seçin, siz tərtib olacaq əgər, 474 00:38:50,590 --> 00:38:52,390 bu addımlar tərtib bilər. 475 00:38:52,390 --> 00:38:58,140 İlk növbədə C Python tərtib olacaq, o, Məclis C tərtib olacaq 476 00:38:58,140 --> 00:39:01,600 və sonra Assambleyasının ikili tərcümə almaq üçün gedir. 477 00:39:01,600 --> 00:39:07,800 Belə ki, tərtib C Assambleyasının çatdırmaq niyyətindədir. 478 00:39:07,800 --> 00:39:12,130 Tərtib sözü adətən daha yüksək səviyyədə onu gətirilməsi deməkdir 479 00:39:12,130 --> 00:39:14,340 aşağı səviyyəli proqramlaşdırma dili. 480 00:39:14,340 --> 00:39:19,190 Belə ki, bu yüksək səviyyəli dil ilə başlamaq yerləşir tərtib yeganə addım 481 00:39:19,190 --> 00:39:23,270 və aşağı səviyyəli dil başa və addım tərtib adlanır edirdi. 482 00:39:25,280 --> 00:39:33,370 Tərtib zamanı [tələbə], sizə # daxil etdik ki, qoy cs50.h. 483 00:39:33,370 --> 00:39:42,190 Derleyiciyi yeniden derlemeyle olan cs50.h Will, orada olan funksiyaları kimi, 484 00:39:42,190 --> 00:39:45,280 və, həmçinin ki Assambleyasının kodu tərcümə 485 00:39:45,280 --> 00:39:50,830 və ya pre-Assambleyası oldu ki, bir şey seçin və yapışdırıb olacaq? 486 00:39:50,830 --> 00:39:56,910 cs50.h olduqca çox Assambleyası sona heç vaxt. 487 00:39:59,740 --> 00:40:03,680 Funksiyası prototipləri və əşyalar kimi Stuff siz ehtiyatlı olmaq yalnız üçün. 488 00:40:03,680 --> 00:40:09,270 Bu funksiyaları zəng etdiyiniz kimi compiler şeyi kontrol edə bilərsiniz ki təminat 489 00:40:09,270 --> 00:40:12,910 doğru geri növləri və sağ dəlilləri və məhsulları ilə. 490 00:40:12,910 --> 00:40:18,350 >> Bu tərtib edir Belə ki, cs50.h sonra fayla preprocessed ediləcək 491 00:40:18,350 --> 00:40:22,310 hər şeyi düzgün adlanan əmin edir sonra əsasən atılmalıdır edir. 492 00:40:22,310 --> 00:40:29,410 Amma CS50 kitabxana müəyyən funksiyaları, cs50.h ayrı olan 493 00:40:29,410 --> 00:40:33,610 o ayrı-ayrılıqda tərtib edəcək. 494 00:40:33,610 --> 00:40:37,270 Əslində birləşdirən addım aşağı olacaq ki, biz ikinci olduğu almaq lazımdır. 495 00:40:37,270 --> 00:40:40,100 Lakin ilk, nə montaj edilir? 496 00:40:41,850 --> 00:40:44,500 Binar üçün [tələbə] Assambleyası? >> Bəli. 497 00:40:46,300 --> 00:40:48,190 Montaj. 498 00:40:48,190 --> 00:40:54,710 Məclis olduqca çox ikili bir təmiz tərcümə Çünki Biz onu tərtib demirik. 499 00:40:54,710 --> 00:41:00,230 Assambleyasının ikili gedən çox az məntiq var. 500 00:41:00,230 --> 00:41:03,180 Bu, sadəcə bir masa qədər axtarır istəyirəm ki, oh, biz bu təlimat var; 501 00:41:03,180 --> 00:41:06,290 olan ikili 01110 uyğundur. 502 00:41:10,200 --> 00:41:15,230 Və belə faylları çıxış edir, ümumiyyətlə, montaj. O faylları. 503 00:41:15,230 --> 00:41:19,020 Və. O faylları biz əvvəl deyirdilər nə var, 504 00:41:19,020 --> 00:41:21,570 necə bir fayl bir əsas funksiyası üçün lazım deyil. 505 00:41:21,570 --> 00:41:27,640 Hər hansı bir faylı cari C fayl kimi uzun kimi. O fayl aşağı tərtib edilə bilər. 506 00:41:27,640 --> 00:41:30,300 Bu. O aşağı tərtib edilə bilər. 507 00:41:30,300 --> 00:41:43,030 İndi keçid. Həqiqətən bir dəstə gətirir nə o faylları və bir yürütülebilir onları gətirir. 508 00:41:43,030 --> 00:41:51,110 Və nə linking yoxdur bir. O fayl kimi CS50 kitabxana hesab bilər. 509 00:41:51,110 --> 00:41:56,980 Bu artıq tərtib ikili fayl. 510 00:41:56,980 --> 00:42:03,530 Və belə GetString çağırır olan fayl, sizin hello.c, tərtib edərkən 511 00:42:03,530 --> 00:42:06,360 hello.c, hello.o aşağı tərtib olur 512 00:42:06,360 --> 00:42:08,910 hello.o ikili indi. 513 00:42:08,910 --> 00:42:12,830 Bu GetString istifadə edir, belə ki, cs50.o artıq getmək lazımdır 514 00:42:12,830 --> 00:42:16,390 və Linker birlikdə onlara smooshes və bu fayla GetString nüsxə 515 00:42:16,390 --> 00:42:20,640 və ehtiyacı bütün funksiyaları olan bir yürütülebilir ilə çıxır. 516 00:42:20,640 --> 00:42:32,620 Belə cs50.o həqiqətən bir O faylı deyil, lakin heç bir əsaslı fərq var ki, yaxın kifayətdir. 517 00:42:32,620 --> 00:42:36,880 Belə ki, yalnız birləşdirən birlikdə faylları bir qom gətirir 518 00:42:36,880 --> 00:42:41,390 ayrı funksiyaları bütün ehtiva mən istifadə etmək lazımdır 519 00:42:41,390 --> 00:42:46,120 və həqiqətən davam edəcək yürütülebilir yaradır. 520 00:42:48,420 --> 00:42:50,780 >> Və belə ki, əvvəl deyirdilər nə də var 521 00:42:50,780 --> 00:42:55,970 1000 ola bilər yerləşir. c faylları, onları sizə bütün tərtib edir. o faylları, 522 00:42:55,970 --> 00:43:00,040 yəqin ki, bir müddət davam edəcək, sonra 1 dəyişir. c faylı. 523 00:43:00,040 --> 00:43:05,480 Siz yalnız 1. C fayl və sonra başqa relink hər derleyeceğiz lazımdır 524 00:43:05,480 --> 00:43:07,690 geri birlikdə hər şey bağlayırlar. 525 00:43:09,580 --> 00:43:11,430 [Tələbə] biz lcs50 yazmaq bağlıyoruz zaman? 526 00:43:11,430 --> 00:43:20,510 Bəli, belə lcs50. Əgər kitabxana keçid etmək lazımdır ki, Linker ki, bayraq siqnalları. 527 00:43:26,680 --> 00:43:28,910 Suallar? 528 00:43:41,310 --> 00:43:46,860 Biz ilk mühazirə ki, 5 saniyə-dən başqa bir ikili üzərində getdi? 529 00:43:50,130 --> 00:43:53,010 Mən belə düşünmürəm. 530 00:43:55,530 --> 00:43:58,820 Siz, biz artıq getdi etdiyiniz böyük Os bütün bilməlidir 531 00:43:58,820 --> 00:44:02,670 biz bir funksiyası verdi, əgər siz, lazımdır 532 00:44:02,670 --> 00:44:09,410 siz təxminən, böyük O demək lazımdır. Və ya yaxşı, böyük O kobuddur. 533 00:44:09,410 --> 00:44:15,300 Şeyi eyni sayda üzərində loop loops üçün iç içə görmək əgər, 534 00:44:15,300 --> 00:44:22,260 >> [tələbə] n kare - int j, j > O kvadrat ola n çalışır. 535 00:44:22,260 --> 00:44:25,280 Siz üç iç içə varsa, bu n Cubed olmağa çalışır. 536 00:44:25,280 --> 00:44:29,330 Belə şey ki, sort dərhal qeyd etmək lazımdır. 537 00:44:29,330 --> 00:44:33,890 Siz daxil sort və bubble sırala bilirik və sort və hamısı daxil etmək lazımdır. 538 00:44:33,890 --> 00:44:41,420 Onlar n kare və n log n və ki, bütün var nə anlamaq üçün asan 539 00:44:41,420 --> 00:44:47,810 Mən biz əsasən verdi bir il viktorina var idi, çünki 540 00:44:47,810 --> 00:44:55,050 bubble cür icra və "bu funksiya çalışan zaman nədir?" dedi 541 00:44:55,050 --> 00:45:01,020 Siz bubble sırala kimi tanınması Beləliklə, əgər, sonra dərhal n kvadrat demək olar. 542 00:45:01,020 --> 00:45:05,470 Yalnız baxmaq Lakin, hətta bu bubble sırala həyata ehtiyac yoxdur; 543 00:45:05,470 --> 00:45:08,990 yalnız bu və bunu deyə bilər. Bu kvadrat n. 544 00:45:12,350 --> 00:45:14,710 [Tələbə] sizə gələ bilər hər hansı sərt nümunələri var, 545 00:45:14,710 --> 00:45:20,370 həyata figuring bir oxşar fikir kimi? 546 00:45:20,370 --> 00:45:24,450 >> Mən sizə hər hansı sərt nümunələr verəcək düşünmürəm. 547 00:45:24,450 --> 00:45:30,180 Bubble sırala şey getmək kimi haqqında kimi sərt deyil 548 00:45:30,180 --> 00:45:36,280 və hətta kimi uzun siz anlamaq kimi serialın üzərində iterating edirik ki, 549 00:45:36,280 --> 00:45:41,670 serialın hər element üçün, bu kvadrat n ki, bir şey olacaq. 550 00:45:45,370 --> 00:45:49,940 Biz burada kimi ümumi suallar var - Oh. 551 00:45:55,290 --> 00:45:58,530 Sadəcə, digər gün, Doug iddia, "Mən bir sıra sort edə bilər ki, bir alqoritm icad 552 00:45:58,530 --> 00:46:01,780 "O (Giriş n) vaxt! Ildə n sayda" 553 00:46:01,780 --> 00:46:04,900 Belə ki, necə ki, mümkün deyil bilirik? 554 00:46:04,900 --> 00:46:08,850 [Işitilemez tələbə cavab] >> Bəli. 555 00:46:08,850 --> 00:46:13,710 Ən azı, siz array hər element toxunmaq var 556 00:46:13,710 --> 00:46:16,210 belə ki, bir sıra sort mümkün deyil - 557 00:46:16,210 --> 00:46:20,850 Hər şey çeşidlənməmiş üçün, onda siz array hər şeyi aid etmək olacaq 558 00:46:20,850 --> 00:46:25,320 belə n Ey az bunu mümkün deyil. 559 00:46:27,430 --> 00:46:30,340 [Tələbə] Siz bizə n O bunu edə ki, misal göstərdi 560 00:46:30,340 --> 00:46:33,920 yaddaş çox istifadə edin. >> Bəli. 561 00:46:33,920 --> 00:46:37,970 Və that's - Mən that's nə unutmaq - bu cür hesablanması mı? 562 00:46:47,360 --> 00:46:51,330 Hmm. Yəni tam çeşidlənməsi alqoritm edir. 563 00:46:59,850 --> 00:47:05,100 Mən keçən həftə xatırlayıram ki, bunun üçün xüsusi ad axtarırdı. 564 00:47:05,100 --> 00:47:13,000 Bəli. Bu n böyük O şeyi yerinə yetirmək olar ki, növ növ var. 565 00:47:13,000 --> 00:47:18,430 Yalnız müəyyən bir sıra integers qədər istifadə edə bilərsiniz kimi Lakin məhdudiyyətlər var. 566 00:47:20,870 --> 00:47:24,560 Plus bir şey that's düzmək üçün çalışdığınız halda - 567 00:47:24,560 --> 00:47:30,750 Sizin array 012, -12, 151, 4 milyon Əgər 568 00:47:30,750 --> 00:47:35,120 o vahid element tamamilə bütün çeşidlənməsi məhv edir. 569 00:47:42,060 --> 00:47:44,030 >> Suallar? 570 00:47:49,480 --> 00:47:58,870 [Tələbə] Siz rekursiv funksiya və yalnız recursive zənglər edərsə 571 00:47:58,870 --> 00:48:02,230 geri hesabatda ki, quyruq recursive var 572 00:48:02,230 --> 00:48:07,360 və ki, iş zamanı daha çox yaddaş istifadə deyil 573 00:48:07,360 --> 00:48:12,550 bir həll iterativ kimi və ya ən azı müqayisə yaddaş istifadə edir? 574 00:48:12,550 --> 00:48:14,530 [Bowden] Bəli. 575 00:48:14,530 --> 00:48:19,840 Bu ehtimal bir qədər aşağı, amma həqiqətən. Olardı 576 00:48:19,840 --> 00:48:23,290 Recursive Tail olduqca yaxşı. 577 00:48:23,290 --> 00:48:32,640 Yığını çərçivəsində yenidən baxaraq, qoy biz əsas var demək 578 00:48:32,640 --> 00:48:42,920 və biz int bar (int x) və ya bir şey var. 579 00:48:42,920 --> 00:48:52,310 Bu mükəmməl recursive funksiyası deyil, geri bar (x - 1). 580 00:48:52,310 --> 00:48:57,620 Belə ki, açıq-aydın, bu flawed edir. Siz baza hallarda və stuff lazımdır. 581 00:48:57,620 --> 00:49:00,360 Lakin burada fikir, bu recursive quyruq ki, 582 00:49:00,360 --> 00:49:06,020 bu onun yığını çərçivəsində olacaq zaman əsas zənglər bar deməkdir. 583 00:49:09,550 --> 00:49:12,440 Bu yığını çərçivəsində yaddaş bir az blok olmasına olacaq 584 00:49:12,440 --> 00:49:17,490 onun dəlil x uyğundur. 585 00:49:17,490 --> 00:49:25,840 Və belə edək əsas bar (100) zəng etmək olur demək; 586 00:49:25,840 --> 00:49:30,050 Belə x 100 kimi həyata başlamaq niyyətindədir. 587 00:49:30,050 --> 00:49:35,660 Derleyiciyi bu, quyruq recursive funksiyanın tanıyarsa 588 00:49:35,660 --> 00:49:38,540 bar, onun recursive zəng bar edir sonra zaman 589 00:49:38,540 --> 00:49:45,490 əvəzinə yığını əsasən artan başlayır Ü olan yeni yığını çərçivəsində edilməsi, 590 00:49:45,490 --> 00:49:48,220 nəticədə bu yığın daxil olacaq və sonra segfaults almaq 591 00:49:48,220 --> 00:49:51,590 yaddaş colliding başlayır, çünki. 592 00:49:51,590 --> 00:49:54,830 >> Əvəzinə öz yığını çərçivəsində qəbul Belə ki, o, həyata keçirə bilər 593 00:49:54,830 --> 00:49:59,080 hey, mən, həqiqətən, bu yığını çərçivəsində qayıtmaq lazımdır heç 594 00:49:59,080 --> 00:50:08,040 əvəzinə yalnız 99 ilə bu arqument dəyişdirmək və sonra bar bütün başlarsınız. 595 00:50:08,040 --> 00:50:11,810 , - (1 x) sonra yenə bunu edəcək və geri bar çatacaq 596 00:50:11,810 --> 00:50:17,320 və əvəzinə yeni yığını çərçivəsində edilməsi, yalnız 98 ilə cari dəlil əvəz edəcək 597 00:50:17,320 --> 00:50:20,740 və sonra bar çox əvvəlinə geri jump. 598 00:50:23,860 --> 00:50:30,430 Həmin əməliyyatlar, yığın ki, 1 dəyər əvəz və əvvəlinə geri jumping, 599 00:50:30,430 --> 00:50:32,430 olduqca səmərəli edir. 600 00:50:32,430 --> 00:50:41,500 Belə ki, təkcə bu iterativ olan ayrı-ayrı funksiyası eyni yaddaş istifadə edir 601 00:50:41,500 --> 00:50:45,390 yalnız 1 yığını çərçivəsində istifadə edirsinizsə, ancaq downsides çəkən deyilik, çünki 602 00:50:45,390 --> 00:50:47,240 funksiyaları zəng üçün olan. 603 00:50:47,240 --> 00:50:50,240 Bütün bu quraşdırma nə var, çünki Zəng funksiyaları qədər bahalı ola bilər 604 00:50:50,240 --> 00:50:52,470 və teardown və bütün bu stuff. 605 00:50:52,470 --> 00:50:58,160 Beləliklə, bu quyruq recursion yaxşıdır. 606 00:50:58,160 --> 00:51:01,170 [Tələbə] Nə üçün yeni addımlar yaratmaq deyil? 607 00:51:01,170 --> 00:51:02,980 Bu həyata Çünki bu lazım deyil. 608 00:51:02,980 --> 00:51:07,800 Bar üçün zəng yalnız recursive zəng qayıdır. 609 00:51:07,800 --> 00:51:12,220 Belə ki qaytarılması dəyəri bir şey etmək lazım deyil. 610 00:51:12,220 --> 00:51:15,120 Bu, sadəcə dərhal geri olacaq. 611 00:51:15,120 --> 00:51:20,530 Belə ki, yalnız öz arqumenti əvəz və yuxarı başlamaq olacaq. 612 00:51:20,530 --> 00:51:25,780 Həmçinin, siz quyruq recursive versiyası yoxsa, 613 00:51:25,780 --> 00:51:31,460 sonra bu bar qaytarır zaman bütün bu bar almaq 614 00:51:31,460 --> 00:51:36,010 bu bar dərhal geri sonra, bu onun dəyəri qayıtmaq üçün var 615 00:51:36,010 --> 00:51:39,620 və bu bir dəyəri qaytarır, o, yalnız dərhal geri olacaq 616 00:51:39,620 --> 00:51:41,350 və bu bir dəyəri geri. 617 00:51:41,350 --> 00:51:45,350 Beləliklə, siz yığını bu şeyi bütün off yaratma bu qənaət edirik 618 00:51:45,350 --> 00:51:48,730 qaytarılması dəyəri hər halda geri bütün yolu keçmişdir olacaq ildən. 619 00:51:48,730 --> 00:51:55,400 Belə ki, niyə yalnız yenilənir arqumenti ilə mübahisə əvəz və yuxarı başlamaq deyil? 620 00:51:57,460 --> 00:52:01,150 - Sizin kimi bir şey varsa funksiyası, quyruq recursive deyil 621 00:52:01,150 --> 00:52:07,530 [Tələbə] əgər bar (x + 1). >> Bəli. 622 00:52:07,530 --> 00:52:11,770 >> Siz vəziyyətdə qoymaq Əgər, sonra qaytarılması dəyəri bir şey edirik. 623 00:52:11,770 --> 00:52:16,260 Yoxsa yalnız qaytarılması 2 bile * bar (x - 1). 624 00:52:16,260 --> 00:52:23,560 Belə ki, indi bar - 2 dəfə dəyərini hesablamaq üçün (x 1), üçün qayıtmaq lazımdır 625 00:52:23,560 --> 00:52:26,140 İndi o, öz ayrı-ayrı yığını çərçivəsində ehtiyac yoxdur 626 00:52:26,140 --> 00:52:31,180 və indi cəhd necə ağır olursa olsun, sizə lazım olacaq - 627 00:52:31,180 --> 00:52:34,410 Bu recursive quyruq deyil. 628 00:52:34,410 --> 00:52:37,590 [Tələbə] Mən bir quyruq recursion üçün məqsəd bir recursion gətirmək üçün cəhd istəyirsiniz - 629 00:52:37,590 --> 00:52:41,450 [Bowden] ideal dünyada, lakin CS50 sizə yoxdur. 630 00:52:43,780 --> 00:52:49,280 Quyruq recursion almaq üçün, ümumiyyətlə, bir əlavə dəlil qurmaq 631 00:52:49,280 --> 00:52:53,550 bar y daxil int x edəcəyi 632 00:52:53,550 --> 00:52:56,990 və y geri istədiyiniz son şey uyğundur. 633 00:52:56,990 --> 00:53:03,650 (1 - x), 2 * y Beləliklə bu bar qaytarılması üçün olacaq. 634 00:53:03,650 --> 00:53:09,810 Yalnız belə bir yüksək səviyyəli şeyi quyruq recursive olmaq çevirmək necə. 635 00:53:09,810 --> 00:53:13,790 Lakin əlavə arqument - 636 00:53:13,790 --> 00:53:17,410 Və sonra sonunda sizin baza halda çatdıqda, yalnız y qayıtmaq 637 00:53:17,410 --> 00:53:22,740 Siz bütün vaxt istədiyiniz qaytarılması dəyəri yığılan etdik çünki. 638 00:53:22,740 --> 00:53:27,280 Siz cür iteratively bunu ancaq recursive zənglər istifadə edilmişdir. 639 00:53:32,510 --> 00:53:34,900 Suallar? 640 00:53:34,900 --> 00:53:39,890 Strings istifadə edərkən kimi Bəlkə göstərici hesab haqqında [tələbə]. >> Sure. 641 00:53:39,890 --> 00:53:43,610 Pointer hesab. 642 00:53:43,610 --> 00:53:48,440 Strings char ulduz çünki strings istifadə edərkən, bu, asan 643 00:53:48,440 --> 00:53:51,860 Sandıqı, əbədi və daim bir byte var 644 00:53:51,860 --> 00:53:57,540 və belə göstərici hesab siz strings ilə məşğul olduğunuz zaman müntəzəm hesab bərabərdir. 645 00:53:57,540 --> 00:54:08,790 Gəlin yalnız char * s = "salam" deyirlər. 646 00:54:08,790 --> 00:54:11,430 Beləliklə, biz yaddaş blok var. 647 00:54:19,490 --> 00:54:22,380 Her zaman null terminator lazımdır, çünki 6 bytes lazımdır. 648 00:54:22,380 --> 00:54:28,620 Və char * s bu serialın əvvəlində qeyd edir. 649 00:54:28,620 --> 00:54:32,830 Beləliklə s orada göstərir. 650 00:54:32,830 --> 00:54:36,710 İndi, bu, əsasən hər hansı bir sıra işləri necə 651 00:54:36,710 --> 00:54:40,780 asılı olmayaraq malloc ya bu yığını var olub geri idi olub. 652 00:54:40,780 --> 00:54:47,110 Hər dizi, əsasən serialın başlanmasına bir göstəricisidir 653 00:54:47,110 --> 00:54:53,640 və sonra heç bir array əməliyyat, hər hansı endeksleme, yalnız müəyyən bir ofset ki massivinə gedir. 654 00:54:53,640 --> 00:55:05,360 >> Mən s [3] kimi bir şey deyəndə, bu s gedir və içəri 3 chars hesablanması edir 655 00:55:05,360 --> 00:55:12,490 Belə ki, s [3], biz 0 var, 1, 2, 3, belə s [3] Bu l müraciət edir. 656 00:55:12,490 --> 00:55:20,460 [Tələbə] Və s + 3 etdiyini və sonra mötərizədə ulduz eyni dəyər çata bilər? 657 00:55:20,460 --> 00:55:22,570 Bəli. 658 00:55:22,570 --> 00:55:26,010 Bu * (s + 3) bərabərdir; 659 00:55:26,010 --> 00:55:31,240 və əbədi və daim ekvivalent siz nə məsələdir. 660 00:55:31,240 --> 00:55:34,070 Siz bracket sintaksis istifadə etmək lazımdır heç vaxt. 661 00:55:34,070 --> 00:55:37,770 Siz həmişə (s + 3) sintaksis olan * istifadə edə bilərsiniz. 662 00:55:37,770 --> 00:55:40,180 İnsanlar da, bracket sintaksis kimi edirlər. 663 00:55:40,180 --> 00:55:43,860 [Tələbə] Belə bütün Diziler yalnız faktiki göstəricilər var. 664 00:55:43,860 --> 00:55:53,630 Deyə bir cüzi fərq var int x [4] >> [tələbə] ki, yaddaş yaratmaq varmı? 665 00:55:53,630 --> 00:56:03,320 [Bowden] Bu belə 16 bytes ümumilikdə yığını 4 ints yaratmaq niyyətindədir. 666 00:56:03,320 --> 00:56:05,700 Bu yığını 16 bytes yaratmaq olacaq. 667 00:56:05,700 --> 00:56:09,190 x yerdə saxlanılır deyil. 668 00:56:09,190 --> 00:56:13,420 Bu, yalnız bir şey başlanğıc istinad rəmzidir. 669 00:56:13,420 --> 00:56:17,680 Siz, bu funksiya daxilində array elan Çünki 670 00:56:17,680 --> 00:56:22,340 derleyiciyi edəcəyimiz nə yalnız dəyişən x bütün hallarda əvəz olunur 671 00:56:22,340 --> 00:56:26,400 bu 16 bytes qoymaq üçün seçin baş Ü ilə. 672 00:56:26,400 --> 00:56:30,040 S faktiki göstərici çünki char * s ilə bunu edə bilərsiniz. 673 00:56:30,040 --> 00:56:32,380 Daha sonra başqa şeylər qeyd etmək pulsuzdur. 674 00:56:32,380 --> 00:56:36,140 x sabit deyil. Siz müxtəlif array bu nöqtə ola bilməz. >> [Tələbə] Okay. 675 00:56:36,140 --> 00:56:43,420 Amma bu fikir, bu endeksleme, bir ənənəvi array olub asılı olmayaraq eyni 676 00:56:43,420 --> 00:56:48,230 bir şey və ya bir pointer varsa və ya bir malloced array bir göstərici var. 677 00:56:48,230 --> 00:56:59,770 Və əslində, bu, eyni şeydir ki, belə bərabərdir. 678 00:56:59,770 --> 00:57:05,440 Bu, faktiki olaraq yalnız Mötərizədə daxilində nə tərcümə və nə Mötərizədə sol oldu 679 00:57:05,440 --> 00:57:07,970 onlara birlikdə edər və dereferences. 680 00:57:07,970 --> 00:57:14,710 Belə ki, bu kimi etibarlıdır * (s + 3) və ya s [3]. 681 00:57:16,210 --> 00:57:22,090 [Tələbə] 2 ölçülü Diziler işarə göstəricilərinə edə bilərəmmi? 682 00:57:22,090 --> 00:57:27,380 >> Bu çətindir. Ənənəvi olaraq, yoxdur. 683 00:57:27,380 --> 00:57:34,720 A 2 ölçülü array yalnız bəzi əlverişli sintaksis ilə 1-ölçülü array edir 684 00:57:34,720 --> 00:57:54,110 çünki mən deyəndə int x [3] [3], bu, həqiqətən 9 dəyərləri ilə yalnız 1 array edir. 685 00:57:55,500 --> 00:58:03,000 Və mən indeksi compiler nə demək bilir. 686 00:58:03,000 --> 00:58:13,090 Mən x [1] [2], mən ikinci sırada getmək istəyirəm bilir, belə ki, ilk 3 keçmək olacaq, demək edin 687 00:58:13,090 --> 00:58:17,460 sonra, belə ki, bu olacaq ki, ikinci şey istəyir. 688 00:58:17,460 --> 00:58:20,480 Amma hələ yalnız bir-ölçülü array edir. 689 00:58:20,480 --> 00:58:23,660 Və mən ki, serialın bir pointer təyin etmək istəyirdi 690 00:58:23,660 --> 00:58:29,770 Mən deyərdim ki, int * p = x; 691 00:58:29,770 --> 00:58:33,220 X növü yalnız - 692 00:58:33,220 --> 00:58:38,280 , Yalnız bir simvol çünki x kobud deyərək növü var və faktiki dəyişən deyil 693 00:58:38,280 --> 00:58:40,140 lakin bu, yalnız bir int * edir. 694 00:58:40,140 --> 00:58:44,840 x yalnız bu başlamasından bir göstəricisidir. >> [Tələbə] Okay. 695 00:58:44,840 --> 00:58:52,560 Və mən [1] [2] daxil olmaq üçün bilməyəcək. 696 00:58:52,560 --> 00:58:58,370 Mən xüsusi sintaksis bir pointer elan üçün var 697 00:58:58,370 --> 00:59:12,480 int kimi gülünc bir şey (* p [-. tamamilə gülünc bir şey mən belə bilmirəm. 698 00:59:12,480 --> 00:59:17,090 Amma parantez və əşyalar kimi göstəricilərinə elan üçün sintaksis var. 699 00:59:17,090 --> 00:59:22,960 Bu da ki, bunu bildirin bilər. 700 00:59:22,960 --> 00:59:26,640 Mən həqiqəti demək ki, bir şey geri baxmaq bilər. 701 00:59:26,640 --> 00:59:34,160 Nöqtəsi üçün bir sintaksis var, mən sonra üçün görünür. Amma siz onu görmək heç vaxt. 702 00:59:34,160 --> 00:59:39,670 Və hətta sintaksis siz istifadə əgər, insanların baffled olunacaq ki, arxaik edir. 703 00:59:39,670 --> 00:59:43,540 Bu kimi Boyutlu serialların olduqca nadirdir. 704 00:59:43,540 --> 00:59:44,630 Olduqca çox Siz - 705 00:59:44,630 --> 00:59:48,490 Siz matrix şeyler edirsinizsə Bəli, bu, nadir olacaq deyil 706 00:59:48,490 --> 00:59:56,730 lakin C siz nadir hallarda çoxölçülü seriallarda istifadə olacaq. 707 00:59:57,630 --> 01:00:00,470 Bəli. >> [Tələbə] Gəlin bir həqiqətən uzun array var deyirlər. 708 01:00:00,470 --> 01:00:03,900 >> Belə ki, virtual yaddaş ki, bütün ardıcıl görünür ki, 709 01:00:03,900 --> 01:00:05,640 bir-birinə doğru növbəti elementləri kimi, 710 01:00:05,640 --> 01:00:08,770 lakin fiziki yaddaş, onu bölmək ki, mümkün ola bilər? >> Bəli. 711 01:00:08,770 --> 01:00:16,860 Yaddaş işləri necə virtual yalnız ayırır - 712 01:00:19,220 --> 01:00:24,860 Bölüşdürülməsi ədəd 4 kilobayttan olmağa çalışır olan bir səhifə deyil, 713 01:00:24,860 --> 01:00:29,680 və belə bir proses deyir zaman, hey, mən bu yaddaş istifadə etmək istədiyiniz 714 01:00:29,680 --> 01:00:35,970 əməliyyat sistemi yaddaş ki, kiçik blok üçün 4 kilobayttan ayırmaq niyyətindədir. 715 01:00:35,970 --> 01:00:39,100 Yalnız yaddaş bütün blok bir az byte, istifadə bile 716 01:00:39,100 --> 01:00:42,850 əməliyyat sistemi tam 4 kilobayttan vermək niyyətindədir. 717 01:00:42,850 --> 01:00:49,410 Belə ki, bu vasitə nə ola bilər - bu mənim yığını demək edək. 718 01:00:49,410 --> 01:00:53,180 Bu yığını ayrıla bilər. Mənim yığını megabayt və megabayt ola bilər. 719 01:00:53,180 --> 01:00:55,020 Mənim yığını böyük ola bilər. 720 01:00:55,020 --> 01:01:00,220 Amma yığını özü fərdi pages bölmək var 721 01:01:00,220 --> 01:01:09,010 bu RAM demək biz burada baxmaq əgər edək, 722 01:01:09,010 --> 01:01:16,600 Mən RAM 2 gigabaytlık varsa, bu, mənim RAM zeroth byte kimi faktiki ünvan 0 deyil 723 01:01:16,600 --> 01:01:22,210 və bu burada 2 gigabaytlık bütün yol aşağı deyil. 724 01:01:22,210 --> 01:01:27,230 Beləliklə, bu səhifə burada bu blok uyğun ola bilər. 725 01:01:27,230 --> 01:01:29,400 Bu səhifə burada bu blok uyğun ola bilər. 726 01:01:29,400 --> 01:01:31,560 Bu burada bu cavab bilər. 727 01:01:31,560 --> 01:01:35,540 Əməliyyat sistemi fiziki yaddaş təyin pulsuz edir 728 01:01:35,540 --> 01:01:39,320 özbaşına hər hansı bir fərdi səhifə etmək. 729 01:01:39,320 --> 01:01:46,180 Və o deməkdir ki, bu sərhəd bir sıra ayaqlarını aralamaq olur, əgər 730 01:01:46,180 --> 01:01:50,070 bir sıra, bu qalmaq olur və hüququ səhifə bu qaydada 731 01:01:50,070 --> 01:01:54,460 o array fiziki yaddaş split olacaq. 732 01:01:54,460 --> 01:01:59,280 Prosesi başa zaman sonra, proqram çıxmaq zaman, 733 01:01:59,280 --> 01:02:05,690 bu mappings silinə almaq və sonra başqa şeylər üçün bu kiçik blokları istifadə etmək pulsuzdur. 734 01:02:14,730 --> 01:02:17,410 Ətraflı suallar? 735 01:02:17,410 --> 01:02:19,960 [Tələbə] Bu göstərici hesab. >> Bəli Oh. 736 01:02:19,960 --> 01:02:28,410 Strings daha asan idi, lakin ints kimi bir şey axtarır 737 01:02:28,410 --> 01:02:35,000 belə geri int x [4]; 738 01:02:35,000 --> 01:02:41,810 Bu bir sıra olsun və ya 4 integers bir malloced array bir pointer olsun, 739 01:02:41,810 --> 01:02:47,060 eyni şəkildə müalicə olacaq. 740 01:02:50,590 --> 01:02:53,340 Belə ki, diziler yığın haqqında [tələbə] var? 741 01:03:01,400 --> 01:03:05,270 [Bowden] Diziler yığın haqqında deyil. >> [Tələbə] Oh. 742 01:03:05,270 --> 01:03:08,320 >> [Bowden] array Bu yığını olmaq niyyətindədir 743 01:03:08,320 --> 01:03:12,220 əgər siz bu elan - qlobal dəyişənlər məhəl. Qlobal dəyişənlər istifadə etməyin. 744 01:03:12,220 --> 01:03:16,280 Deyə bir funksiyası daxilində int x [4]; 745 01:03:16,280 --> 01:03:22,520 Bu array üçün yığını üzrə 4-tam blok yaratmaq olacaq. 746 01:03:22,520 --> 01:03:26,960 Amma bu malloc (4 * sizeof (int)); yığın getmək niyyətindədir. 747 01:03:26,960 --> 01:03:31,870 Lakin bu nöqtədən sonra mən olduqca çox eyni yolla x və p istifadə edə bilərsiniz 748 01:03:31,870 --> 01:03:36,140 siz p təkrar təyin edə bilərsiniz haqqında əvvəl Mən istisna başqa. 749 01:03:36,140 --> 01:03:40,960 Texniki, onların ölçüləri qədər müxtəlif, lakin tamamilə əlaqəsiz deyil. 750 01:03:40,960 --> 01:03:43,310 Siz, həqiqətən, onların ölçüləri istifadə heç vaxt. 751 01:03:48,020 --> 01:03:56,810 Mən demək olar p p [3] = 2 və ya x [3] = 2; 752 01:03:56,810 --> 01:03:59,680 Siz eyni yolla istifadə edə bilərsiniz. 753 01:03:59,680 --> 01:04:01,570 Indi göstərici hesab - Bəli. 754 01:04:01,570 --> 01:04:07,390 [Tələbə] siz Mötərizədə varsa p * nə yoxdur? 755 01:04:07,390 --> 01:04:11,720 Mötərizədə bir gizli dereference var. Okay. >> 756 01:04:11,720 --> 01:04:20,200 Əslində, həmçinin nə ilə deyərək etdiyiniz siz çoxölçülü serialların əldə edə bilərsiniz 757 01:04:20,200 --> 01:05:02,650 göstəricilər ilə, nə edə bilərsiniz deyək, bir şey kimi, int ** s = malloc (sizeof (int *) * 5); 758 01:05:02,650 --> 01:05:06,900 Mən yalnız bütün ilk yazmaq lazımdır. 759 01:05:37,880 --> 01:05:41,020 Mən bir istəmədi. 760 01:05:41,020 --> 01:05:42,550 Okay. 761 01:05:42,550 --> 01:05:48,910 Burada nə var - That s [i] olmalıdır. 762 01:05:48,910 --> 01:05:53,680 Belə ki, pp bir göstərici bir göstəricisidir. 763 01:05:53,680 --> 01:06:02,420 Siz 5 int ulduz bir sıra qeyd etmək səh mallocing edirik. 764 01:06:02,420 --> 01:06:10,950 Belə yaddaş siz yığını s var 765 01:06:10,950 --> 01:06:20,150 Bu, bütün göstəricilərinə özləri olan 5 blokları bir sıra qeyd etmək olacaq. 766 01:06:20,150 --> 01:06:28,210 Və sonra zaman burada malloc aşağı, mən malloc həmin fərdi göstəricilərinə hər 767 01:06:28,210 --> 01:06:32,080 yığın 4 bayt ayrı bir blok qeyd edilməlidir. 768 01:06:32,080 --> 01:06:35,870 4 bayt Belə ki, bu xal. 769 01:06:37,940 --> 01:06:40,660 Və müxtəlif 4 bayt bu xal. 770 01:06:40,660 --> 01:06:43,200 >> Onların bütün öz 4 bayt qeyd. 771 01:06:43,200 --> 01:06:49,080 Bu mənə çoxölçülü şeyler bir yol verir. 772 01:06:49,080 --> 01:06:58,030 Mən s [3] [4], lakin bu eyni şey deyil çoxölçülü serialların deyə bilər 773 01:06:58,030 --> 01:07:05,390 çoxölçülü serialların tərcümə çünki [3] [4] x massivinə ofset bir daxil. 774 01:07:05,390 --> 01:07:14,790 Bu dereferences p, dereferences sonra, üçüncü index erişen 775 01:07:14,790 --> 01:07:20,790 və girişler - 4 etibarsız olardı - ikinci index. 776 01:07:24,770 --> 01:07:31,430 Halbuki biz idi zaman int x [3] [4] bir çoxölçülü array əvvəl 777 01:07:31,430 --> 01:07:35,740 və bracket ikiqat zaman, həqiqətən, yalnız bir dereference var 778 01:07:35,740 --> 01:07:40,490 , bir göstərici aşağıdakı etdiyiniz və sonra ofset 779 01:07:40,490 --> 01:07:42,850 Bu, həqiqətən 2D istinadlar edir. 780 01:07:42,850 --> 01:07:45,840 Siz 2 ayrı-ayrı göstəricilərinə baxın. 781 01:07:45,840 --> 01:07:50,420 Bu da texniki imkan verir Beləliklə, siz çoxölçülü serialların var 782 01:07:50,420 --> 01:07:53,550 hər fərdi sıra müxtəlif ölçülü edir. 783 01:07:53,550 --> 01:07:58,000 Mən kələ-kötür çoxölçülü seriallarda o deyirlər nə düşünürəm 784 01:07:58,000 --> 01:08:01,870 həqiqətən ilk şey 10 elementlər vardır ki, bir şey qeyd edə bilər-ci ildən, 785 01:08:01,870 --> 01:08:05,540 ikinci şey 100 elementlər vardır ki, bir şey qeyd edə bilər. 786 01:08:05,540 --> 01:08:10,790 [Tələbə] Siz ola bilər göstəricilərinə sayı heç bir limit var 787 01:08:10,790 --> 01:08:14,290 digər göstəricilərinə işarə? >> No 788 01:08:14,290 --> 01:08:17,010 Siz int ***** p ola bilər. 789 01:08:18,050 --> 01:08:23,760 Geri göstərici hesab üçün - >> [tələbə] Oh. >> Bəli. 790 01:08:23,760 --> 01:08:35,649 [Tələbə] Mən sonra int *** p və Əgər mən bir dereferencing etmək və mən p * Bu dəyərinə bərabərdir ki, 791 01:08:35,649 --> 01:08:39,560 yalnız dereferencing 1 səviyyəsi nə olacaq? >> Bəli. 792 01:08:39,560 --> 01:08:43,340 - Mən son göstərici ilə işarə edir ki, şey daxil etmək istədiyiniz Belə ki, əgər 793 01:08:43,340 --> 01:08:46,210 Sonra *** p yoxdur. Okay. >> 794 01:08:46,210 --> 01:08:54,080 Belə ki, bu 1 blok, digər blok bal, başqa bir blok xal p bal. 795 01:08:54,080 --> 01:09:02,010 Siz * əgər Sonra p = başqa bir şey, sonra bu dəyişir 796 01:09:02,010 --> 01:09:13,640 İndi müxtəlif blok qeyd etmək. Okay. >> 797 01:09:13,640 --> 01:09:17,649 >> Bu malloced əgər [Bowden], onda indi yaddaş sızan var 798 01:09:17,649 --> 01:09:20,430 Bu müxtəlif referanslar üçün nə halda 799 01:09:20,430 --> 01:09:25,270 Siz yalnız üz atdı ki, bu isə geri ala bilmir-ci ildən. 800 01:09:25,270 --> 01:09:29,550 Pointer hesab. 801 01:09:29,550 --> 01:09:36,310 int x [4] 4 integers bir sıra ayırmaq niyyətindədir 802 01:09:36,310 --> 01:09:40,670 x serialın əvvəlində qeyd edir yerləşir. 803 01:09:40,670 --> 01:09:50,420 Belə ki, mən x [1] kimi bir şey demək, mən bu serialın ikinci tam getmək demək istəyirəm ki, 804 01:09:50,420 --> 01:09:53,319 bu bir olardı. 805 01:09:53,319 --> 01:10:04,190 Bu tam 4 bayt çəkir Lakin, həqiqətən, ki massivinə 4 bayt var. 806 01:10:04,190 --> 01:10:08,470 1 ofset bir həqiqətən 1 ofset deməkdir Beləliklə 807 01:10:08,470 --> 01:10:12,030 serialın növü hər hansı dəfə ölçüsü. 808 01:10:12,030 --> 01:10:17,170 Bu integers bir sıra edir, belə ki, ofset istəyir zaman int 1 dəfə ölçüsü edə bilir. 809 01:10:17,170 --> 01:10:25,260 Digər sintaksis. Bu * (x + 1) ekvivalent olduğunu unutmayın; 810 01:10:25,260 --> 01:10:35,250 Mən göstərici nə qaytarır göstərici saxlanılması ki ünvanı + 1, deyəndə 811 01:10:35,250 --> 01:10:40,360 plus 1 dəfə pointer növü və ölçüsü. 812 01:10:40,360 --> 01:10:59,510 Belə ki, əgər x = ox100, sonra x + 1 = ox104. 813 01:10:59,510 --> 01:11:19,750 Və bu sui-istifadə və bir şey deyə bilərsiniz char kimi * c = (char *) x; 814 01:11:19,750 --> 01:11:23,050 və indi c x eyni ünvan olacaq. 815 01:11:23,050 --> 01:11:26,040 c, ox100 bərabər olacaq 816 01:11:26,040 --> 01:11:31,490 lakin c + 1 ox101 bərabər olacaq 817 01:11:31,490 --> 01:11:38,030 göstərici hesab siz əlavə olunur ki, pointer növündən asılıdır bəri. 818 01:11:38,030 --> 01:11:45,390 Belə c + 1, bu c baxır, bir char göstərici deyil, belə ki, karakter 1 dəfə ölçüsü əlavə olacaq 819 01:11:45,390 --> 01:11:48,110 olan həmişə 1 olacaq, belə ki, 101 almaq 820 01:11:48,110 --> 01:11:54,890 Mən hələ də 100 olan x, əgər, x + 1 104 olacaq halbuki. 821 01:11:56,660 --> 01:12:06,340 [Tələbə] siz c + + 1 ilə pointer inkişaf üçün istifadə edə bilərəmmi? 822 01:12:06,340 --> 01:12:09,810 Bəli, edə bilər. 823 01:12:09,810 --> 01:12:16,180 X yalnız rəmzidir çünki x ilə edə bilməz, bu, bir sabit deyil, siz x dəyişə bilməz. 824 01:12:16,180 --> 01:12:22,610 >> Lakin c yalnız bir göstərici olur, belə ki, c + + mükəmməl etibarlı və 1 arttırmayı edəcək. 825 01:12:22,610 --> 01:12:32,440 C yalnız bir int * idi, onda c + + 104 olardı. 826 01:12:32,440 --> 01:12:41,250 + + Edir göstərici hesab kimi c + 1 göstərici hesab edilir ki, var. 827 01:12:43,000 --> 01:12:48,870 Bu əslində birləşmə sort kimi şeylər necə bir çox - 828 01:12:49,670 --> 01:12:55,710 Əvəzində şeyi surətlərini yaratmaq, yerine keçə bilər - 829 01:12:55,710 --> 01:13:02,400 Bu bəzi silmək edək - Mən serialın bu yarım keçmək istəyirdi əgər kimi. 830 01:13:04,770 --> 01:13:10,520 Gəlin bir funksiyası daxil serialın bu yan keçmək istədiyini deyirlər. 831 01:13:10,520 --> 01:13:12,700 Mən ki, fəaliyyət keçmək olar? 832 01:13:12,700 --> 01:13:17,050 Mən x keçmək varsa, bu ünvan keçən edirəm. 833 01:13:17,050 --> 01:13:23,780 Amma bu ünvan keçmək istəyirəm. Mən nə keçməlidir? 834 01:13:23,780 --> 01:13:26,590 [Tələbə] Pointer + 2? 835 01:13:26,590 --> 01:13:29,350 [Bowden] Belə x + 2. Bəli. 836 01:13:29,350 --> 01:13:31,620 Yəni bu ünvan olacaq. 837 01:13:31,620 --> 01:13:42,810 Siz də çox tez-tez kimi görürsünüz x [2] və sonra ki, ünvanı. 838 01:13:42,810 --> 01:13:47,850 Beləliklə, siz bracket bir gizli dereference çünki onun ünvan etmək lazımdır. 839 01:13:47,850 --> 01:13:53,250 x [2], bu qutusuna ki, dəyəri istinad edir, və sonra o qutusu ünvan istəyirəm 840 01:13:53,250 --> 01:13:56,850 belə demək & x [2]. 841 01:13:56,850 --> 01:14:02,880 Belə ki, siz bir şey yarım siyahısına keçmək istədiyiniz birləşmə sort necə bir şey var 842 01:14:02,880 --> 01:14:08,790 siz həqiqətən keçmək & x [2], indi kimi uzaq recursive zəng narahat olduğu kimi, 843 01:14:08,790 --> 01:14:12,510 Yeni array orada başlayır. 844 01:14:12,510 --> 01:14:15,130 Son dəqiqə suallar. 845 01:14:15,130 --> 01:14:20,050 [Tələbə] biz bir işareti qoymaq və ya bir deyilsə - nə deyirlər? >> Star? 846 01:14:20,050 --> 01:14:23,200 [Tələbə] Star. >> Texniki dereference operator, ancaq - >> [tələbə] Dereference. 847 01:14:23,200 --> 01:14:29,310 >> Biz bir ulduz və ya bir işareti qoymaq yoxsa sadəcə y desək, nə olar = x və x bir göstəricisidir? 848 01:14:29,310 --> 01:14:34,620 Y növü nədir? >> [Tələbə] Mən yalnız bu göstərici 2 demək lazımdır. 849 01:14:34,620 --> 01:14:38,270 Yalnız demək Əgər y = x, indi x və y nöqtəsi eyni şey. >> Eyni şey üçün [tələbə] Point. 850 01:14:38,270 --> 01:14:45,180 Və x bir int göstərici olur? Siz göstəricilərinə təyin edə bilməz, çünki >> Bu şikayət edirəm. 851 01:14:45,180 --> 01:14:46,540 [Tələbə] Okay. 852 01:14:46,540 --> 01:14:51,860 Biz oxlar kimi cəlb baxmayaraq ki, göstəricilər saxla, 853 01:14:51,860 --> 01:15:02,010 həqiqətən onlar mağaza - int * x - həqiqətən bütün x saxlanılması olunur ox100 kimi bir şeydir 854 01:15:02,010 --> 01:15:06,490 olan 100 saxlanılır blokunun işarə kimi təmsil verir. 855 01:15:06,490 --> 01:15:19,660 Mən deyəndə int * y = x; Mən y daxil ox100 çıxarmaq deyiləm, 856 01:15:19,660 --> 01:15:24,630 olan biz də ox100 işarə edərək, y kimi təmsil olacaq. 857 01:15:24,630 --> 01:15:39,810 Mən demək əgər int i = (int) x, sonra i ox100 dəyəri nə saxlamaq niyyətindədir 858 01:15:39,810 --> 01:15:45,100 bu daxilində, amma artıq yerinə göstərici bir tam kimi təfsir edilə olacaq. 859 01:15:45,100 --> 01:15:49,310 Amma cast lazımdır və ya başqa bu şikayət edəcək. 860 01:15:49,310 --> 01:15:53,300 [Tələbə] Beləliklə, siz salmaq deməkdir - 861 01:15:53,300 --> 01:16:00,290 Bu y x və ya tökmə int və int tökmə olacaq? 862 01:16:00,290 --> 01:16:03,700 [Bowden] nədir? 863 01:16:03,700 --> 01:16:07,690 [Tələbə] Okay. Bu parantez sonra orada bir x və ya orada ay olacaq? 864 01:16:07,690 --> 01:16:11,500 >> [Bowden] Ya. x və y ekvivalent edir. >> [Tələbə] Okay. 865 01:16:11,500 --> 01:16:14,390 Onlar həm göstəricilərinə etdiyiniz çünki. >> Bəli. 866 01:16:14,390 --> 01:16:21,050 [Tələbə] Belə ki, tam şəkildə hexadecimal 100 saxlaya bilər? >> [Bowden] Bəli. 867 01:16:21,050 --> 01:16:23,620 Amma bu işarə hər hansı dəyəri. 868 01:16:23,620 --> 01:16:29,940 [Bowden] Bəli. >> [Tələbə] Belə tam formada yalnız ünvan. Okay. 869 01:16:29,940 --> 01:16:34,720 Bəzi qəribə səbəbdən istədi [Bowden] Əgər 870 01:16:34,720 --> 01:16:38,900 Siz yalnız göstəricilər ilə məşğul və integers ilə məşğul heç vaxt 871 01:16:38,900 --> 01:16:49,240 və yalnız int * x = 0 kimi. 872 01:16:49,240 --> 01:16:53,000 Sonra göstərici hesab baş başlayır bir dəfə həqiqətən qarışıq almaq olacaq. 873 01:16:53,000 --> 01:16:56,570 Onlar mağaza ki nömrələri mənasız edir. 874 01:16:56,570 --> 01:16:58,940 Bu onlara tərcümə sona yalnız nasıl. 875 01:16:58,940 --> 01:17:02,920 Mən, bir int bir int * dən ox100 surəti pulsuz deyiləm 876 01:17:02,920 --> 01:17:07,790 yəqin ki, tökmə üçün də yelled almaq üçün gedir you're - və mən təyin pulsuz Ben - 877 01:17:07,790 --> 01:17:18,160 Mən bu ixtiyari int * daxil (int *) ox1234 kimi bir şey təyin pulsuz deyiləm. 878 01:17:18,160 --> 01:17:25,480 Belə ox123 etibarlı bir yaddaş ünvanı və y yalnız kimi. 879 01:17:25,480 --> 01:17:32,060 Və y olduqca çox ox123 ki, bir şey geri olur. 880 01:17:32,060 --> 01:17:35,430 [Tələbə] ki, hexadecimal olan decimal şəklində getmək üçün həqiqətən cool yol olardı, 881 01:17:35,430 --> 01:17:39,230 bir göstərici Əgər istəyirəm və bir int kimi tökmə? 882 01:17:39,230 --> 01:17:44,860 [Bowden] Siz, həqiqətən, yalnız printf kimi istifadə çap edə bilərsiniz. 883 01:17:44,860 --> 01:17:50,300 Gəlin mən int y = 100 var deyirlər. 884 01:17:50,300 --> 01:18:02,700 Belə printf (% d \ n - Bildiyiniz olmalıdır kimi - çap kimi bir tam,% x. 885 01:18:02,700 --> 01:18:05,190 Biz yalnız hexadecimal kimi çap edəcəyik. 886 01:18:05,190 --> 01:18:10,760 Belə bir göstərici, hexadecimal kimi saxlanılır deyil 887 01:18:10,760 --> 01:18:12,960 və tam decimal kimi saxlanılır deyil. 888 01:18:12,960 --> 01:18:14,700 Hər şey binar kimi saxlanılır. 889 01:18:14,700 --> 01:18:17,950 Bu hexadecimal kimi göstəricilər nümayiş edirlər ki, yalnız var 890 01:18:17,950 --> 01:18:23,260 biz bu 4-byte bloklar şeyi edirəm, çünki 891 01:18:23,260 --> 01:18:25,390 və yaddaş ünvanları tanış olur. 892 01:18:25,390 --> 01:18:28,890 Bu bf ilə başlayır, onda bu yığını olmaq olur, kimi Biz istəyirik. 893 01:18:28,890 --> 01:18:35,560 Belə ki, yalnız hexadecimal kimi göstəricilər bizim şərh edir. 894 01:18:35,560 --> 01:18:39,200 Okay. Hər keçən suallar? 895 01:18:39,200 --> 01:18:41,700 >> Başqa bir şey varsa, sonra bir az burada olacaq. 896 01:18:41,700 --> 01:18:46,070 Və ki, sonunda deyil. 897 01:18:46,070 --> 01:18:48,360 >> [Tələbə] Yay! [Alqış] 898 01:18:51,440 --> 01:18:53,000 >> [CS50.TV]