1 00:00:00,000 --> 00:00:03,395 >> [موسیقی] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. مالان: این مثل این است یک سمینار دانشجوی سال اول امروز. 4 00:00:13,280 --> 00:00:14,060 باشه. 5 00:00:14,060 --> 00:00:15,024 بنابراین بارانی است. 6 00:00:15,024 --> 00:00:17,690 این تمایل به در روزهای چهارشنبه رخ می دهد، اما همه فرصت های بیشتر 7 00:00:17,690 --> 00:00:18,700 برای سوال امروز. 8 00:00:18,700 --> 00:00:22,210 بنابراین شروع کردن در واقع اجازه با این فیلم در یک لحظه. 9 00:00:22,210 --> 00:00:24,560 اما ما سخنی عام مثل همیشه شروع می شود. 10 00:00:24,560 --> 00:00:28,000 >> این CS50 است، و این در پایان هفته 4 است. 11 00:00:28,000 --> 00:00:30,820 بنابراین اگر شما تا کنون به تماشای تلویزیون و یا یک جایی فیلم 12 00:00:30,820 --> 00:00:34,690 برخی از کارشناسان کامپیوتر وجود دارد و پلیس یا اف بی آی، و یا برخی از آژانس 13 00:00:34,690 --> 00:00:36,930 در تلاش است به گرفتن برخی از دشمن، خوب، شما را 14 00:00:36,930 --> 00:00:40,850 احتمالا شنیده عبارت "افزایش" به موجب آن که تکنسین به نحوی 15 00:00:40,850 --> 00:00:44,750 در بی نهایت زوم جادویی دور برای دیدن جنایتکاران 16 00:00:44,750 --> 00:00:48,640 هویت و یا شماره پلاک حتی در روشن و خاموش شدن یک آینه 17 00:00:48,640 --> 00:00:50,390 و یا درخشش چشم کسی. 18 00:00:50,390 --> 00:00:55,196 پس در واقع، اجازه دهید یک نگاه چند جمله صحنه هایی از تلفن های موبایل. 19 00:00:55,196 --> 00:00:55,862 [پخش ویدئو] 20 00:00:55,862 --> 00:00:59,243 -ok، حالا اجازه دهید یک نگاه خوبی در شما خواهد شد. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> نگه دارید آن را. 23 00:01:07,415 --> 00:01:08,267 با اجرای این تماس. 24 00:01:08,267 --> 00:01:09,121 >> -یک دقیقه صبر کن. 25 00:01:09,121 --> 00:01:11,300 رفتن سمت راست. 26 00:01:11,300 --> 00:01:12,209 >> وجود دارد، مسدود است. 27 00:01:12,209 --> 00:01:12,750 -تمام صفحه. 28 00:01:12,750 --> 00:01:13,558 -ok، مسدود است. 29 00:01:13,558 --> 00:01:14,820 تا -Tighten که، شما؟ 30 00:01:14,820 --> 00:01:16,530 بردار در در که پسر های چرخ عقب. 31 00:01:16,530 --> 00:01:19,400 زوم در اینجا بر روی این نقطه است. 32 00:01:19,400 --> 00:01:22,846 -With تجهیزات مناسب، تصویر می تواند بزرگ و تیز. 33 00:01:22,846 --> 00:01:24,065 -آن چیست؟ 34 00:01:24,065 --> 00:01:25,600 آن را یک برنامه افزایش است. 35 00:01:25,600 --> 00:01:26,860 آیا می توانم شما روشن است که تا هر؟ 36 00:01:26,860 --> 00:01:27,890 -من نمی دانم. 37 00:01:27,890 --> 00:01:29,050 اجازه دهید آن را بالا ببرد. 38 00:01:29,050 --> 00:01:31,575 >> A6 بخش -Enhance. 39 00:01:31,575 --> 00:01:33,642 >> -I افزایش جزئیات، and-- من فکر می کنم وجود دارد 40 00:01:33,642 --> 00:01:35,433 به اندازه کافی به منظور ارتقاء، انتشار آن به صفحه نمایش است. 41 00:01:35,433 --> 00:01:37,080 -I افزایش بازتاب در چشم او. 42 00:01:37,080 --> 00:01:38,830 >> بیایید این طریق اجرا افزایش کیفیت ویدئو. 43 00:01:38,830 --> 00:01:40,100 -Edgar، می تواند به شما این افزایش؟ 44 00:01:40,100 --> 00:01:41,875 >> -صبر کن. 45 00:01:41,875 --> 00:01:44,010 >> -I've شده است کار بر روی این انعکاس. 46 00:01:44,010 --> 00:01:44,995 >> بازتاب، کسی است. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 یک بازتابی از صورت مرد وجود دارد. 49 00:01:47,399 --> 00:01:48,065 بازتاب بانک. 50 00:01:48,065 --> 00:01:48,981 یک بازتاب وجود دارد. 51 00:01:48,981 --> 00:01:50,600 زوم در در آینه. 52 00:01:50,600 --> 00:01:52,712 شما می توانید یک انعکاس ببینیم. 53 00:01:52,712 --> 00:01:54,350 آیا می توانید تصویر را از اینجا ببرد؟ 54 00:01:54,350 --> 00:01:55,370 آیا می توانم شما او را افزایش حق در اینجا؟ 55 00:01:55,370 --> 00:01:56,210 آیا می توانید آن را افزایش؟ 56 00:01:56,210 --> 00:01:56,900 می توانید آن را بالا ببرد؟ 57 00:01:56,900 --> 00:01:57,870 >> آیا می توانم این افزایش دهیم؟ 58 00:01:57,870 --> 00:01:58,717 >> آیا می توانید آن را افزایش؟ 59 00:01:58,717 --> 00:02:00,050 نگه دارید در دوم، من را بالا ببرد. 60 00:02:00,050 --> 00:02:00,924 زوم در روی درب. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -بزرگنمایی. 63 00:02:02,586 --> 00:02:03,490 -بیا تو. 64 00:02:03,490 --> 00:02:03,990 -بیشتر. 65 00:02:03,990 --> 00:02:04,690 صبر کن، متوقف شود. 66 00:02:04,690 --> 00:02:05,190 -متوقف کردن. 67 00:02:05,190 --> 00:02:05,970 مکث آن است. 68 00:02:05,970 --> 00:02:09,460 چرخش 75 درجه به ما سراسر عمودی، لطفا. 69 00:02:09,460 --> 00:02:10,962 -متوقف کردن. 70 00:02:10,962 --> 00:02:14,040 بازگشت به بخش در مورد درب، دوباره و دوباره. 71 00:02:14,040 --> 00:02:15,860 >> -Got تقویت تصویر بیت مپ است که می تواند؟ 72 00:02:15,860 --> 00:02:18,776 >> -Hey، شاید ما می توانید پرادیپ استفاده روش سن به ویندوز را ببینید. 73 00:02:18,776 --> 00:02:20,372 نرم افزار -این دولت از هنر است. 74 00:02:20,372 --> 00:02:21,845 >> بانک ویژه خاموش است. 75 00:02:21,845 --> 00:02:24,300 >> -With سمت راست ترکیبی از الگوریتم 76 00:02:24,300 --> 00:02:26,755 >> حذف گرفته -He است الگوریتم به سطح بعدی، 77 00:02:26,755 --> 00:02:28,730 و من می توانید آنها را به استفاده از افزایش این عکس. 78 00:02:28,730 --> 00:02:31,286 >> قفل در و بزرگ محور z. 79 00:02:31,286 --> 00:02:32,560 >> -بهبود. 80 00:02:32,560 --> 00:02:33,100 >> -بهبود. 81 00:02:33,100 --> 00:02:33,600 >> -بهبود. 82 00:02:33,600 --> 00:02:34,960 یخ و بالا بردن. 83 00:02:34,960 --> 00:02:37,180 >> [END پخش] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. مالان: خوب، پس همه کسانی که در واقع کلمات. 85 00:02:41,160 --> 00:02:44,450 آنها فقط صحافی با هم در یک راه که در واقع منطقی نیست. 86 00:02:44,450 --> 00:02:48,400 و، در واقع، CS50 و دوره مانند آن تمایل به خراب کردن بسیاری از تلویزیون و فیلم 87 00:02:48,400 --> 00:02:48,900 برای شما. 88 00:02:48,900 --> 00:02:52,330 زیرا زمانی که آن دسته از کارشناسان کامپیوتر می تند کردن شرایط و گفت 89 00:02:52,330 --> 00:02:56,860 چیزهای فانتزی مانند بردارهای ویژه، و محور z، 90 00:02:56,860 --> 00:02:59,572 و هر تعداد از دیگر در واقع از نظر فنی بیشتر، 91 00:02:59,572 --> 00:03:02,030 آنها واقعا فقط رشته کلمات با هم اغلب. 92 00:03:02,030 --> 00:03:05,020 است که یکی از امیدهای ما این است که، به عنوان یک عارضه جانبی از مصرف دوره های 93 00:03:05,020 --> 00:03:08,245 شبیه به این، مردم بیشتر در جهان در واقع قادر به وزن در شود 94 00:03:08,245 --> 00:03:12,040 و فقط همیشه تا کمی تحت تاثیر قرار کیفیت و دقت از آن فیلم های. 95 00:03:12,040 --> 00:03:14,350 >> در واقع، اجازه دهید نگاهی به واقعیت است. 96 00:03:14,350 --> 00:03:18,070 بنابراین در اینجا عکس کارکنان است مریم، یکی از همراهان آموزش ما است. 97 00:03:18,070 --> 00:03:20,050 و گمان می کنم او است مظنون به چیزی. 98 00:03:20,050 --> 00:03:23,730 و در عین حال، اما ذره ای از وجود دارد برخی از شواهد در چشم او، 99 00:03:23,730 --> 00:03:25,480 یا بازتابی از عینک است. 100 00:03:25,480 --> 00:03:30,760 خوب، اگر ما دقیقا به عنوان فیلم پیشنهاد، در جایی که ما زوم و "افزایش"، 101 00:03:30,760 --> 00:03:34,080 این اطلاعات چقدر است است در صورت ماری 102 00:03:34,080 --> 00:03:36,795 زمانی که شما یک تصویر ضبط با رزولوشن اصلی. 103 00:03:36,795 --> 00:03:39,120 >> و، در واقع، شما می توانید این نقاط را ببینید. 104 00:03:39,120 --> 00:03:41,900 و این چه هستند نام پیکسل، P-I-X-E-L-S، 105 00:03:41,900 --> 00:03:45,740 که فقط یک مربع به طور معمول است که یک نقطه که موسیقی یک تصویر است. 106 00:03:45,740 --> 00:03:49,200 و در روز، و در واقع حتی امروز با برخی از تلویزیون های LED امروز 107 00:03:49,200 --> 00:03:51,950 و یا تلویزیون های ال سی دی، اگر شما کردم در اتاق خود و یا در خانه، 108 00:03:51,950 --> 00:03:55,100 اگر شما به بالا فوق العاده به آن نزدیک، و به خصوص اگر آن یک تلویزیون تا حدودی بزرگتر، 109 00:03:55,100 --> 00:03:58,760 شما احتمالا می تواند حتی این نقطه را ببینید و این چیزی است که تشکیل یک تصویر. 110 00:03:58,760 --> 00:04:00,980 >> و هیچ بیشتر وجود دارد اطلاعات از این است. 111 00:04:00,980 --> 00:04:05,400 ما می توانیم "افزایش"، به این معنا از صاف کردن همه چیز و از 112 00:04:05,400 --> 00:04:09,040 استنتاج نوع، نوع چه رنگ باید به آینده به چشم ماری شود 113 00:04:09,040 --> 00:04:10,910 به طوری که آن را در واقع تا پیکسلی است. 114 00:04:10,910 --> 00:04:14,510 اما اگر من زوم کردن در، وجود دارد پسر بد در چشم او است. 115 00:04:14,510 --> 00:04:16,600 دوست دارم که همه اطلاعاتی که ما داریم. 116 00:04:16,600 --> 00:04:18,920 شما نمی توانید ایجاد اطلاعات از چیزی. 117 00:04:18,920 --> 00:04:20,790 تنها یک محدود وجود دارد تعداد بیت وجود دارد. 118 00:04:20,790 --> 00:04:22,873 >> بنابراین در مجموعه مسائل 4، که در آن شما یک فرصت داشته باشند 119 00:04:22,873 --> 00:04:24,580 با این نوع از جهان بازی کند. 120 00:04:24,580 --> 00:04:27,610 در مجموعه مسائل 4، شما کشف دنیای گرافیک، و پزشکی قانونی، 121 00:04:27,610 --> 00:04:30,870 و در واقع کد ارسال که بازیابی تصاویر از دست داد. 122 00:04:30,870 --> 00:04:33,510 شما از کد ارسال که دستکاری تصاویر موجود 123 00:04:33,510 --> 00:04:36,120 و در نهایت درک چه در زیر هود. 124 00:04:36,120 --> 00:04:38,540 >> و، که معلوم است، آن را در واقع نه همه که پیچیده است. 125 00:04:38,540 --> 00:04:41,320 به عنوان مثال، اگر ما می خواستیم نشان دهنده یک صورت خندان که در آن 126 00:04:41,320 --> 00:04:44,160 با این پیکسل سیاه و سفید، و یا این نقاط سیاه و سفید، 127 00:04:44,160 --> 00:04:47,230 خب، ما به سادگی می تواند نشان دهنده آنها واقعا به عنوان بیت مپ. 128 00:04:47,230 --> 00:04:50,040 و اگر شما همیشه شنیده بود که بیت مپ بیان، شاید 129 00:04:50,040 --> 00:04:52,330 آن شروع می شود را به یک کمی بیشتر حس امروز. 130 00:04:52,330 --> 00:04:53,580 >> ما در حال حاضر می دانند چه بیتی است. 131 00:04:53,580 --> 00:04:54,160 0 یا 1 است. 132 00:04:54,160 --> 00:04:56,201 و یک نقشه فقط چیزی است مانند یک تکه کاغذ 133 00:04:56,201 --> 00:04:59,180 که به شما می دهد و شاید یک شبکه از x و y مختصات. 134 00:04:59,180 --> 00:05:00,540 بنابراین در اینجا یک بیت مپ است. 135 00:05:00,540 --> 00:05:03,680 آن یک نقشه از بیت به موجب آن یک 1 است که ظاهرا 136 00:05:03,680 --> 00:05:07,857 رفتن به نمایندگی یک پیکسل سفید، و یک 0 است که برای نشان دادن یک پیکسل سیاه و سفید. 137 00:05:07,857 --> 00:05:09,440 اما ما قطعا می تواند آن را تلنگر در اطراف. 138 00:05:09,440 --> 00:05:11,648 این واقعا مهم نیست تا زمانی که ما سازگار است. 139 00:05:11,648 --> 00:05:15,570 و در اینجا این است که چگونه در داخل، در binary-- از حافظه کامپیوتر، و یا حتی در داخل 140 00:05:15,570 --> 00:05:18,160 یک فایل بر روی دیسک خود را drive-- می تواند شما را ذخیره 141 00:05:18,160 --> 00:05:20,240 ساده ترین تصاویر صورت خندان. 142 00:05:20,240 --> 00:05:23,990 اما چیزی که ما، البته، فاقد این تصویر؟ 143 00:05:23,990 --> 00:05:24,610 رنگ، درست است؟ 144 00:05:24,610 --> 00:05:28,220 این یک قدم بعدی واضح است و یا ارتقاء به بهبود این با رنگ. 145 00:05:28,220 --> 00:05:32,230 بنابراین متاسفانه فقط با یک بیتی، 0 یا 1، ما می تواند رنگ را نمایندگی کند. 146 00:05:32,230 --> 00:05:36,100 که می تواند قرمز یا آبی و یا سیاه و سفید، و یا سفید، یا سبز، و یا صورتی، 147 00:05:36,100 --> 00:05:37,420 و یا هر جفت از رنگ. 148 00:05:37,420 --> 00:05:40,860 اما برای سادگی کار، ما فقط فرض سیاه و سفید. 149 00:05:40,860 --> 00:05:45,930 >> پس چه منطقی ما اگر ما نیاز داریم خواهید به پیاده سازی رنگ در یک تصویر؟ 150 00:05:45,930 --> 00:05:49,080 چه چیزی ما را انجام دهید؟ 151 00:05:49,080 --> 00:05:51,900 اگر عامل محدود کننده در اینجا این است که با یک بیت شما فقط می توانید 152 00:05:51,900 --> 00:05:55,977 نشان دادن دو کشور، 0 یا 1، سفید و یا سیاه و سفید، چه چیزی می خواهید کاری انجام دهید؟ 153 00:05:55,977 --> 00:05:56,810 مخاطبان: بیشتر داده ها. 154 00:05:56,810 --> 00:05:58,813 DAVID J. مالان: بیت بیشتر، آره اطلاعات بیشتر، بیت بیشتر است. 155 00:05:58,813 --> 00:06:01,440 و، در واقع، که دقیقا چگونه تصاویر رنگی شده است. 156 00:06:01,440 --> 00:06:05,120 به جای استفاده از یک بیت، یک 0 یا 1 را برای هر پیکسل، هر نقطه، 157 00:06:05,120 --> 00:06:06,170 شما فقط استفاده از چندین. 158 00:06:06,170 --> 00:06:09,660 شاید استفاده از 8، شاید، که معمولا به با استفاده از 24، و در واقع، در مجموعه مسائل 159 00:06:09,660 --> 00:06:13,300 4، شما را با یک فایل بازی فرمت که با استفاده از 24 بیت به طور معمول. 160 00:06:13,300 --> 00:06:15,430 >> اما بسیاری از شما احتمالا آشنا با فرمت JPEG. 161 00:06:15,430 --> 00:06:17,460 اگر شما تا کنون گرفته ام یک عکس بر روی گوشی شما، 162 00:06:17,460 --> 00:06:20,360 و یا آپلود و یا چیزی دیده می شود در فیس بوک، و یا فلیکر، هر تعداد 163 00:06:20,360 --> 00:06:24,882 از وب سایت مبتنی بر عکس، شما احتمالا یک تصویر JPEG قبل از دیده می شود. 164 00:06:24,882 --> 00:06:27,840 و معلوم است، این فایل فرمت ما قصد داریم به استفاده در pset 4، 165 00:06:27,840 --> 00:06:30,340 به موجب آن شما در حال رفتن به به بازیابی تصاویر 166 00:06:30,340 --> 00:06:35,160 که من به طور تصادفی از یک را حذف کرده اید کارت حافظه خراب شده در دوربین، 167 00:06:35,160 --> 00:06:35,800 اگر تو بخواهی. 168 00:06:35,800 --> 00:06:38,490 >> و معلوم است که حتی اگر JPEG sophisticated-- بسیار است 169 00:06:38,490 --> 00:06:40,906 آن را بسیار پیچیده تر از نقطه های سیاه و سفید 170 00:06:40,906 --> 00:06:44,480 ما شاهد یک لحظه پیش، به دلیل وجود دارد الگوریتم های فانتزی است که در واقع 171 00:06:44,480 --> 00:06:47,410 استفاده می شود برای فشرده سازی یک JPEG، بنابراین که شما می توانید واقعا خوب است، 172 00:06:47,410 --> 00:06:49,832 تصویر با کیفیت اما با استفاده از نسبتا چند بیت. 173 00:06:49,832 --> 00:06:51,790 و ما به آمده فشرده سازی قبل از اینکه طولانی. 174 00:06:51,790 --> 00:06:56,280 به نظر می رسد که برای اولین بار سه بایت در یک image-- JPEG 175 00:06:56,280 --> 00:07:02,750 بدون توجه به آنچه شما یک عکس گرفته شده of-- ارزش 255، 216، 255 می باشد. 176 00:07:02,750 --> 00:07:05,990 >> به عبارت دیگر، اگر شما فقط دید که الگوی بیت، 177 00:07:05,990 --> 00:07:09,180 در اینجا به عنوان سه نشان بایت، یا 24 بیت کل، 178 00:07:09,180 --> 00:07:13,810 با احتمال بالا شما می توانید استنباط کنیم که شما به دنبال در این سه برای اولین بار 179 00:07:13,810 --> 00:07:15,230 بایت از JPEG. 180 00:07:15,230 --> 00:07:18,040 و این چیزی است شناخته شده است به عنوان امضای یک JPEG. 181 00:07:18,040 --> 00:07:20,540 بسیاری از فرمت های فایل های خارج تمایل به شروع وجود دارد 182 00:07:20,540 --> 00:07:23,735 با الگوهای خاص از 0s و 1S، به طوری که ویندوز و Mac OS و iOS 183 00:07:23,735 --> 00:07:28,272 و آندروید دانید چه نوع فایل آنها هستند، علاوه بر به فایل اصطلاح 184 00:07:28,272 --> 00:07:29,730 فرمت که تعداد زیادی از فایل است. 185 00:07:29,730 --> 00:07:32,590 اگر شما .jpg نوع، که این یکی دیگر از نشانه به کامپیوتر است. 186 00:07:32,590 --> 00:07:35,310 >> بنابراین اجازه دهید در حال حاضر در این نگاه کمی فنی تر. 187 00:07:35,310 --> 00:07:37,390 ما می دانیم که اعشاری سیستم 0 تا 9 است. 188 00:07:37,390 --> 00:07:38,740 ما می دانیم که دوتایی 0 و 1 است. 189 00:07:38,740 --> 00:07:41,842 و اگر شما فکر می کنم به PSet 0، ما تو را به گریبان شدن با 190 00:07:41,842 --> 00:07:43,800 برای کمی، چیزی نام هگزادسیمال، 191 00:07:43,800 --> 00:07:47,320 در آن شما باید 16 رقم، به جای 10 یا به جای 2. 192 00:07:47,320 --> 00:07:50,405 و این رقم، بر اساس قرارداد، 0 تا 9 و سپس یک 193 00:07:50,405 --> 00:07:55,040 از طریق F، که در آن f نشان دهنده چه عدد دهدهی، فقط به عنوان یک سلامت عقل سریع 194 00:07:55,040 --> 00:07:56,640 بررسی؟ 195 00:07:56,640 --> 00:07:57,610 بنابراین، 15. 196 00:07:57,610 --> 00:08:01,390 و باید بیانگر 10، فقط با ماهیت سفارش که به من داده است. 197 00:08:01,390 --> 00:08:04,350 این فقط یک کنوانسیون خودسرانه است، اما آن را کاملا استاندارد. 198 00:08:04,350 --> 00:08:06,870 >> بنابراین اگر ما در این الگو نگاه سه بایت اجازه دهید 199 00:08:06,870 --> 00:08:09,620 فقط شروع به آن نگاه کنید در شیوه ای سازگار با 200 00:08:09,620 --> 00:08:12,450 دانشمندان کامپیوتر به طور کلی در نگاه و فکر می کنم در مورد فایل های. 201 00:08:12,450 --> 00:08:15,580 شما قطعا می توانید در مورد فکر می کنم فایل های در 0s و، و 1S، و اعشاری، 202 00:08:15,580 --> 00:08:19,340 اما در واقعیت، ما تمایل به استفاده باینری یا به طور معمول hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 از PSet 0. 204 00:08:20,760 --> 00:08:25,857 بنابراین اجازه دهید من پیشنهاد می کنند که 255، 216، و 255 فقط این الگوهای از 0s و 1S می باشد. 205 00:08:25,857 --> 00:08:28,440 و شما می توانید این را بررسی کنید اگر شما می خواهید به انجام محاسبات ریاضی از هفته 0. 206 00:08:28,440 --> 00:08:30,810 اما در حال حاضر، فقط فرض که این در واقع درست است. 207 00:08:30,810 --> 00:08:33,850 من فقط بازنویسی کرده ام سه رقم اعشار اعداد را به عنوان سه مقدار باینری است. 208 00:08:33,850 --> 00:08:36,100 در حال حاضر آنچه که من قصد انجام دهید این است فقط اضافه کردن برخی از فضای سفید، 209 00:08:36,100 --> 00:08:37,266 فقط به خاطر خوانایی است. 210 00:08:37,266 --> 00:08:39,940 و توجه من فقط رفتن به حرکت همه چیز از هم جدا. 211 00:08:39,940 --> 00:08:43,090 بنابراین قبل از، پس از، قبل، بعد. 212 00:08:43,090 --> 00:08:46,180 من انجام هیچ چیز جالب دیگر از گسترش همه چیز تا 213 00:08:46,180 --> 00:08:50,380 که متوجه هر مجموعه ای از هشت بیت در حال حاضر دو مجموعه از چهار بیت است. 214 00:08:50,380 --> 00:08:54,920 دلیل این است که مبنای شانزده مفید است به خصوص مد روز 215 00:08:54,920 --> 00:09:00,930 چون هر رقم مبنای شانزده 0 از طریق F، یا بیشتر به طور خاص از طریق 15 0، 216 00:09:00,930 --> 00:09:03,430 می توان ارائه دقیقا با چهار بیت است. 217 00:09:03,430 --> 00:09:07,960 به عبارت دیگر، در مبنای شانزده اگر شما می خواهید برای نشان دادن یک 0، آن را فقط 0000، 218 00:09:07,960 --> 00:09:08,780 چهار صفر. 219 00:09:08,780 --> 00:09:13,997 و اگر شما می خواهید برای نشان 15، آن 1111، که چهار بیت است. 220 00:09:13,997 --> 00:09:16,080 و اگر شما انجام محاسبات ریاضی، اگر این محل آنهایی است، 221 00:09:16,080 --> 00:09:18,210 این محل 16S است، که رفتن به you-- 222 00:09:18,210 --> 00:09:19,960 نه که رفتن to-- با عرض پوزش، در دودویی، 223 00:09:19,960 --> 00:09:23,660 که رفتن به شما 15 را، آنهایی که محل، محل twos، چهار دست و پا و هشت است. 224 00:09:23,660 --> 00:09:26,821 بنابراین اجازه دهید من پیشنهاد می کنند که که در سمت چپ مجموعه ای از چهار بیت 225 00:09:26,821 --> 00:09:28,070 چیزی است که ما در حال رفتن به F پاسخ. 226 00:09:28,070 --> 00:09:30,110 این بزرگترین عدد به شما می توانید با چهار بیت را نمایندگی کند. 227 00:09:30,110 --> 00:09:33,300 و ما در حال حاضر از هگزادسیمال می دانم، F بزرگترین رقم در مبنای شانزده است. 228 00:09:33,300 --> 00:09:36,020 ما f دیگری وجود دارد کردم، دو بیش از وجود دارد. 229 00:09:36,020 --> 00:09:38,980 و در حال حاضر، فقط در ایمان را که من حق ریاضی انجام داده اند 230 00:09:38,980 --> 00:09:41,890 و نیمه چپ از کسانی که بیت، 1101، 231 00:09:41,890 --> 00:09:43,980 همان D در مبنای شانزده است. 232 00:09:43,980 --> 00:09:46,490 و دست راست، 1000، تنها 8. 233 00:09:46,490 --> 00:09:48,140 >> و دید که یکی آسان، درست است؟ 234 00:09:48,140 --> 00:09:51,670 8 represents-- است در زیر است که به جای هشت. 235 00:09:51,670 --> 00:09:56,040 بنابراین ما باید یکی در ستون هشت و هیچ چیز در چهار دست و پا که، Twos و یا آنهایی که. 236 00:09:56,040 --> 00:09:59,830 بنابراین در حال حاضر مرسوم، انسان تمایل به رقم مبنای شانزده شبیه به این، 237 00:09:59,830 --> 00:10:03,000 شما فقط آنها را له با هم، و سپس شما آنها را با 0x پیشوند. 238 00:10:03,000 --> 00:10:05,920 این بدان معنی است چیزی جز یک سرنخ بصری به human-- 239 00:10:05,920 --> 00:10:10,350 اینجا می آید یک value-- هگزادسیمال دلیل در غیر این صورت آن را نمی ممکن آشکار است. 240 00:10:10,350 --> 00:10:13,629 >> که است که می گویند، در نهایت، که الگوی صفر و آنهایی که، 241 00:10:13,629 --> 00:10:16,170 و یا الگوی مبنای شانزده معادل عددی که شما 242 00:10:16,170 --> 00:10:18,990 رفتن به شروع به دنبال در مجموعه مسائل 4 this-- است 243 00:10:18,990 --> 00:10:22,120 و مجموعه ای مشکل 4 تنظیمات راه رفتن خواهد شد شما از طریق این در detail-- بیشتر 244 00:10:22,120 --> 00:10:25,344 اما متوجه به عنوان نوعی از محرمانه به عنوان این ممکن است در نگاه اول نگاه کنید، 245 00:10:25,344 --> 00:10:27,010 شما در حال رفتن به شروع به دیدن این زیادی. 246 00:10:27,010 --> 00:10:30,320 و در واقع، حتی در GDB، در دیباگر ما در روز دوشنبه معرفی 247 00:10:30,320 --> 00:10:35,440 و دن در pset 3 معرفی است، رفتن به اغلب شما مقادیر هگزادسیمال نشان 248 00:10:35,440 --> 00:10:39,910 فقط به خاطر اینکه آنها تمایل به بیشتر معمولی از دهدهی و یا باینری 249 00:10:39,910 --> 00:10:41,157 در جهان از کامپیوتر و رایانه. 250 00:10:41,157 --> 00:10:42,490 حالا اجازه دهید این را به چهار چوب قرار داده است. 251 00:10:42,490 --> 00:10:48,040 بسیاری از شما ممکن است به یاد داشته باشید این تصویر در اینجا، که از چه آمد؟ 252 00:10:48,040 --> 00:10:51,240 ویستا، بنابراین حتی زودتر از که، ویندوز XP این اولین بود. 253 00:10:51,240 --> 00:10:52,620 بنابراین این یک چشم انداز زیبا است. 254 00:10:52,620 --> 00:10:55,940 و در واقع، اگر شما بهم زدن در اطراف online-- من فکر می کنم یک مقاله ویکیپدیا است، 255 00:10:55,940 --> 00:11:00,110 آن کسی که بسیار شگفت آور به بیرون رفت این مکان در جهان راه اندازی 256 00:11:00,110 --> 00:11:02,240 خود و یا دوربین خود را در دقیقا place-- راست 257 00:11:02,240 --> 00:11:06,510 و امروز به نظر می رسد اما like-- آن را دقیقا تنظیم است. 258 00:11:06,510 --> 00:11:10,060 این تصویر، هر چند، در یک فایل فرمت به نام بیت مپ، B-M-P. 259 00:11:10,060 --> 00:11:12,910 و ما در حال رفتن به یک فوق العاده نگاه سریع در چه معناست. 260 00:11:12,910 --> 00:11:17,770 >> اما بیت مپ فقط یک راه مختلف است نمایندگی تصاویر هنوز هم با استفاده پیکسل 261 00:11:17,770 --> 00:11:19,580 در 0s و 1S، در نهایت. 262 00:11:19,580 --> 00:11:23,282 اما در نگاه سریع، آن را تا یک امضای جالب تر 263 00:11:23,282 --> 00:11:24,490 در آغاز از فایل. 264 00:11:24,490 --> 00:11:26,670 این فقط سه نیست بایت، و نه وجود دارد 265 00:11:26,670 --> 00:11:30,770 یک دسته کامل از الگوهای از بایت که به معنی از پیش تعیین شده اند. 266 00:11:30,770 --> 00:11:34,490 به عنوان مثال، در جایی در چند کلمه در اولین یک تصویر بیت مپ 267 00:11:34,490 --> 00:11:37,440 در حال رفتن به اندازه تصویر، عرض تصویر، 268 00:11:37,440 --> 00:11:40,390 ارتفاع تصویر، بنابراین فراداده مفید باشد، اگر شما خواهد شد. 269 00:11:40,390 --> 00:11:43,940 اطلاعات مفید که فتوشاپ و یا برنامه هر گرافیک شما با استفاده از 270 00:11:43,940 --> 00:11:45,180 ممکن است در واقع در مورد مراقبت. 271 00:11:45,180 --> 00:11:47,170 >> بنابراین بیشتر در مورد این مشکل تنظیم 4، اما این 272 00:11:47,170 --> 00:11:49,220 فقط می گویند که در پایان روز 273 00:11:49,220 --> 00:11:52,390 تمام فرمت های فایل اس ام اس جدید برای years-- فایل های مایکروسافت ورد، 274 00:11:52,390 --> 00:11:55,820 فایل های اعداد، فایل های اکسل، هر تعداد از فرمت های فایل های 275 00:11:55,820 --> 00:11:57,770 که ممکن است برخی از آنها پسوند فایل شناخته شده 276 00:11:57,770 --> 00:12:00,130 فقط 0s و 1S در زیر هود هستند. 277 00:12:00,130 --> 00:12:02,970 و انسان تصمیم گرفته اند چه کنوانسیون هستند، 278 00:12:02,970 --> 00:12:08,340 چه الگوهای از 0s و 1S نشان یک فایل Word در مقابل یک فایل اکسل، 279 00:12:08,340 --> 00:12:10,322 در مقابل هر تعداد از فرمت های فایل های دیگر است. 280 00:12:10,322 --> 00:12:12,780 بنابراین در pset 4، شما یک دارند فرصت با که بازی کند. 281 00:12:12,780 --> 00:12:14,405 >> ولی معنی آن را به یک ساختار. 282 00:12:14,405 --> 00:12:18,012 این در واقع یک SEGUE زیبا اکنون به C است که تنها یک زن و شوهر 283 00:12:18,012 --> 00:12:20,220 ویژگی های اضافی است که ما در عین حال نبود. 284 00:12:20,220 --> 00:12:24,230 این زبان یک زبان بسیار کوچک و یکی از این از ویژگی های خوب در مورد C یک ساختار است. 285 00:12:24,230 --> 00:12:27,300 به عنوان مثال، اگر شما می خواستم به represent-- اجازه دهید 286 00:12:27,300 --> 00:12:33,690 می گویند شما می خواستم به یک متغیر است که نشان دهنده یک دانش آموز در برخی از برنامه های. 287 00:12:33,690 --> 00:12:37,330 شاید شما یک دوره نوشتن برنامه ثبت نام، و یا خرید هسته ای 288 00:12:37,330 --> 00:12:38,870 ابزار، و یا چیزی شبیه به آن. 289 00:12:38,870 --> 00:12:42,922 قطعه از داده های مرتبط چیست به یک دانش آموز که به ذهن می آیند؟ 290 00:12:42,922 --> 00:12:44,880 مانند یک دانش آموز است نمایندگی با چه مقادیری؟ 291 00:12:44,880 --> 00:12:45,732 آره؟ 292 00:12:45,732 --> 00:12:46,940 شما باید یک نام به عنوان یک دانش آموز. 293 00:12:46,940 --> 00:12:48,900 یک دانش آموز معمولی چه چیز دیگری ندارد داشته باشد؟ 294 00:12:48,900 --> 00:12:49,320 >> مخاطبان: [نامفهوم] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. مالان: بنابراین، با عرض پوزش. 296 00:12:50,200 --> 00:12:50,660 >> مخاطبان: سن. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. مالان: به سن و یا تولد معادل، بله. 298 00:12:52,980 --> 00:12:53,557 چه چیز دیگری؟ 299 00:12:53,557 --> 00:12:54,390 مخاطبان: شماره ID؟ 300 00:12:54,390 --> 00:12:57,460 DAVID J. مالان: بنابراین شماره ID، شاید یک شماره تلفن، شاید یک خوابگاه، و یا خانه، 301 00:12:57,460 --> 00:12:58,670 یا کالج، و یا چیزی شبیه به آن. 302 00:12:58,670 --> 00:13:01,820 هر تعداد از قطعات داده هایی را که شما ممکن است در لیست مخاطبین خود را 303 00:13:01,820 --> 00:13:03,890 است آنچه ممکن است یک دانش آموز را تعریف کنیم. 304 00:13:03,890 --> 00:13:08,490 بنابراین اگر ما می خواستیم به انجام این کار، در کد، ما ممکن است چیزی ساده مانند انجام این کار. 305 00:13:08,490 --> 00:13:15,670 ما ممکن است یک برنامه به طوری که اجازه دهید تا به می گویند، اعضای هیات اصلی (خالی). 306 00:13:15,670 --> 00:13:18,920 و اگر من می خواهم برای نشان دادن یک دانش آموز من ممکن است، برای مثال، 307 00:13:18,920 --> 00:13:24,330 یک رشته نام به نام برای دانش آموزان، یک رشته به نام خوابگاه برای که دانش آموز، 308 00:13:24,330 --> 00:13:26,900 شاید یک نوع int به نام ID که دانش آموز. 309 00:13:26,900 --> 00:13:30,840 و چون من با استفاده از رشته، من نیاز به رفتن به عقب و قرار داده تا CS50.h. 310 00:13:30,840 --> 00:13:33,300 شاید من نیاز به رفتن به stdio.h. 311 00:13:33,300 --> 00:13:38,190 بنابراین اجازه دهید من پیشگیرانه آن را انجام دهد و من رفتن به به این student.c برای 312 00:13:38,190 --> 00:13:40,080 و صرفه جویی در این. 313 00:13:40,080 --> 00:13:44,206 >> و در حال حاضر من می توانم چیزی را انجام دهید با این متغیرها باشد. 314 00:13:44,206 --> 00:13:46,830 و ما فقط رفتن به ارسال که به عنوان یک نظر در شبه کد، 315 00:13:46,830 --> 00:13:48,829 چرا که آن را جالب نیست آنچه که ما برای اکنون انجام دهید. 316 00:13:48,829 --> 00:13:51,242 خوب، پس این برنامه ای است که به نحوی که دانش آموز ذخیره می کند. 317 00:13:51,242 --> 00:13:53,450 چه من می خواهم به انجام اگر من می خواهید برای ذخیره دو دانش آموز؟ 318 00:13:53,450 --> 00:13:55,991 بنابراین غریزه اول من است رفتن به همه حق است، یک دقیقه صبر کنید، 319 00:13:55,991 --> 00:14:01,920 اگر یکی دیگر از دانشجویان دارند چرا من نه فقط نام و نام خانوادگی رشته 2، رشته خوابگاه 2، 320 00:14:01,920 --> 00:14:04,190 ID2 نوع int است. 321 00:14:04,190 --> 00:14:06,540 و ما رفته انجام داده ام این جاده قبل از 322 00:14:06,540 --> 00:14:10,890 و چه راه حل ما برای چه به نظر می رسد بود به نوع رب کپی hackish 323 00:14:10,890 --> 00:14:11,555 کار در اینجا؟ 324 00:14:11,555 --> 00:14:12,346 مخاطبان: یک آرایه. 325 00:14:12,346 --> 00:14:13,830 DAVID J. مالان: آره، ما می تواند یک آرایه استفاده کنید. 326 00:14:13,830 --> 00:14:15,620 راست این بسیار به سرعت گنده شود. 327 00:14:15,620 --> 00:14:18,453 شما باید به مرتب کردن بر اساس خودسرانه شروع نامگذاری همه این متغیرها باشد. 328 00:14:18,453 --> 00:14:22,190 و شما، انسان، باید برای نگه داشتن پیگیری که مربوط NAME2 OK 329 00:14:22,190 --> 00:14:25,060 با dorm2 با ID2 مربوط. 330 00:14:25,060 --> 00:14:26,200 این فقط یک ظرف غذا می شود. 331 00:14:26,200 --> 00:14:29,350 پس از آن بسیار ساده تر، یاد از چند هفته پیش، 332 00:14:29,350 --> 00:14:34,300 فقط نیاز به نام رشته به نام و شاید ما سه نفر از کسانی را. 333 00:14:34,300 --> 00:14:36,940 و پس از آن شاید ما باید خوابگاه رشته و 334 00:14:36,940 --> 00:14:41,900 سه تا از این، و یا با یک ثابت، اعضای هیات شناسه و سه تا از این. 335 00:14:41,900 --> 00:14:45,250 اما حتی در حال حاضر این احساس درهم و برهم کمی، درست است. 336 00:14:45,250 --> 00:14:49,440 ما در حال صحبت کردن در مورد دانش آموزان و در عین حال من واقعا خانه در سطح پایین 337 00:14:49,440 --> 00:14:50,470 جزئیات پیاده سازی. 338 00:14:50,470 --> 00:14:52,790 دانش آموز یک نام و یک خوابگاه و ID است. 339 00:14:52,790 --> 00:14:59,814 >> چرا نمی توانم فقط یک متغیر به نام دانش آموز و پاسخ آن را. 340 00:14:59,814 --> 00:15:02,230 و اگر من می خواهم یکی دیگر از دانشجویان، چرا من فقط آن را T پاسخ. 341 00:15:02,230 --> 00:15:05,260 و یا اگر من می خواهم یک دسته کامل از دانش آموزان، چرا من نه فقط 342 00:15:05,260 --> 00:15:09,740 می گویند من یک کلاس از دانش آموزان، و آن را سه تن از آنها. 343 00:15:09,740 --> 00:15:12,470 به عبارت دیگر، چرا که نه می توانم با نوع داده خود من، به نام 344 00:15:12,470 --> 00:15:15,641 دانش آموزان، که در داخل آن است یک نام، یک ID است، یک خوابگاه است، 345 00:15:15,641 --> 00:15:16,890 هر تعداد از زمینه های دیگر است. 346 00:15:16,890 --> 00:15:19,030 و معلوم است شما می توانید دقیقا همان است که انجام می دهند. 347 00:15:19,030 --> 00:15:21,850 >> بنابراین C دارای این ویژگی به نام ساختار. 348 00:15:21,850 --> 00:15:24,700 که یکی از ویژگی های است که زبان اجازه می دهد تا ما را به انجام دقیقا این است. 349 00:15:24,700 --> 00:15:28,370 من قصد دارم به جلو بروید و باز کردن structs.h 350 00:15:28,370 --> 00:15:32,299 که در آن ما در حال رفتن برای دیدن زیر تعریف یک دانش آموز. 351 00:15:32,299 --> 00:15:35,215 به نظر می رسد - و این یکی حتی ساده تر از یک ID مربوط به 352 00:15:35,215 --> 00:15:36,080 یک لحظه قبل. 353 00:15:36,080 --> 00:15:39,120 اگر می خواهید به آمده تا با نوع داده خانگی خود را، 354 00:15:39,120 --> 00:15:42,750 و علاوه بر int و char و شناور و همه این کسانی که وجود داشته باشد، 355 00:15:42,750 --> 00:15:45,810 شما می توانید با معنای واقعی کلمه انجام نوشتن ساختار از typedef، 356 00:15:45,810 --> 00:15:47,880 سپس برخی از آکولاد، که در داخل آن شما 357 00:15:47,880 --> 00:15:51,460 لیست متغیرهای شما می خواهید معاشرت با این داده های سفارشی جدید 358 00:15:51,460 --> 00:15:55,670 نوع مانند یک نام و یک خوابگاه، و سپس بعد از آکولاد 359 00:15:55,670 --> 00:15:57,860 شما یک نام را به نوع داده جدید را. 360 00:15:57,860 --> 00:15:59,220 بنابراین، برای مثال، دانشجو. 361 00:15:59,220 --> 00:16:03,247 >> و چه خوب در مورد این در حال حاضر این است که اگر ما در کد مربوطه نگاه کنید، 362 00:16:03,247 --> 00:16:05,080 این کنوانسیون، برای اولین بار از همه است، برای قرار دادن این 363 00:16:05,080 --> 00:16:08,230 در یک فایل به نام چیزی نقطه ساعت، یک فایل هدر، که ما ندارد 364 00:16:08,230 --> 00:16:09,780 شروع به استفاده از خود بیش از حد. 365 00:16:09,780 --> 00:16:12,120 اما ما قصد داریم به شروع با استفاده از بسیار کمی است. 366 00:16:12,120 --> 00:16:18,650 و آنچه ما می توانیم با انجام این کار، در نهایت، در این چند خط کد 367 00:16:18,650 --> 00:16:22,130 است که دقیقا اعلام نوع داده ها، یک دانش آموز. 368 00:16:22,130 --> 00:16:23,230 و اکنون اجازه دهید آن استفاده کنید. 369 00:16:23,230 --> 00:16:27,274 >> من قصد دارم به حال حاضر به رفتن یک فایل به نام structs1.c. 370 00:16:27,274 --> 00:16:29,440 و اجازه دهید یک نگاه چند ویژگی است. 371 00:16:29,440 --> 00:16:32,250 بنابراین مسائل در اینجا این است بیشتر آشنا، و ما 372 00:16:32,250 --> 00:16:35,040 دوباره به چه چیزی نیست در یک لحظه آشنا. 373 00:16:35,040 --> 00:16:39,880 این درس از جمله خود من فایل هدر، جدید است که به عنوان خوب، 374 00:16:39,880 --> 00:16:42,580 به جز برای PSet 3 که در آن، به یاد بیاورید، ما باید helpers.h. 375 00:16:42,580 --> 00:16:45,150 بنابراین شما ممکن است helpers.h کد: #include یاد می آورند. 376 00:16:45,150 --> 00:16:49,381 >> چرا هر چند من با استفاده از نقل قول به جای براکت زاویه دار؟ 377 00:16:49,381 --> 00:16:50,630 هنگامی که بین آنها انتخاب کنم؟ 378 00:16:50,630 --> 00:16:52,310 تقریبا همیشه به نظر می رسد من به استفاده از براکت زاویه دار. 379 00:16:52,310 --> 00:16:55,040 و پس از آن، همه ناگهانی در خط شش من با استفاده از دو علامت. 380 00:16:55,040 --> 00:16:55,860 چرا ممکن است؟ 381 00:16:55,860 --> 00:16:56,700 آره؟ 382 00:16:56,700 --> 00:16:57,725 >> مخاطبان: [نامفهوم] 383 00:16:57,725 --> 00:16:59,350 DAVID J. مالان: اون واقعی، چه؟ 384 00:16:59,350 --> 00:17:00,559 رسید که در IDE خود را. 385 00:17:00,559 --> 00:17:02,475 DAVID J. مالان: آره، که در IDE واقعی من است. 386 00:17:02,475 --> 00:17:05,690 و اجازه دهید در IDE ساکن نیست، چرا که که فقط یک ابزار است که من با استفاده از. 387 00:17:05,690 --> 00:17:08,119 که در حال حاضر من دایرکتوری، به طور خاص. 388 00:17:08,119 --> 00:17:11,647 بنابراین structs.h فایل خود من است در IDE نصب نشده است، 389 00:17:11,647 --> 00:17:14,480 در سیستم عامل خود، و نه آن را در دایرکتوری جاری من است. 390 00:17:14,480 --> 00:17:16,910 بنابراین این کنوانسیون است اگر شما می خواهید شامل فایل هدر خود را، 391 00:17:16,910 --> 00:17:18,200 شما فقط استفاده از نقل قول دو برابر شود. 392 00:17:18,200 --> 00:17:23,290 >> چه ما این چیزی که در پاسخ خط 8، به طور کلی؟ 393 00:17:23,290 --> 00:17:25,200 این چیزی است که؟ 394 00:17:25,200 --> 00:17:28,220 چیزی define # است. 395 00:17:28,220 --> 00:17:31,040 این نشان دهنده ثابت، درست است؟ 396 00:17:31,040 --> 00:17:33,140 اگر شما می خواهید به یک ارزش در برنامه شما 397 00:17:33,140 --> 00:17:35,110 که شما با استفاده از یک طیف دسته از بار، آن را 398 00:17:35,110 --> 00:17:39,330 کنوانسیون خوب به آن عامل از، اعلام آن، با نماد هش 399 00:17:39,330 --> 00:17:43,340 تعریف، و سپس، بر اساس قرارداد، در تمام حروف بزرگ word-- هر چند آن را نمی 400 00:17:43,340 --> 00:17:45,320 به شدت لازم است، اما آن کنوانسیون انسان است 401 00:17:45,320 --> 00:17:47,210 سرمایه گذاری ثابت به به طوری که آنها پرش 402 00:17:47,210 --> 00:17:50,380 در شما فضای visually-- و سپس مقدار شما می خواهید به 403 00:17:50,380 --> 00:17:52,250 معادل نام است که ثابت است. 404 00:17:52,250 --> 00:17:56,110 هیچ نقطه و ویرگول، اما شما به سادگی که الگوی دنبال وجود دارد. 405 00:17:56,110 --> 00:17:57,770 >> پس چه هستم من در این کد واقعی انجام می دهند. 406 00:17:57,770 --> 00:18:00,660 بنابراین اجازه دهید نگاهی به برنامه اصلی در اینجا. 407 00:18:00,660 --> 00:18:04,080 در خط 12 به خاطر من شامل structs.h، 408 00:18:04,080 --> 00:18:06,492 من در حال حاضر در دارند جادویی من اختیار یک نوع داده جدید. 409 00:18:06,492 --> 00:18:09,200 من نه تنها دسترسی به INT دارند، و کاراکتر، و شناور، و رشته، 410 00:18:09,200 --> 00:18:10,060 و آبی و دیگران است. 411 00:18:10,060 --> 00:18:12,470 من در حال حاضر دسترسی به یک نوع داده های دانشجویی. 412 00:18:12,470 --> 00:18:17,740 بنابراین در خط 12، من از ترکیب دو ideas-- یک نوع داده های سفارشی و دو، 413 00:18:17,740 --> 00:18:18,940 با استفاده از یک آرایه. 414 00:18:18,940 --> 00:18:21,700 و بنابراین در این برنامه اگر من می خواهم به واقع حمایت از 415 00:18:21,700 --> 00:18:24,320 سه دانش آموزان مختلف در برنامه من، من 416 00:18:24,320 --> 00:18:30,480 می توانید به سادگی می گویند من یک متغیر را به نام دانش آموزان، که هر کدام 417 00:18:30,480 --> 00:18:32,970 است از دانش آموزان نوع، که من نوع داده های سفارشی است. 418 00:18:32,970 --> 00:18:35,890 و، به طور خاص، به من بدهد سه نفر از کسانی که در آرایه است. 419 00:18:35,890 --> 00:18:37,750 >> بنابراین در حال حاضر آنچه که ما در این برنامه انجام دهد؟ 420 00:18:37,750 --> 00:18:40,670 در اینجا تنها یک حلقه for تکرار 0-3، چرا که 421 00:18:40,670 --> 00:18:42,110 چه مقدار از دانش آموزان است. 422 00:18:42,110 --> 00:18:44,420 من فقط باعث کاربر من نام دانش آموز است. 423 00:18:44,420 --> 00:18:48,090 و سپس در خط 17، ما یک خط بیشتر آشنا. 424 00:18:48,090 --> 00:18:50,370 ما دوست قدیمی ما از GetString در سمت راست. 425 00:18:50,370 --> 00:18:52,345 و چه قطعه ای از نحو ظاهرا جدید، 426 00:18:52,345 --> 00:18:55,130 اگر شما هرگز در C برنامه ریزی ام قبل، و هرگز ساختمانها استفاده می شود؟ 427 00:18:55,130 --> 00:18:55,510 آره؟ 428 00:18:55,510 --> 00:18:56,417 >> مخاطبان ها: .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. مالان: در .name. 430 00:18:57,500 --> 00:19:01,220 اما این بیش از حد از یک جهش است، چون در حال حاضر دانش آموزان من در پرانتز 431 00:19:01,220 --> 00:19:02,590 به شما می دهد دانش آموز i ام. 432 00:19:02,590 --> 00:19:04,730 و اگر شما می خواهید به شیرجه رفتن در داخل از آن ساختار، 433 00:19:04,730 --> 00:19:09,490 شما فقط از یک دوره واحد و سپس نام متغیر در داخل، 434 00:19:09,490 --> 00:19:11,900 و یا اموال داخل است که شما می خواهید برای دسترسی به. 435 00:19:11,900 --> 00:19:14,816 به طور مشابه پس از آن، اگر من پس از آن بی درنگ کاربران، به من خوابگاه دانش آموز را، 436 00:19:14,816 --> 00:19:18,390 شما به طور مشابه می تواند ذخیره که رشته در متغیر خوابگاه داخل 437 00:19:18,390 --> 00:19:19,940 آن ساختار دانش آموز. 438 00:19:19,940 --> 00:19:21,410 >> و در حال حاضر همه چیز فانتزی است. 439 00:19:21,410 --> 00:19:24,420 و این است که به نگاه در شاید بسیاری کاملا به زودی. 440 00:19:24,420 --> 00:19:27,970 اما شما این به مراتب بیشتر در pset ببینید 4، پس بیایید فقط نگاه در آن در حال حاضر. 441 00:19:27,970 --> 00:19:33,364 به نظر می رسد که در خط 23 از طریق 38، شما چه فکر میکنید من شاید انجام می دهند؟ 442 00:19:33,364 --> 00:19:35,530 من نظرات را حذف کردیم برای امروز است، اما نسخه 443 00:19:35,530 --> 00:19:38,660 از کد های آنلاین برای مرجع تمام نظرات. 444 00:19:38,660 --> 00:19:40,171 چه به نظر می رسد من به انجام می شود؟ 445 00:19:40,171 --> 00:19:42,530 >> مخاطبان: صرفه جویی در فایل با تمام اطلاعاتی که کاربر وارد شده است. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. مالان: آره، دقیقا، این یک راه جدید است 447 00:19:44,530 --> 00:19:46,370 است که ما شاهد دو، یکی دیگر از ویژگی C، 448 00:19:46,370 --> 00:19:48,700 به موجب آن من می توانید فایل های خود را ایجاد. 449 00:19:48,700 --> 00:19:51,580 تا کنون، تقریبا هر برنامه شما نوشته شده است بی وطن است. 450 00:19:51,580 --> 00:19:53,334 به محض این که آن را انجام داده در حال اجرا، که در آن است. 451 00:19:53,334 --> 00:19:55,000 هیچ حافظه و یا خاطراتی از آن وجود دارد. 452 00:19:55,000 --> 00:19:56,110 هیچ فایل ذخیره شده وجود دارد. 453 00:19:56,110 --> 00:19:58,120 اما اگر شما نمی خواهید به صرفه جویی در ورودی است که 454 00:19:58,120 --> 00:20:02,100 اتفاق افتاده است، در یک بازی و یا یک برنامه مانند این، معلوم شد که می توانند انجام دهند. 455 00:20:02,100 --> 00:20:04,360 و شما این بیشتر ببینید در pset 4 و در بخش. 456 00:20:04,360 --> 00:20:08,661 اما این خط 23 اصل یک فایل به نام students.csv ایجاد می کند. 457 00:20:08,661 --> 00:20:10,160 و شما ممکن است دیده اند، قبل از این. 458 00:20:10,160 --> 00:20:14,250 حتی اگر شما هرگز قبل از CS مطالعه کرده ام، CSV متغیرهای کاما از هم جدا است. 459 00:20:14,250 --> 00:20:19,000 مثل یک مرد بسیار ضعیف هست نسخه از فایل اکسل، 460 00:20:19,000 --> 00:20:22,270 به این معنی که تواند باز شود در اکسل و در شماره اپل، 461 00:20:22,270 --> 00:20:23,830 و آن را تا سطر و ستون. 462 00:20:23,830 --> 00:20:26,485 اما آن را یک انحصاری نیست فرمت هایی مانند مایکروسافت و یا اپل. 463 00:20:26,485 --> 00:20:29,840 این فقط کاما از هم جدا است ارزش هایی که ما در یک لحظه را ببینید. 464 00:20:29,840 --> 00:20:31,010 >> و فقط یک حدس است. 465 00:20:31,010 --> 00:20:33,480 در خط 23، در بسیار پایان، آرگومان دوم من 466 00:20:33,480 --> 00:20:37,700 به این تابع جدید به نام f برای باز کردن فایل باز W است. 467 00:20:37,700 --> 00:20:39,430 چه چیزی ممکن است دلالت W؟ 468 00:20:39,430 --> 00:20:40,022 آره؟ 469 00:20:40,022 --> 00:20:41,260 >> رسید این اجازه می دهد تا شما را به فایل ارسال. 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. مالان: این اجازه می دهد تا شما را به فایل بنویسید. 471 00:20:42,630 --> 00:20:44,810 بنابراین یک زن و شوهر از انواع وجود دارد که ما در اینجا می توانید پلاگین در. 472 00:20:44,810 --> 00:20:47,184 اما اگر شما فقط می خواهید به خواندن فایل، این است که در آن نگاه کنید 473 00:20:47,184 --> 00:20:50,010 و خواندن آن را به حافظه، شما فقط نقل قول را تمام کردن "R" استفاده کنید. 474 00:20:50,010 --> 00:20:53,110 اگر می خواهید ارسال به فایل، شما با استفاده از نقل قول را تمام کردن "W". 475 00:20:53,110 --> 00:20:55,190 همچنین وجود دارد اضافه و یک زن و شوهر از چیزهای دیگر 476 00:20:55,190 --> 00:20:57,356 اگر شما می خواهید به تغییر فایل های موجود است. 477 00:20:57,356 --> 00:21:00,480 در حال حاضر ما قصد داریم برای حفظ دیدن این چیزی، پس از آن ما دوباره به خط 24. 478 00:21:00,480 --> 00:21:02,640 NULL، آن معلوم است، ارزش ویژه ای است که 479 00:21:02,640 --> 00:21:06,070 می توان با توابع خاص بازگشت اگر چیزی wrong-- رفته است 480 00:21:06,070 --> 00:21:08,490 اگر فایل وجود نداشته باشد، اگر شما از حافظه اجرا شود، 481 00:21:08,490 --> 00:21:09,620 یا یک دسته از اشتباهات دیگر. 482 00:21:09,620 --> 00:21:13,470 اما در حال حاضر، اجازه دهید فقط فرض کنیم که این چک کردن خطا فقط معمولی است. 483 00:21:13,470 --> 00:21:17,090 در اینجا در خط 26، من تکرار 0-3 بیش از همه دانش آموزان من. 484 00:21:17,090 --> 00:21:20,470 و این نوع از مرتب سازی بر از یک تابع جدید، fprintf، 485 00:21:20,470 --> 00:21:21,460 اما فقط یک حدس است. 486 00:21:21,460 --> 00:21:24,370 اگر تابع () printf فقط چاپ است یک رشته فرمت، 487 00:21:24,370 --> 00:21:26,507 چه fprintf احتمالا معنی است؟ 488 00:21:26,507 --> 00:21:27,590 مخاطبان: چاپ به یک فایل. 489 00:21:27,590 --> 00:21:29,290 DAVID J. مالان: چاپ یک رشته فرمت یک فایل. 490 00:21:29,290 --> 00:21:31,180 این چیزی است که اضافی F به معنی فایل است. 491 00:21:31,180 --> 00:21:36,420 و اولین آرگومان جدید را به متغیر است که نشان دهنده فایل خود را. 492 00:21:36,420 --> 00:21:38,866 سپس ما فقط یک فرمت اند رشته درست مثل printf است. 493 00:21:38,866 --> 00:21:40,740 و حتی اگر این نحو جدید است، این فقط 494 00:21:40,740 --> 00:21:44,610 معنی پلاگین به نام دانش آموز، پلاگین در خوابگاه دانشجویی، و پس از آن 495 00:21:44,610 --> 00:21:47,160 با fclose، بستن فایل. 496 00:21:47,160 --> 00:21:49,730 و پس از آن lastly-- این جدید است و ما به این آمده است 497 00:21:49,730 --> 00:21:53,240 قبل از long-- من آزاد دانش آموز به دلایل 498 00:21:53,240 --> 00:21:54,860 که در بالا وجود دارد اتفاق افتاده است. 499 00:21:54,860 --> 00:21:56,820 اما ما می آیند به که قبل از long-- 500 00:21:56,820 --> 00:21:59,820 که به دلیل چگونه GetString است در واقع در زیر هود کار. 501 00:21:59,820 --> 00:22:01,280 >> بنابراین اجازه دهید در اینجا نگاهی گذرا. 502 00:22:01,280 --> 00:22:04,380 اگر من نوع LS در دایرکتوری من، توجه کنید که من نمی 503 00:22:04,380 --> 00:22:09,360 یک فایل به نام students.csv، نه فقط وجود دارد، وجود ندارد. 504 00:22:09,360 --> 00:22:14,965 بنابراین اگر من در حال حاضر این برنامه را کامپایل، را ساختمانها-1،. / ساختمانها-1، 505 00:22:14,965 --> 00:22:20,570 و من قصد دارم به جلو بروید و تایپ در اندی، که در برکلی در دانشگاه ییل زندگی می کند. 506 00:22:20,570 --> 00:22:26,350 ما در حال رفتن به راب که زندگی در تایر این روز است. 507 00:22:26,350 --> 00:22:33,760 و اجازه دهید که در آن آمده تا با است، من فکر می کنم، ماریا در ماتر، 508 00:22:33,760 --> 00:22:35,100 اگر من به درستی به یاد. 509 00:22:35,100 --> 00:22:36,460 >> پس هیچ چیزی به نظر می رسد اتفاق می افتد. 510 00:22:36,460 --> 00:22:40,680 اما اگر من نوع LS در حال حاضر، است students.csv وجود دارد. 511 00:22:40,680 --> 00:22:43,080 اجازه دهید به جلو و students.csv باز کنید. 512 00:22:43,080 --> 00:22:46,050 این است که دوباره بسیار فرمت فایل سبک وزن است. 513 00:22:46,050 --> 00:22:49,570 اما من یک قرارداد ساده به تصویب رسید که که من دو سطر و ستون است. 514 00:22:49,570 --> 00:22:52,020 ستون اول است اول نام افراد. 515 00:22:52,020 --> 00:22:55,740 ستون دوم است که دانش آموز خوابگاه، یا کالج، و یا خانه، یا فلان چیز. 516 00:22:55,740 --> 00:22:57,900 و اکنون من این را نجات داد به طور دائم در یک فایل. 517 00:22:57,900 --> 00:22:59,280 >> پس از آن همه که جالب نیست. 518 00:22:59,280 --> 00:23:02,980 اما این در حال حاضر فقط یک سنگ پله است به قادر بودن به ادامه اطلاعات 519 00:23:02,980 --> 00:23:04,040 به طور دائم. 520 00:23:04,040 --> 00:23:08,340 بنابراین دیدن دهید در حال حاضر چه بیشتر ما می توانید با این و دیگر ویژگی های. 521 00:23:08,340 --> 00:23:10,729 اما در ابتدا، هر گونه سوال؟ 522 00:23:10,729 --> 00:23:12,145 که بسیاری بود، و سریع بود. 523 00:23:12,145 --> 00:23:16,131 اما شما یک مقدار زیادی دید بیشتر در pset 4، و همچنین. 524 00:23:16,131 --> 00:23:16,630 آره؟ 525 00:23:16,630 --> 00:23:19,360 >> مخاطبان: آیا راهی برای وجود دارد ادامه اضافه کردن نام به آن فایل؟ 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. مالان: پرسش خوبی است. 527 00:23:19,880 --> 00:23:21,800 آیا راهی برای ادامه وجود دارد اضافه کردن نام به آن فایل؟ 528 00:23:21,800 --> 00:23:22,340 بله. 529 00:23:22,340 --> 00:23:24,630 و، در واقع، اگر شما را تا پایان تا دوباره باز کردن فایل، 530 00:23:24,630 --> 00:23:26,780 شما می نقل قول استفاده تمام کردن "A" برای الحاق، 531 00:23:26,780 --> 00:23:31,090 که فقط اضافه کردن یک خط جدید، خط جدید دوباره و دوباره، دقیقا. 532 00:23:31,090 --> 00:23:32,010 سوال خوبی بود. 533 00:23:32,010 --> 00:23:32,950 سوال دیگر؟ 534 00:23:32,950 --> 00:23:33,450 آره؟ 535 00:23:33,450 --> 00:23:35,580 مخاطبان: اگر شما فرار برنامه دوباره در حال حاضر، 536 00:23:35,580 --> 00:23:38,000 آن را حفظ و اضافه کردن نام به فایل ها و یا آن را باز کردن یک فایل جدید؟ 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. مالان: آه، سوال خوب است. 538 00:23:38,740 --> 00:23:41,448 اگر برنامه شما زد دوباره راست اکنون، شاید در نام جدید تایپ، 539 00:23:41,448 --> 00:23:44,820 آن را به فایل اضافه کنید و یا بازنویسی فایل؟ 540 00:23:44,820 --> 00:23:47,420 در حالت دوم، چون من با استفاده از حالت الحاق نشده است. 541 00:23:47,420 --> 00:23:49,930 و چون من فقط کورکورانه هستم باز کردن فایل برای نوشتن، 542 00:23:49,930 --> 00:23:51,310 آن را فقط به بازنویسی فایل. 543 00:23:51,310 --> 00:23:54,570 بنابراین من در واقع نیاز به انجام است اضافه، اگر من می خواهم به واقع یک دراز مدت داشته باشد 544 00:23:54,570 --> 00:23:55,350 پایگاه داده است. 545 00:23:55,350 --> 00:23:58,220 >> در حال حاضر CSV مفید است، رک و پوست کنده، حتی برای مثل اگر شما writing-- 546 00:23:58,220 --> 00:24:00,100 و ما در نهایت خواهید دید این بعد از آن در ترم که 547 00:24:00,100 --> 00:24:01,455 ما با استفاده از CSV ها برای مقاصد دیگر. 548 00:24:01,455 --> 00:24:04,920 اگر شما می خواهید برای ذخیره تمام مردم که برای برخی از رویداد ثبت نام کرده اند، 549 00:24:04,920 --> 00:24:07,420 و یا برای دانش آموزان خود را امضا گروه، و یا چیزی شبیه به آن، 550 00:24:07,420 --> 00:24:10,330 ذخیره سازی داده ها در این نوع از فرمت فوق العاده راحت است. 551 00:24:10,330 --> 00:24:12,580 از آنجا که به معنای واقعی کلمه، اگر من به دانلود این فایل. 552 00:24:12,580 --> 00:24:14,540 من می توانم double-- و اجازه دهید در واقع این را امتحان کنید 553 00:24:14,540 --> 00:24:16,720 اگر من اکسل و یا شماره در اینجا. 554 00:24:16,720 --> 00:24:19,130 >> من قصد دارم به راست کلیک یا کنترل کلیک فایل من. 555 00:24:19,130 --> 00:24:20,020 متأسفیم. 556 00:24:20,020 --> 00:24:21,830 راست کلیک کنید و یا کنترل کلیک فایل من. 557 00:24:21,830 --> 00:24:24,960 در تاریخ آمده، موس من همکاری نمی کند. 558 00:24:24,960 --> 00:24:32,694 Download-- من قصد دارم به دانلود تمام فایل های اینجا تا 559 00:24:32,694 --> 00:24:33,860 فقط من می توانم این یکی را گرفتن. 560 00:24:33,860 --> 00:24:37,850 و اجازه دهید ببینیم اگر این کار اولین بار students.csv-- 561 00:24:37,850 --> 00:24:39,310 من را فعال کردهاید. 562 00:24:39,310 --> 00:24:41,360 حالا آنها می خواهند برای دیدن اطلاعات تماس من. 563 00:24:41,360 --> 00:24:44,310 در حال حاضر، من نیاز به ثبت نام کنید. 564 00:24:44,310 --> 00:24:47,620 چگونه از آن آسان است برای استفاده از CSV ها؟ 565 00:24:47,620 --> 00:24:50,840 بله، آن را نگه دارید تا تاریخ. 566 00:24:50,840 --> 00:24:52,375 OK، در حال حاضر ما آماده برای کلاس است. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK، آه، تازه چه خبر؟ 569 00:25:00,370 --> 00:25:02,920 OK، نزدیک است. 570 00:25:02,920 --> 00:25:04,750 که جادویی بود. 571 00:25:04,750 --> 00:25:07,280 OK، در حال حاضر ما برای به روز رسانی. 572 00:25:07,280 --> 00:25:10,890 و در حال حاضر، آن را فراموش کرده چه فایل من در اصل باز، 573 00:25:10,890 --> 00:25:13,090 اما آنچه وجود دارد a-- ما بروید. 574 00:25:13,090 --> 00:25:16,341 خوب، پس در حال حاضر ما یک فایل اکسل. 575 00:25:16,341 --> 00:25:18,290 متشکرم. 576 00:25:18,290 --> 00:25:20,764 >> خوب، پس آنچه من انجام داد که بخش آسان بود. 577 00:25:20,764 --> 00:25:23,930 البته من می توانستم از پیش نصب شده اکسل، و یا اعداد، و یا هر برنامه. 578 00:25:23,930 --> 00:25:25,846 اما این خوب است، چرا که در حال حاضر من می تواند دستکاری 579 00:25:25,846 --> 00:25:28,090 داده ها در یک فرمت استاندارد. 580 00:25:28,090 --> 00:25:30,294 >> زمینه پس به تغییر به جایی که ما را ترک کردن 581 00:25:30,294 --> 00:25:32,710 زمان گذشته، بود که به شروع خود را به چرخ آموزش. 582 00:25:32,710 --> 00:25:34,543 اما در ابتدا، شما نمی این ناهار زودتر ببینید 583 00:25:34,543 --> 00:25:38,150 دوباره اتفاق می افتد در اینجا در آتش و یخ در کمبریج، سه تار در نیوهیون. 584 00:25:38,150 --> 00:25:43,150 ثبت نام در وب سایت CS50s ASAP برای پیوستن به دانش آموزان و کارکنان CS50. 585 00:25:43,150 --> 00:25:46,090 >> بنابراین ما در زمان چرخ آموزش دوشنبه به عنوان follows-- 586 00:25:46,090 --> 00:25:49,120 رشته شده است در اعلام کتابخانه CS50s برای برخی از زمان. 587 00:25:49,120 --> 00:25:52,650 و آن را به خوبی، به دلیل آن اجازه می دهد تا ما در مورد متغیرهای صحبت به عنوان 588 00:25:52,650 --> 00:25:54,660 کلمات کامل و جملات و بیشتر. 589 00:25:54,660 --> 00:25:56,710 اما معلوم رشته وجود ندارد. 590 00:25:56,710 --> 00:26:00,200 که فقط یک مترادف، و یا نام مستعار است، که ما برای چیزی ایجاد شده است که 591 00:26:00,200 --> 00:26:03,780 در واقع است کمی بیشتر فنی نام کاراکتر *. 592 00:26:03,780 --> 00:26:07,900 >> و در واقع، ما یک نمونه دیدم از یک برنامه در روز دوشنبه 593 00:26:07,900 --> 00:26:11,200 که رفتار نه کاملا به عنوان ما انتظار می رود. 594 00:26:11,200 --> 00:26:13,630 این فایل بود، مقایسه-0. 595 00:26:13,630 --> 00:26:17,910 به یاد بیاورید که در مقایسه-0، اگر من کامپایل مجدد برنامه روز دوشنبه 596 00:26:17,910 --> 00:26:22,670 و اجرا مقایسه-0 و نوع در مادر در حروف کوچک، حروف کوچک و مادر در دوباره. 597 00:26:22,670 --> 00:26:25,320 این برنامه اصرار داشتند که من نوع چیزهای مختلف، 598 00:26:25,320 --> 00:26:29,210 حتی اگر مادر، همه در حروف کوچک، بصری یکسان است. 599 00:26:29,210 --> 00:26:31,990 پس چه پاسخ کوتاه بود چرا کامپیوتر فکر می کند 600 00:26:31,990 --> 00:26:34,500 این دو رشته متفاوت هستند؟ 601 00:26:34,500 --> 00:26:35,250 آره؟ 602 00:26:35,250 --> 00:26:36,534 >> مخاطبان: [نامفهوم] 603 00:26:36,534 --> 00:26:37,450 DAVID J. مالان: درست است. 604 00:26:37,450 --> 00:26:39,600 بنابراین، مادر، اولین بار من آن را تایپ کنید، در حال 605 00:26:39,600 --> 00:26:42,710 جایی در رایانه من ذخیره شده حافظه اما در محل های مختلف 606 00:26:42,710 --> 00:26:44,690 از بار دوم من در مادر را تایپ کنید. 607 00:26:44,690 --> 00:26:46,580 در حال حاضر آن قطعا می تواند بهینه شده است. 608 00:26:46,580 --> 00:26:49,205 کامپیوتر می تواند هوشمند و تحقق این دو رشته، هی، 609 00:26:49,205 --> 00:26:49,954 آنها یکسان است. 610 00:26:49,954 --> 00:26:51,520 اجازه دهید من نمی redundantly آن را ذخیره کنید. 611 00:26:51,520 --> 00:26:54,229 اما رایانه کار را انجام ندهید بهینه سازی مگر اینکه شما به آنها بگویید به. 612 00:26:54,229 --> 00:26:56,061 بنابراین، به طور پیش فرض، آنها فقط رفتن برای پایان دادن به 613 00:26:56,061 --> 00:26:57,670 در دو مکان مختلف در حافظه است. 614 00:26:57,670 --> 00:27:01,570 و بنابراین، به روشن تر می شود، هنگامی که ما در مقایسه دو رشته، 615 00:27:01,570 --> 00:27:03,950 از S اول نامیده می شد، دوم نامیده می شد 616 00:27:03,950 --> 00:27:08,530 T، آنچه به طور خاص من مقایسه در اینجا در خط 13. 617 00:27:08,530 --> 00:27:09,494 آره. 618 00:27:09,494 --> 00:27:12,390 >> رسید این محل در حافظه که متغیر به اشاره خواهد شد. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. مالان: دقیقا، من مقایسه محل در حافظه 620 00:27:14,900 --> 00:27:16,300 که آن متغیر اشاره کرد. 621 00:27:16,300 --> 00:27:20,560 بنابراین به طور خاص، اگر مادر در بود تعداد بایت 1 و 2 و 3، 622 00:27:20,560 --> 00:27:24,020 و به یاد داشته باشید به دلیل 4-- بک اسلش 0 نیاز به تمام راه را در پایان. 623 00:27:24,020 --> 00:27:29,420 و نمونه دیگر از مادر، M-O-M، در آدرس 10، 11، 12 و 13 بود. 624 00:27:29,420 --> 00:27:33,100 من مقایسه 1، آن آدرس، آن مکان را در حافظه، 625 00:27:33,100 --> 00:27:35,160 در برابر 10 است، که بدیهی است که نه همان. 626 00:27:35,160 --> 00:27:36,260 1 است 10 است. 627 00:27:36,260 --> 00:27:39,620 >> بنابراین این خوب است که در آن آن را بسیار آسان می کند. 628 00:27:39,620 --> 00:27:42,870 اما این مشکل تا آنجا که ما نمی توانیم به نظر می رسد برای مقایسه رشته ها. 629 00:27:42,870 --> 00:27:44,930 بنابراین fundamentally-- و در این سطح پایین، 630 00:27:44,930 --> 00:27:47,300 اگر شما می خواهید به پیاده سازی یک برنامه برای مقایسه 631 00:27:47,300 --> 00:27:50,270 دو واژه جدا که کاربر در کیفیت تایپ، 632 00:27:50,270 --> 00:27:53,944 آنها خط تا کاراکتر برای کاراکتر، فقط به طور کلی، 633 00:27:53,944 --> 00:27:55,360 چه چیزی ما باید انجام دهید، ظاهرا؟ 634 00:27:55,360 --> 00:27:57,940 این کافی نیست فقط به در این دو آدرس را نگاه کنید. 635 00:27:57,940 --> 00:27:58,860 چه چیزی ما باید انجام دهید؟ 636 00:27:58,860 --> 00:27:59,360 آره؟ 637 00:27:59,360 --> 00:28:01,120 >> مخاطبان: تکرار از طریق رشته [نامفهوم]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. مالان: آره، اجازه دهید تکرار از طریق رشته است. 639 00:28:02,600 --> 00:28:05,808 حال با استفاده از یک حلقه، یک حلقه در حالی که، یا هر آنچه که شما راحت ترین با. 640 00:28:05,808 --> 00:28:08,840 و اگر ما دو رشته به جایی کردم در حافظه، اجازه دهید در هر نگاه 641 00:28:08,840 --> 00:28:11,770 شخصیت اول، پس از آن هر یک دوم شخصیت، و سپس سوم و چهارم، 642 00:28:11,770 --> 00:28:15,206 و پنجم، تا زمانی که ما ضربه چه مقدار نگهبان خاصی؟ 643 00:28:15,206 --> 00:28:16,080 مخاطبان: [نامفهوم] 644 00:28:16,080 --> 00:28:18,800 DAVID J. مالان: آره، بک اسلش صفر، که در آن نقطه در هر دو رشته 645 00:28:18,800 --> 00:28:20,100 ما می توانید تصمیم بگیرید که آن را. 646 00:28:20,100 --> 00:28:21,970 آیا ما هر شخصیت تنها همسان؟ 647 00:28:21,970 --> 00:28:22,990 اگر نه، بازگشت نادرست است. 648 00:28:22,990 --> 00:28:24,770 اگر چنین است، بازگشت واقعی است. 649 00:28:24,770 --> 00:28:28,800 و به طوری که دقیقا این چه نسخه ای از برنامه مقایسه-1.c کند. 650 00:28:28,800 --> 00:28:31,677 این یکسان به چیزی است که ما در دوشنبه جز این که من نگاه 651 00:28:31,677 --> 00:28:34,760 بدست از string-- کلمه خلاص شدن از شر هر چند است که هیچ impact-- کاربردی همه 652 00:28:34,760 --> 00:28:37,450 من اکنون انجام است از بین بردن برخی از چرخ آموزش تصویری، 653 00:28:37,450 --> 00:28:40,880 اما به وضوح ببینید که s و t آدرس می باشد. 654 00:28:40,880 --> 00:28:43,020 و آنچه که ستاره، ستاره، نشان دهنده 655 00:28:43,020 --> 00:28:46,690 یک آدرس است، در غیر این صورت شناخته شده از لحاظ فنی بیشتر به عنوان یک اشاره گر است. 656 00:28:46,690 --> 00:28:49,880 >> بنابراین، هنگامی که من اعلام می کنم در مورد خط 9 و می گویند کاراکتر * ها، 657 00:28:49,880 --> 00:28:52,160 این بدان معنا نیست من یک رشته. 658 00:28:52,160 --> 00:28:56,360 این بدان معناست که من یک متغیر است که به هدف در زندگی برای ذخیره یک آدرس است. 659 00:28:56,360 --> 00:29:00,400 از آنجا که من در مورد قرار دادن هستم آدرس از یک رشته به آن است. 660 00:29:00,400 --> 00:29:03,500 و در واقع، از GetString، به روشن می کند، یک رشته نمی گرداند. 661 00:29:03,500 --> 00:29:06,110 آن مادر نمی گرداند بک اسلش صفر، در هر سه. 662 00:29:06,110 --> 00:29:10,005 چه GetString به طور خاص و دقیقا بازگشت؟ 663 00:29:10,005 --> 00:29:10,880 مخاطبان: [نامفهوم] 664 00:29:10,880 --> 00:29:14,080 DAVID J. مالان: آدرس، آدرس اولین شخصیت 665 00:29:14,080 --> 00:29:16,070 در برخی از رشته آن را بدست آورده است. 666 00:29:16,070 --> 00:29:19,250 و بنابراین در حال حاضر ما شاهد یک کلمه کلیدی خاص دوباره. 667 00:29:19,250 --> 00:29:20,640 و من به این پیش از آن اشاره کرد. 668 00:29:20,640 --> 00:29:23,620 این است که رفتن به کنوانسیون خوب که ما دوباره و دوباره اکنون خواهید دید. 669 00:29:23,620 --> 00:29:27,540 من دارم مطمئن شوید که بازدید کنندگان تهی نیست و t تهی نیست. 670 00:29:27,540 --> 00:29:30,100 از آنجا که در من است واقعا اشاره سریع قبل از آن، 671 00:29:30,100 --> 00:29:35,510 چه ممکن است به معنای اگر می گرداند از GetString نیست آدرس اما N-U-L-L، است که دوباره، 672 00:29:35,510 --> 00:29:36,990 برخی از ارزش خاص؟ 673 00:29:36,990 --> 00:29:37,890 >> مخاطبان: خطا. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. مالان: این یک خطا است. 675 00:29:38,600 --> 00:29:39,550 چیزی را اشتباه رفت. 676 00:29:39,550 --> 00:29:41,341 و آنچه به طور معمول ممکن است رخ دهد، به ویژه 677 00:29:41,341 --> 00:29:45,162 با strings-- که ممکن است طول ناشناخته در advance-- 678 00:29:45,162 --> 00:29:46,870 شاید کامپیوترها از حافظه، شاید 679 00:29:46,870 --> 00:29:49,280 شما در چنین تایپ کلمه طولانی یا جمله 680 00:29:49,280 --> 00:29:51,880 یا جا به جا چنین مقاله بزرگ نه تنها حافظه کافی وجود دارد. 681 00:29:51,880 --> 00:29:55,340 و به این ترتیب از GetString نمی تواند بازگشت آدرس از همه چیز، 682 00:29:55,340 --> 00:29:56,620 پس از آن فقط چیزی را برمی گرداند. 683 00:29:56,620 --> 00:30:00,580 و آن را می گوید یک خطا رخ داده است با بازگشت مقدار null هستند. 684 00:30:00,580 --> 00:30:02,890 این آدرس صفر است، پس به صحبت. 685 00:30:02,890 --> 00:30:06,157 >> اکنون معلوم C می آید با یک تابعی که این تکرار. 686 00:30:06,157 --> 00:30:09,240 ما لازم نیست که برای اجرای این با یک حلقه for و یا یک حلقه در حالی که خودمان. 687 00:30:09,240 --> 00:30:11,150 ما می توانیم یک تابع استفاده کنید، نام موجز، 688 00:30:11,150 --> 00:30:15,400 هم بزنید کامپیوتر، و یا رشته مقایسه، که هدف در زندگی است که برای انجام دقیقا. 689 00:30:15,400 --> 00:30:19,990 شما آن را دو اشاره گر، دو آدرس، و آن را به کسانی که آدرس بروید 690 00:30:19,990 --> 00:30:23,130 و سپس به مقایسه نامه را برای حرف حرف برای کیفیت، 691 00:30:23,130 --> 00:30:26,610 توقف تنها زمانی که چه چیز درست است؟ 692 00:30:26,610 --> 00:30:31,540 هنگامی که به طور مستقیم باید کامپیوتر را به هم بزنید متوقف تکرار، فقط به روشن باشد؟ 693 00:30:31,540 --> 00:30:35,400 هنگامی که آن را با یک بک اسلش 0 در هر دو رشته، که در آن نقطه آن می توانید تصمیم بگیرید 694 00:30:35,400 --> 00:30:38,910 همه چیز همسان، و یا شده است یک اختلاف وجود دارد؟ 695 00:30:38,910 --> 00:30:42,740 >> بنابراین، اگر ما این در حال حاضر اجرا کنید و سعی بازی سرمایه کوچک ما، 696 00:30:42,740 --> 00:30:49,260 بنابراین مطمئن مقایسه-1، ./compare-1، و نوع مادر در کوچک در هر دو بار. 697 00:30:49,260 --> 00:30:50,560 در حال حاضر این همان چیزی است. 698 00:30:50,560 --> 00:30:54,080 و اگر من آن را دوباره با حروف کوچک و پس از آن شاید بزرگ. 699 00:30:54,080 --> 00:30:56,720 در حال حاضر آن را در واقع متمایز بین بزرگ و کوچک. 700 00:30:56,720 --> 00:31:00,440 بنابراین نه همه که سخت و یا جادویی، اما آن را در حال حاضر توضیح 701 00:31:00,440 --> 00:31:03,140 آنچه که در زیر هود. 702 00:31:03,140 --> 00:31:07,640 >> پس چه بیشتر می توانید استخراج ما از این نوع درس؟ 703 00:31:07,640 --> 00:31:08,980 بنابراین اجازه دهید نگاهی به این. 704 00:31:08,980 --> 00:31:15,380 من قصد دارم به جلو بروید و ارسال نامه برنامه سریع اینجا کپی 0 نامیده می شود. 705 00:31:15,380 --> 00:31:21,594 و در حال حاضر اجازه دهید به جلو و در واقع به اجازه دهید this-- با کپی-0، 706 00:31:21,594 --> 00:31:23,010 نگاهی به آنچه من در اینجا دارم. 707 00:31:23,010 --> 00:31:24,712 من برای اولین بار به کاربر، چیزی می گویند. 708 00:31:24,712 --> 00:31:26,420 سپس من یک رشته را دریافت کنید و من آن را در S ذخیره می شود. 709 00:31:26,420 --> 00:31:29,810 سپس من را بررسی کنید اگر S برابر برابر تهی، فقط بازگشت 1. 710 00:31:29,810 --> 00:31:31,590 بنابراین این فقط چک کردن خطا استاندارد است. 711 00:31:31,590 --> 00:31:33,112 هیچ چیز جالب اتفاق افتاده است. 712 00:31:33,112 --> 00:31:36,320 و در واقع، اگر ما از خطا خلاص شدن از شر چک کردن، به نظر میرسد این هفته 1 کد 713 00:31:36,320 --> 00:31:36,985 در حال حاضر. 714 00:31:36,985 --> 00:31:39,110 اما من شروع به گرفتن کمی بهتر در مورد آن. 715 00:31:39,110 --> 00:31:43,340 >> در حال حاضر در خط 16، یک هفته پیش، شاید روز یک زن و شوهر و یا حتی دقیقه پیش، 716 00:31:43,340 --> 00:31:46,720 شما ممکن است بگویید خط 16 است ایجاد یک متغیر به نام T 717 00:31:46,720 --> 00:31:48,219 و کپی ها را در آن. 718 00:31:48,219 --> 00:31:50,010 و این کاملا غذای آماده مناسب. 719 00:31:50,010 --> 00:31:51,560 اما دقیق تر است. 720 00:31:51,560 --> 00:31:54,190 آنچه که در خط 16 اتفاق می افتد؟ 721 00:31:54,190 --> 00:31:56,170 چه کپی گرفتن از راست به چپ؟ 722 00:31:56,170 --> 00:31:56,669 آره؟ 723 00:31:56,669 --> 00:31:58,490 مخاطبان: T باشد گرفتن آدرس از S؟ 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. مالان: دقیقا، تی گرفتن آدرس از بازدید کنندگان. 725 00:32:01,220 --> 00:32:05,170 بنابراین روشن می شود در حال حاضر، اگر من به بازگشت به مثال قبل که 726 00:32:05,170 --> 00:32:08,520 و من بیرون کشیدن چیزی که من در تایپ کرده اید. 727 00:32:08,520 --> 00:32:11,640 و آنچه که من تایپ کرده اید in-- در اینجا، و در اینجا 728 00:32:11,640 --> 00:32:15,830 چیزی است که من در جایی در تایپ کرده اید حافظه، مادر و پس از آن یک بک اسلش 729 00:32:15,830 --> 00:32:17,840 0 که برای من اضافه شده است. 730 00:32:17,840 --> 00:32:23,060 آنچه که من در اینجا ذخیره می شود، به یاد می آورند، این است که در محل 1، 2، 3، 4، 731 00:32:23,060 --> 00:32:24,655 این چیزی است که در حال حاضر در ثانیه. 732 00:32:24,655 --> 00:32:29,220 بنابراین اگر در خط 16، من می گویم به من بدهد یکی دیگر از متغیر به نام T و اینترنتی 733 00:32:29,220 --> 00:32:33,590 در ارزش ها، چه می شود در اینجا ذخیره نمی خواهد مادر 734 00:32:33,590 --> 00:32:35,480 بلکه فقط تعداد 1. 735 00:32:35,480 --> 00:32:38,520 >> بنابراین اگر ما نگاه به آینده در این برنامه حال حاضر، چه اتفاقی خواهد افتاد؟ 736 00:32:38,520 --> 00:32:40,690 بنابراین توجه داشته باشید که که این تابع شما ممکن است 737 00:32:40,690 --> 00:32:44,410 این چند وقت پیش برای سزار استفاده کرده اند، و یا ویژنر، و یا شاید نه در همه. 738 00:32:44,410 --> 00:32:48,170 من با تابع () printf من را، من رفتن به سرمایه گذاری کپی تی. 739 00:32:48,170 --> 00:32:51,616 اولین بار در خط 19، سلامت عقل سریع را بررسی کنید، چک strlen طول تی. 740 00:32:51,616 --> 00:32:53,740 برای این که من نمی خواهم سعی کنید به چیزی سرمایه گذاری 741 00:32:53,740 --> 00:32:55,104 اگر هیچ رشته وجود دارد. 742 00:32:55,104 --> 00:32:57,520 اگر کاربر فقط ضربه را وارد کنید، هیچ چیز برای سرمایه گذاری وجود دارد. 743 00:32:57,520 --> 00:33:01,100 بنابراین من نمی خواهم به انجام خط 21. 744 00:33:01,100 --> 00:33:05,758 بنابراین خط 21 است سرمایه گذاری که نامه، ظاهرا، در T؟ 745 00:33:05,758 --> 00:33:06,514 >> رسید متر؟ 746 00:33:06,514 --> 00:33:08,722 DAVID J. مالان: به نظر می رسد مانند آن که یکی کپی کردن؟ 747 00:33:08,722 --> 00:33:09,486 رسید متر. 748 00:33:09,486 --> 00:33:10,450 DAVID J. مالان: اوه، متر. 749 00:33:10,450 --> 00:33:12,685 خوب، پس اولین متر، به دلیل توجه کنید که من 750 00:33:12,685 --> 00:33:14,935 عبور به toupper که اگر شما هرگز آن را دیده ام آن 751 00:33:14,935 --> 00:33:16,980 فقط یک تابع به سرمایه گذاری به عنوان ورودی آن است. 752 00:33:16,980 --> 00:33:20,240 تی براکت صفر به معنای دادن من شخصیت صفر تی. 753 00:33:20,240 --> 00:33:22,550 و پس چگونه این کار را تغییر تصویر، تا روشن شود؟ 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 آنچه نیاز به بازنویسی یا تغییر با توجه به s و t و مادر 756 00:33:29,160 --> 00:33:30,097 صفر بک اسلش. 757 00:33:30,097 --> 00:33:31,470 >> مخاطبان: [نامفهوم] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. مالان: آره، بنابراین در اینجا به سادگی این 759 00:33:34,030 --> 00:33:40,860 نیاز به تغییر to-- رفع this-- نیاز به رسیدن به یک متر پایتخت تغییر کرده است. 760 00:33:40,860 --> 00:33:44,330 اما در حال حاضر، نگاه بعد از آن در برنامه، اگر من نسخه قابل چاپ کردن 761 00:33:44,330 --> 00:33:49,800 s و t به عنوان من اینجا تمیز کردن، تماشای چه خبر رفتن به چاپ s و t. 762 00:33:49,800 --> 00:33:54,310 بنابراین کپی-0، ./copy-0 است. 763 00:33:54,310 --> 00:33:57,140 اجازه دهید من جلو بروید و تایپ در مادر در تمام حروف کوچک. 764 00:33:57,140 --> 00:34:00,140 توجه داشته باشید هر دو اصلی و کپی اند با حروف بزرگ شده است. 765 00:34:00,140 --> 00:34:00,850 واسه چی؟ 766 00:34:00,850 --> 00:34:04,431 خب، S و T هر دو اشاره به، اگر شما خواهد شد، همان تکه از حافظه است. 767 00:34:04,431 --> 00:34:06,930 و صادقانه بگویم، این است واقعا uninteresting-- این واقعیت 768 00:34:06,930 --> 00:34:09,150 که ما در حال استفاده از آدرس صفر است. 769 00:34:09,150 --> 00:34:11,719 منظور من، من واقعا مهم نیست که در آن مسائل را در حافظه است. 770 00:34:11,719 --> 00:34:13,550 با عرض پوزش من پاک کردن کمی بیش از حد. 771 00:34:13,550 --> 00:34:15,674 اما من واقعا مهم نیست در آن همه چیز در حافظه می باشد. 772 00:34:15,674 --> 00:34:18,510 و به همین ترتیب، در واقع چه برنامه نویسان تمایل به فکر کردن در مورد 773 00:34:18,510 --> 00:34:21,080 این است که وقتی شما از آن صحبت آدرس، و یا یک اشاره گر، 774 00:34:21,080 --> 00:34:22,679 چه کسی اهمیت میدهد که در آن در حافظه است. 775 00:34:22,679 --> 00:34:24,989 برای من مهم نیست اگر آن را در بایت یک یا یک میلیارد. 776 00:34:24,989 --> 00:34:27,920 من فقط مراقبت که این متغیر است به طور موثر 777 00:34:27,920 --> 00:34:29,620 اشاره در آن تکه از حافظه. 778 00:34:29,620 --> 00:34:33,350 و به این ترتیب، از این پس، به جای زبان بازی بیش از آدرس های دلخواه حافظه، اجازه دهید 779 00:34:33,350 --> 00:34:36,710 فقط شروع به رسم اشاره گر به عنوان اشاره گر، به عنوان فلش. 780 00:34:36,710 --> 00:34:39,340 پس چه S و T واقعا هستند، با توجه به این برنامه، 781 00:34:39,340 --> 00:34:42,130 به دلیل چگونه من ایجاد T، آن را فقط دو متغیر جداگانه 782 00:34:42,130 --> 00:34:43,840 اشاره در بخش همان حافظه است. 783 00:34:43,840 --> 00:34:45,215 و ما اهمیتی نمی جایی که آنها هستند. 784 00:34:45,215 --> 00:34:47,130 بنابراین ما می توانیم انتزاعی دور که جزئیات. 785 00:34:47,130 --> 00:34:48,780 >> پس چگونه آن را برطرف کنم؟ 786 00:34:48,780 --> 00:34:54,120 اگر من می خواهم به ارسال یک نسخه از کپی برنامه ای است که در واقع نسخه رشته 787 00:34:54,120 --> 00:34:56,840 و تنها سرمایه گذاری کپی، فقط به طور مستقیم، 788 00:34:56,840 --> 00:34:59,766 چه کردم که یک مواد تشکیل دهنده برای راه حل ما؟ 789 00:34:59,766 --> 00:35:00,640 مخاطبان: [نامفهوم] 790 00:35:00,640 --> 00:35:01,420 DAVID J. مالان: ما نیاز به یک چه؟ 791 00:35:01,420 --> 00:35:01,820 رسید تکه از حافظه. 792 00:35:01,820 --> 00:35:03,280 DAVID J. مالان: ما نیاز تکه دیگری از حافظه، درست است؟ 793 00:35:03,280 --> 00:35:05,360 ما نمی دانیم که چگونه به آن را انجام نشده است، لزوما. 794 00:35:05,360 --> 00:35:11,330 اما من نوع نیاز این اتفاق می افتد بنابراین که مادر اصلی در صورت پایین تر 795 00:35:11,330 --> 00:35:14,170 در این قطعه اضافی از حافظه به پایان می رسد. 796 00:35:14,170 --> 00:35:19,770 و پس از آن زمانی که کپی را عوض کنم، من نمی خواهید این نسخه به تغییر است. 797 00:35:19,770 --> 00:35:26,020 من به جای می خواهید به تغییر فقط در این کپی به طوری که اصلی بدون تغییر است. 798 00:35:26,020 --> 00:35:27,980 >> بنابراین، بیایید ببینید که چگونه ما ممکن است انجام این کار. 799 00:35:27,980 --> 00:35:31,800 در کپی-1، که در حال حاضر از نظر محروم شده است، 800 00:35:31,800 --> 00:35:33,250 اما آنلاین اظهار نظر. 801 00:35:33,250 --> 00:35:36,710 ما به جای انجام این شرح زیر است خطوط یکسان هستند، من یک رشته را دریافت کنید 802 00:35:36,710 --> 00:35:38,340 و پاسخ آن را. 803 00:35:38,340 --> 00:35:43,500 اما در حال حاضر اجازه دهید در یکی از ما را نگاه کنید پیچیده اما آخرین پیچیدگی 804 00:35:43,500 --> 00:35:47,340 برای مدتی، خط 16 دقیقا این. 805 00:35:47,340 --> 00:35:49,400 بنابراین اگر راحت خود را با تصویر ما فقط drew-- 806 00:35:49,400 --> 00:35:51,790 من یک تکه از حافظه را جدید، همه چیز را کپی کنید به آن، 807 00:35:51,790 --> 00:35:53,730 بیایید ببینید که چگونه ما در ترجمه که به کد. 808 00:35:53,730 --> 00:35:59,400 >> بنابراین خط 16، در سمت چپ، کاراکتر * تی از این کادر به من می دهد بیش از اینجا. 809 00:35:59,400 --> 00:36:00,230 که همه آن را است. 810 00:36:00,230 --> 00:36:03,240 در سمت راست، متر ALLOC، و یا از malloc، 811 00:36:03,240 --> 00:36:06,480 تخصیص حافظه، فوق العاده فانتزی است، راه مرموز فقط گفت 812 00:36:06,480 --> 00:36:07,640 من یک تکه از حافظه است. 813 00:36:07,640 --> 00:36:09,290 چه مقدار حافظه نیاز داریم؟ 814 00:36:09,290 --> 00:36:10,910 خب، نوع بیان بزرگ است. 815 00:36:10,910 --> 00:36:12,570 اما اجازه دهید ببینیم چه می گوید در اینجا. 816 00:36:12,570 --> 00:36:15,940 بنابراین این، البته، این است که به من طول رشته ها. 817 00:36:15,940 --> 00:36:19,094 بنابراین، مادر باید چه؟ 818 00:36:19,094 --> 00:36:21,010 پس فقط سه، درست است؟ مادر سه شخصیت است. 819 00:36:21,010 --> 00:36:22,830 شما به حساب نمی بک اسلش صفر زمانی که شما 820 00:36:22,830 --> 00:36:25,960 بحث در مورد طول یک رشته آن در واقع حروف قابل مشاهده انسان است. 821 00:36:25,960 --> 00:36:28,020 بنابراین مادر، بنابراین این به من می دهد 3. 822 00:36:28,020 --> 00:36:31,170 اما یک دقیقه صبر کنید، من در حال حاضر با اضافه کردن 1. 823 00:36:31,170 --> 00:36:34,861 چرا من واقعا می خواهید اختصاص 4 بایت و نه فقط 3؟ 824 00:36:34,861 --> 00:36:35,360 آره؟ 825 00:36:35,360 --> 00:36:36,910 >> رسید برای ارزش نگهبان؟ 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. مالان: دقیقا، برای آن مقدار نگهبان. 827 00:36:38,951 --> 00:36:40,840 برای بک اسلش صفر، من نیاز به مجموع 4 بایت است. 828 00:36:40,840 --> 00:36:42,870 بنابراین من نیاز به طول رشته به علاوه 1. 829 00:36:42,870 --> 00:36:45,400 و پس از آن فقط برای measure-- خوب حتی اگر در این سیستم، 830 00:36:45,400 --> 00:36:49,390 آن را همیشه برای رفتن به من گفت: 1-- ضرب این به اندازه یک کاراکتر. 831 00:36:49,390 --> 00:36:51,552 معلوم است SIZEOF یک اپراتور در C که 832 00:36:51,552 --> 00:36:53,260 فقط به شما می گوید تعداد بایت که 833 00:36:53,260 --> 00:36:54,700 مورد نیاز برای یک نوع داده است. 834 00:36:54,700 --> 00:36:57,740 آن را برای آرایه کار نمی کند، به طور معمول، گاهی اوقات آن را ندارد. 835 00:36:57,740 --> 00:36:59,210 اما در حالت کلی، نه. 836 00:36:59,210 --> 00:37:02,330 اما آن را به من بگویید که چگونه بسیاری از بایت کاراکتر است، که معلوم است که همیشه 1. 837 00:37:02,330 --> 00:37:04,080 پس این است که مانند ضرب 1. 838 00:37:04,080 --> 00:37:05,900 >> بنابراین فوق العاده مرموز خط به دنبال کد. 839 00:37:05,900 --> 00:37:09,320 اما همه آن را می دهد من یک تکه از حافظه. 840 00:37:09,320 --> 00:37:13,590 اما آن را به نظر می رسد کپی شود هر چیزی را به که حافظه؟ 841 00:37:13,590 --> 00:37:14,560 هنوز رتبهدهی نشده است. 842 00:37:14,560 --> 00:37:22,040 و به این ترتیب آنچه که من انجام در خط 22 و 23، 24، 25، خوب، من به سادگی انجام این کار. 843 00:37:22,040 --> 00:37:23,760 و این است که مرتب کردن بر اساس مسائل مدرسه قدیمی در حال حاضر. 844 00:37:23,760 --> 00:37:26,010 این مثل این است PSet 2، که در آن شما فقط حرکت همه چیز 845 00:37:26,010 --> 00:37:28,620 در حافظه، و یا به جای در رشته ها. 846 00:37:28,620 --> 00:37:31,920 >> بنابراین من تکرار از 0 تا طول رشته s. 847 00:37:31,920 --> 00:37:37,820 و من کپی کردن شخصیت i ام در S به شخصیت i ام در زمان t. 848 00:37:37,820 --> 00:37:41,820 و چون من، برنامه نویس، ساخته شده مطمئن شوید که به تخصیص دقیقا به عنوان بسیاری از بایت 849 00:37:41,820 --> 00:37:44,600 که من نیاز، آن را کامل یک به یک رابطه. 850 00:37:44,600 --> 00:37:47,060 و من کپی مادر در کوچک به یکی از جدید. 851 00:37:47,060 --> 00:37:50,170 و سپس در آخر، من این کار خط. 852 00:37:50,170 --> 00:37:54,637 و به این ترتیب اثر تنها است به سرمایه گذاری این تی در اینجا. 853 00:37:54,637 --> 00:37:56,470 بنابراین بسیاری برای جذب، اما اگر شما فقط نظر 854 00:37:56,470 --> 00:37:58,220 آنچه واقعا در زیر هود 855 00:37:58,220 --> 00:38:00,880 فقط در حال حرکت است این بایت در اطراف، که 856 00:38:00,880 --> 00:38:06,617 برای حل این مشکل است مورد نیاز است فقط به ما این تکه از حافظه است. 857 00:38:06,617 --> 00:38:08,450 در حال حاضر در معرض خطر قریب به اتفاق، اجازه دهید من نشان 858 00:38:08,450 --> 00:38:13,200 یک مثال دیگر که تقریبا یکسان، به جز این 859 00:38:13,200 --> 00:38:14,350 خط کد. 860 00:38:14,350 --> 00:38:18,870 بنابراین این نسخه هکر است این برنامه، اگر شما خواهد شد. 861 00:38:18,870 --> 00:38:21,050 اما اجازه دهید فقط تقطیر آن را به چه خبر است. 862 00:38:21,050 --> 00:38:28,920 خط 24 استفاده می شود این تی براکت من می شود براکت من. 863 00:38:28,920 --> 00:38:33,370 در حال حاضر، من در حال تغییر این ستاره T بسیار بیشتر مرموز 864 00:38:33,370 --> 00:38:36,280 به علاوه 1 برابر ستاره ها به علاوه 1. 865 00:38:36,280 --> 00:38:38,702 >> بنابراین آنچه اتفاق می افتد و به همین دلیل ما باید یک شخصیت ستاره؟ 866 00:38:38,702 --> 00:38:41,410 ما این ستاره دیده می شود قبل از، و آن را مورد استفاده قرار گرفته متفاوت است. 867 00:38:41,410 --> 00:38:45,490 ما قبلا دیدیم کاراکتر *، در حال حاضر من از دیدن یک ستاره در آغاز، و این خوب است. 868 00:38:45,490 --> 00:38:48,190 چرا که معلوم است ما می تواند به نوعی فقط استنباط 869 00:38:48,190 --> 00:38:50,280 برای اولین بار از آن اصول چه خبر است. 870 00:38:50,280 --> 00:38:53,860 پس فقط به روشن باشد، چه است؟ 871 00:38:53,860 --> 00:38:55,052 هفته گذشته، آن را یک رشته بود. 872 00:38:55,052 --> 00:38:56,260 که کافی نیست. 873 00:38:56,260 --> 00:38:57,690 چیست، به طور خاص؟ 874 00:38:57,690 --> 00:38:58,590 >> مخاطبان: [نامفهوم] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. مالان: این یک اشاره گر است. 876 00:38:59,881 --> 00:39:02,610 این آدرس را شخصیت اول ما در تایپ. 877 00:39:02,610 --> 00:39:04,780 خوب، چه T است؟ 878 00:39:04,780 --> 00:39:05,660 >> مخاطبان: [نامفهوم] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. مالان: در آدرس اولین بایت 880 00:39:07,950 --> 00:39:10,490 در T، آن تکه از حافظه تخصیص. 881 00:39:10,490 --> 00:39:14,720 پس از آن معلوم است که وقتی ما تکرار از 0 در تا رشته 882 00:39:14,720 --> 00:39:17,424 length-- اول از همه، من شروع می شود در 0، چون 883 00:39:17,424 --> 00:39:18,840 این مدرسه قدیمی برای چیزی حلقه. 884 00:39:18,840 --> 00:39:22,400 بنابراین فقط برای سادگی، اجازه دهید فرض کنیم که اولین خط از کد 885 00:39:22,400 --> 00:39:23,760 واقعا فقط این، درست است. 886 00:39:23,760 --> 00:39:26,080 اگر من صفر است، با اضافه کردن صفر به چیزی که احتمالا 887 00:39:26,080 --> 00:39:27,540 رفتن به اثر. 888 00:39:27,540 --> 00:39:28,560 >> پس چه این ضرب المثل است؟ 889 00:39:28,560 --> 00:39:31,600 به نظر می رسد که ستاره اپراتور در این زمینه 890 00:39:31,600 --> 00:39:33,700 ارجاع است اپراتور، است که فقط 891 00:39:33,700 --> 00:39:37,530 یک راه فانتزی گفتن به آدرس زیر. 892 00:39:37,530 --> 00:39:42,080 بنابراین اگر بازدید کنندگان آدرس از اولین شخصیت در این تکه از حافظه، 893 00:39:42,080 --> 00:39:43,630 * بدان معنی رفتن وجود دارد. 894 00:39:43,630 --> 00:39:45,630 و چون ما کشیده ام تصویر در این راه، 895 00:39:45,630 --> 00:39:47,430 شما می توانید اتخاذ زیر مدل ذهنی. 896 00:39:47,430 --> 00:39:51,030 اگر این است، و به شما می گویند S *، * S نوع مانند سینی و نردبان، 897 00:39:51,030 --> 00:39:54,540 اگر شما بازی را به یاد داشته باشید از دوران کودکی، است که فلش را دنبال و به 898 00:39:54,540 --> 00:39:55,570 به آدرس. 899 00:39:55,570 --> 00:39:57,080 >> * T همان چیزی است. 900 00:39:57,080 --> 00:39:59,855 بنابراین شروع به اینجا، به تکه آن است. 901 00:39:59,855 --> 00:40:03,350 من فقط نمی تواند قرعه کشی در این صفحه نمایش است که راه. 902 00:40:03,350 --> 00:40:05,560 * T معنی به اینجا بروید. 903 00:40:05,560 --> 00:40:08,830 و پس از آن، حلقه for است که فقط گفت حرکت این شخصیت در اینجا، 904 00:40:08,830 --> 00:40:11,330 حرکت این شخصیت در اینجا، حرکت این شخصیت است. 905 00:40:11,330 --> 00:40:12,890 اما چگونه می توانم که incrementation انجام دهم؟ 906 00:40:12,890 --> 00:40:15,430 من نیاز به خنثیسازی آنچه که من فقط حذف شده است. 907 00:40:15,430 --> 00:40:18,140 این چیزی است که به طور کلی به نام حساب اشاره گر، که 908 00:40:18,140 --> 00:40:20,040 معنی ریاضی با آدرس. 909 00:40:20,040 --> 00:40:22,460 >> اگر در این حلقه، من را به افزایش من، 910 00:40:22,460 --> 00:40:26,880 و بازدید کنندگان به یک آدرس است و T یک است آدرس، اگر من فقط اضافه کردن 1، 911 00:40:26,880 --> 00:40:31,406 این فقط به معنی حفظ حرکت رو به جلو، و رو به جلو، و رو به جلو در حافظه است. 912 00:40:31,406 --> 00:40:34,030 آن را مانند خیابان آکسفورد را، خیابانی که ساختمان CS است. 913 00:40:34,030 --> 00:40:36,490 ساختمان CS در 33 خیابان آکسفورد است. 914 00:40:36,490 --> 00:40:39,870 بنابراین اگر شما برای انجام 33 خیابان آکسفورد به علاوه 1، 915 00:40:39,870 --> 00:40:42,870 که شما به ارمغان می آورد به 34 آکسفورد خیابان، پس از آن 35 آکسفورد خیابان، 916 00:40:42,870 --> 00:40:46,380 سپس 36 خیابان آکسفورد، هر آنچه که آن ساختمان واقع هستند - در صورتی که وجود داشته باشد. 917 00:40:46,380 --> 00:40:50,540 و به همین ترتیب، که همه ما در حال انجام در اینجا با حساب اشاره گر. 918 00:40:50,540 --> 00:40:53,820 >> پس از آن یک راه فوق العاده محرمانه است بیان خودمان. 919 00:40:53,820 --> 00:40:56,160 اما همه که اتفاق می افتد در زیر هود 920 00:40:56,160 --> 00:40:59,330 فقط زیر این آدرس ها، مانند زیر یک نقشه، اگر شما خواهد شد، 921 00:40:59,330 --> 00:41:02,692 و یا فلش مانند زیر ما بر روی صفحه نمایش کشیده ام. 922 00:41:02,692 --> 00:41:04,910 خوب، بسیاری به هضم. 923 00:41:04,910 --> 00:41:10,410 هر گونه سوال در نحو، مفاهیم، اشاره گرها، از malloc، و یا مانند. 924 00:41:10,410 --> 00:41:11,480 آره، در اینجا برای اولین بار. 925 00:41:11,480 --> 00:41:13,755 >> رسید پس در آن است که می گوید * t برابر toupper * T، 926 00:41:13,755 --> 00:41:15,575 است که رفتن به سرمایه گذاری تمام حروف یا just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. مالان: آه، درخواست واقعا خوب است. 928 00:41:17,283 --> 00:41:19,805 بنابراین در این خط در اینجا، 31، آیا این سرمایه گذاری 929 00:41:19,805 --> 00:41:21,430 حرف اول و یا همه حروف. 930 00:41:21,430 --> 00:41:23,460 بنابراین اجازه دهید جواب که با رفتن بازگشت به اصول اولیه. 931 00:41:23,460 --> 00:41:26,168 و اصول اولین بار در اینجا منظور من فقط به تعاریف اولیه به 932 00:41:26,168 --> 00:41:27,000 از آنچه که درگیر است. 933 00:41:27,000 --> 00:41:29,770 بنابراین toupper یک تابع است میکند که یک کاراکتر. 934 00:41:29,770 --> 00:41:30,530 که تمام است. 935 00:41:30,530 --> 00:41:36,740 * T معنی به first-- رفتن به آدرس در تی. 936 00:41:36,740 --> 00:41:40,350 بنابراین، در تصویر، اگر این تکه است از حافظه ما با malloc اختصاص داده شده، 937 00:41:40,350 --> 00:41:43,310 و این تی است، * تی به معنی به اینجا بروید. 938 00:41:43,310 --> 00:41:46,710 >> در همین حال، شما در حال عبور که ارزش، حروف کوچک متر 939 00:41:46,710 --> 00:41:50,040 به toupper، شما در حال گرفتن تماس سرمایه M، جایی که شما آن قرار دادن هستند؟ 940 00:41:50,040 --> 00:41:52,410 شما با قرار دادن آن را در آن همان محل. 941 00:41:52,410 --> 00:41:55,540 و به این ترتیب با این منطق از آن تعاریف اولیه آن را تنها 942 00:41:55,540 --> 00:41:58,792 سرمایه گذاری حرف اول مگر اینکه شما با من یا یک تکرار 943 00:41:58,792 --> 00:42:02,000 برای حلقه یا حلقه در حالی که، آن را نمی به انجام هر کاری بیشتر از شما آن را بپرسید. 944 00:42:02,000 --> 00:42:02,583 سوال خوبی بود. 945 00:42:02,583 --> 00:42:03,237 آره؟ 946 00:42:03,237 --> 00:42:05,369 >> رسید چرا شما با استفاده از هم ارجاع روش به جای 947 00:42:05,369 --> 00:42:05,979 آرایه؟ 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. مالان: آه، سوال خوب است. 949 00:42:07,395 --> 00:42:10,672 چرا شما با استفاده از ارجاع روش به جای روش آرایه؟ 950 00:42:10,672 --> 00:42:12,130 بدون هیچ دلیل خاصی، به صداقت. 951 00:42:12,130 --> 00:42:15,290 و، در واقع، برای این نوع عنوان مثال، درست است، 952 00:42:15,290 --> 00:42:17,556 من فقط استدلال ساخت برنامه پیچیده تر است، 953 00:42:17,556 --> 00:42:19,680 چشم بیشتر جلزنج بیش از، مردم چک کردن 954 00:42:19,680 --> 00:42:22,830 چرا که این به نظر می رسد فوق العاده محرمانه، اما حتی اگر آن را انجام همین کار. 955 00:42:22,830 --> 00:42:26,695 و بنابراین، صادقانه بگویم، این است که راه حل بی ارزش بصری پیچیده 956 00:42:26,695 --> 00:42:27,320 به مشکل. 957 00:42:27,320 --> 00:42:29,580 >> آن را هنوز هم طراحی خوب، پنج از پنج برای طراحی، 958 00:42:29,580 --> 00:42:33,140 آیا آن را در براکت است نماد یا نماد اشاره گر. 959 00:42:33,140 --> 00:42:36,299 But-- به ویژه هنگامی که ما بعد در این دوره در pset 5 960 00:42:36,299 --> 00:42:39,340 هنگامی که ما که فرهنگ لغت پیاده سازی است که من یک زن و شوهر از times-- ذکر کرده ام 961 00:42:39,340 --> 00:42:42,300 ما در واقع می خواهیم در مورد مراقبت آدرس های حافظه سطح پایین 962 00:42:42,300 --> 00:42:44,140 که ما واقعا درک چه خبره. 963 00:42:44,140 --> 00:42:48,300 >> اما در حال حاضر، آن می رسد که این خط از کد براکت مربع در اینجا 964 00:42:48,300 --> 00:42:49,900 واقعا نمی وجود دارد. 965 00:42:49,900 --> 00:42:52,230 آنها آنچه به نام هستند شکر نحوی که 966 00:42:52,230 --> 00:42:58,390 فقط یک راه عجیب سرد است گفت: کامپایلر تبدیل براکت به 967 00:42:58,390 --> 00:43:00,420 که عبارت ریاضی. 968 00:43:00,420 --> 00:43:02,660 پس از آن یک کنوانسیون انسان است قادر به نوشتن 969 00:43:02,660 --> 00:43:04,220 این بسیار کاربر پسند براکت. 970 00:43:04,220 --> 00:43:06,850 اما آنچه کامپایلر، صدای جرنگ جرنگ، است که واقعا انجام هر زمان 971 00:43:06,850 --> 00:43:10,970 شما ارسال آنچه که در خط برجسته 24، در زیر کاپوت آن را واقعا 972 00:43:10,970 --> 00:43:12,330 تبدیل آن به این. 973 00:43:12,330 --> 00:43:16,200 آن را فقط بیشتر لذت بخش به عنوان یک انسان به خواندن و نوشتن کد مانند خط 24. 974 00:43:16,200 --> 00:43:18,530 اما در نهایت آن آموزش چرخ بیش از حد آمده 975 00:43:18,530 --> 00:43:21,780 وقتی راحتی خود فرد قوی تر می شود. 976 00:43:21,780 --> 00:43:27,240 >> همه حق است، پس به یاد آورید که این مرتب کردن بر اساس بزرگترین مشکل بود 977 00:43:27,240 --> 00:43:27,807 ما را به فرار. 978 00:43:27,807 --> 00:43:30,640 و این چیزی است که موجب این طیف گفتگو لعنتی در مورد اشاره گرها، 979 00:43:30,640 --> 00:43:32,340 و آدرس، و همه چیز کپی. 980 00:43:32,340 --> 00:43:35,410 بخاطر آن بود که ما افتاد بیش از این احمق، احمقانه مسئله، به موجب آن 981 00:43:35,410 --> 00:43:38,830 من logically-- با لورن اجرا تا در اینجا در نسخه ی نمایشی و آب پرتقال 982 00:43:38,830 --> 00:43:43,770 در milk-- کاملا عملکرد الگوریتمی درست 983 00:43:43,770 --> 00:43:47,010 برای تعویض دو متغیرها ارزش، اما چیز لعنتی 984 00:43:47,010 --> 00:43:50,550 هیچ مداوم ندارد، و یا دائمی، اثر بر کد من. 985 00:43:50,550 --> 00:43:51,820 >> و به همین دلیل بود که؟ 986 00:43:51,820 --> 00:43:54,650 به طور خلاصه، این است اجرای مبادله 987 00:43:54,650 --> 00:43:58,740 منطقی درست است، اما هیچ تاثیری در متغیر که به آن به تصویب رسید، 988 00:43:58,740 --> 00:44:01,119 مانند x و y برای اصلی؟ 989 00:44:01,119 --> 00:44:02,410 جان کلام این موضوع چه بود؟ 990 00:44:02,410 --> 00:44:02,909 آره؟ 991 00:44:02,909 --> 00:44:05,532 رسید از آنجا که متغیر ساخته شده کپی از متغیر در پاس 992 00:44:05,532 --> 00:44:06,240 از طریق تابع. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. مالان: دقیقا، زمانی که شما عبور متغیرها را به یک تابع، و یا استدلال 994 00:44:09,060 --> 00:44:11,030 را به یک تابع، آنها تصویب شده توسط کپی، که 995 00:44:11,030 --> 00:44:14,770 یعنی شما یک یکسان به دنبال گرفتن الگوی بیت برای هر دو x و y، 996 00:44:14,770 --> 00:44:15,955 به نام اینجا A و B. 997 00:44:15,955 --> 00:44:18,080 و شما می توانید هر چیزی را انجام شما با کسانی که نسخه می خواهید، 998 00:44:18,080 --> 00:44:20,657 اما آنها در حال رفتن به هیچ اثر بر روی تابع فراخوانی شده. 999 00:44:20,657 --> 00:44:22,990 و، در واقع، ما به خود جلب کرد که تصویر بر روی صفحه نمایش، فراخوان 1000 00:44:22,990 --> 00:44:25,520 زمان گذشته، موجب آن اگر شما واقعا در مورد چه چیزی فکر می کنم 1001 00:44:25,520 --> 00:44:28,570 در زیر hood-- اگر این حافظه کامپیوتر شما است، 1002 00:44:28,570 --> 00:44:31,650 و پایین در اینجا تکه از است حافظه اصلی استفاده می شود برای، 1003 00:44:31,650 --> 00:44:34,020 این تکه از است حافظه برای مبادله استفاده می شود، 1004 00:44:34,020 --> 00:44:37,090 و بنابراین حتی اگر اصلی دو متغیر x و y، 1005 00:44:37,090 --> 00:44:41,840 مبادله ممکن است به دنبال یکسان ارزش ها، که هر دو 1 و 2، 1006 00:44:41,840 --> 00:44:44,520 اما آنها به طور کامل هستید تکه های مختلف حافظه است. 1007 00:44:44,520 --> 00:44:46,130 >> بنابراین ما نیاز به یک راه حل برای این. 1008 00:44:46,130 --> 00:44:51,580 و صادقانه بگویم، آن را در حال حاضر به نظر می رسد که ما یک راه حل برای این مشکل، درست است. 1009 00:44:51,580 --> 00:44:55,760 اگر ما در حال حاضر توانایی به دستکاری همه چیز از طریق آدرس 1010 00:44:55,760 --> 00:44:59,310 و، از سینی و نردبان سبک، به دنبال این فلش 1011 00:44:59,310 --> 00:45:02,820 و به هر جایی که ما می خواهیم در حافظه، می تواند ما نیست 1012 00:45:02,820 --> 00:45:06,220 حل این مشکل با عبور از اصلی به مبادله 1013 00:45:06,220 --> 00:45:09,650 نه مقادیر ما می خواهیم مبادله، اما فقط به طور مستقیم 1014 00:45:09,650 --> 00:45:11,630 چه چیزی می تواند ما عبور به مبادله به جای؟ 1015 00:45:11,630 --> 00:45:12,620 >> [INTERPOSING صداهای] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. مالان: چرا ما نه تنها با تصویب آن آدرس، درست است؟ 1017 00:45:15,244 --> 00:45:17,470 چرا ما نمی سواپ را نقشه گنج، اگر شما خواهد شد، 1018 00:45:17,470 --> 00:45:20,950 که منجر به ارزش های واقعی x و y. 1019 00:45:20,950 --> 00:45:24,340 مبادله بیایید، در واقع تغییر کسانی که بیت اصلی، به جای 1020 00:45:24,340 --> 00:45:26,797 فقط عبور نسخه از بیت. 1021 00:45:26,797 --> 00:45:29,130 و به همین ترتیب، در واقع، این چیزی است که رفتن به راه حل است. 1022 00:45:29,130 --> 00:45:31,899 این نسخه در اینجا است به وضوح بد و ناقص است. 1023 00:45:31,899 --> 00:45:35,190 و در حال حاضر، در نگاه اول، آن را فقط به نظر می رسد مانند ما اضافه یک دسته از ستاره به طور تصادفی 1024 00:45:35,190 --> 00:45:37,106 و عبور انگشتان ما که آن را کامپایل کنید. 1025 00:45:37,106 --> 00:45:38,460 اما، اکنون کامپایل. 1026 00:45:38,460 --> 00:45:40,090 >> اما اجازه دهید ببینیم که چه چیزی این چیز باشد. 1027 00:45:40,090 --> 00:45:43,990 و متاسفانه، نویسندگان C می تواند انتخاب کرده اند نماد دیگری 1028 00:45:43,990 --> 00:45:46,380 به این کمی واضح تر، اما اپراتور ستاره 1029 00:45:46,380 --> 00:45:48,610 معانی متفاوتی دارد در دو شرایط متفاوت. 1030 00:45:48,610 --> 00:45:50,890 و ما دیده ایم هر دو، اما اجازه دهید تمایز قائل شود. 1031 00:45:50,890 --> 00:45:55,310 >> بنابراین تا در بالای صفحه وجود دارد، من زمانی که a و b را تغییر داده اند 1032 00:45:55,310 --> 00:46:00,470 از نوع int در بد نسخه به int ستاره، A و B، 1033 00:46:00,470 --> 00:46:01,740 پیش از این، اعداد صحیح بود. 1034 00:46:01,740 --> 00:46:05,752 A و B چه در حال حاضر در خوب، نسخه سبز؟ 1035 00:46:05,752 --> 00:46:06,900 آنها آدرس است. 1036 00:46:06,900 --> 00:46:09,610 آدرس چه، تا روشن شود؟ 1037 00:46:09,610 --> 00:46:10,770 آدرس از اعداد صحیح. 1038 00:46:10,770 --> 00:46:12,520 بنابراین این واقعیت است که من گفت یعنی ستاره بین المللی 1039 00:46:12,520 --> 00:46:15,440 این آدرس است یک عدد صحیح، به طور خاص. 1040 00:46:15,440 --> 00:46:19,120 >> بنابراین در حال حاضر در خط کد اطلاع، چیز دیگری هم تغییر کرده است. 1041 00:46:19,120 --> 00:46:22,770 TMP باقی می ماند همان، به دلیل فقط عدد صحیح موقت است، 1042 00:46:22,770 --> 00:46:24,110 هیچ سحر و جادو حافظه وجود دارد. 1043 00:46:24,110 --> 00:46:26,370 اما در حال حاضر نیاز به یک ستاره. 1044 00:46:26,370 --> 00:46:28,560 و، در واقع، هر اشاره دیگر A و B، 1045 00:46:28,560 --> 00:46:31,780 توجه کنید که همه که تغییر از قرمز به سبز 1046 00:46:31,780 --> 00:46:34,209 این است که من پیشوند آن متغیرها با ستاره. 1047 00:46:34,209 --> 00:46:35,750 از آنجا که من نمی خواهم به کپی A و B. 1048 00:46:35,750 --> 00:46:40,350 چرا که اگر من فقط کپی کنید A و B و مبادله A و B، چه هستم من در واقع مبادله؟ 1049 00:46:40,350 --> 00:46:43,760 فقط آدرس، من می خواهم به مبادله آنچه در آن آدرس است. 1050 00:46:43,760 --> 00:46:44,860 من میخواهم به آنجا بروم. 1051 00:46:44,860 --> 00:46:48,000 و به این ترتیب اپراتور ستاره در داخل تابع من، 1052 00:46:48,000 --> 00:46:51,700 نه در داخل از لیست پارامتر، معنی است که شما به آن آدرس بروید 1053 00:46:51,700 --> 00:46:54,490 و در واقع این ارزش ها را تغییر دهید. 1054 00:46:54,490 --> 00:46:56,500 >> پس چه می کند تصویر در حال حاضر مانند به جای نگاه کنید. 1055 00:46:56,500 --> 00:47:03,250 خوب، اگر به جای من عبور در یک و ب 1 و 2-- 1056 00:47:03,250 --> 00:47:05,790 من در واقع نیاز به اضافه کردن یک تعریف دیگر در اینجا. 1057 00:47:05,790 --> 00:47:09,030 بنابراین فرض کنید که این تکه حافظه است در محل 10. 1058 00:47:09,030 --> 00:47:12,960 >> این است که در محل 11، اما این یک بیت از یک ساده سازی است، 1059 00:47:12,960 --> 00:47:18,900 من در حال حاضر دو انتخاب من عبور X و y و یا آدرس خود را منتقل کنم؟ 1060 00:47:18,900 --> 00:47:22,500 اگر من آدرس خود را منتقل مثل این، من فقط 1061 00:47:22,500 --> 00:47:25,390 در حال حاضر نیاز به پیاده سازی مبادله در کد سبز 1062 00:47:25,390 --> 00:47:29,080 A و به طوری که وقتی آن را می بیند که آن را می بیند B، آن را نه تنها کپی A و B 1063 00:47:29,080 --> 00:47:30,540 و حرکت شیر ​​و آب پرتقال. 1064 00:47:30,540 --> 00:47:32,664 شیر و آب پرتقال استعاره اکنون تجزیه می کند، 1065 00:47:32,664 --> 00:47:35,060 زیرا این فنجان نقشه مایع و نمی کند. 1066 00:47:35,060 --> 00:47:37,750 به جای آن ما نیاز به رفتن به آدرس 10 و ما 1067 00:47:37,750 --> 00:47:42,420 نیاز به رفتن به آدرس 11 و پس از آن انجام که منطق مبادله. 1068 00:47:42,420 --> 00:47:45,580 >> بنابراین منطق همان است، اما ما نیاز به یک راه کمی متفاوت 1069 00:47:45,580 --> 00:47:47,160 دسترسی به آن متغیرها. 1070 00:47:47,160 --> 00:47:52,400 و بنابراین در پایان، چه برنامه به مانند این است. 1071 00:47:52,400 --> 00:47:56,610 در swap.c به معنای واقعی کلمه کپی و جا به جا نسخه سبز. 1072 00:47:56,610 --> 00:47:58,450 اما من نیاز به یک تغییر دهید. 1073 00:47:58,450 --> 00:48:00,180 این کافی نیست فقط به تغییر مبادله. 1074 00:48:00,180 --> 00:48:03,830 چه خط دیگری از کد من نیاز به تغییر؟ 1075 00:48:03,830 --> 00:48:04,330 آره؟ 1076 00:48:04,330 --> 00:48:05,770 >> رسید که در آن آرگومان می گیرد. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. مالان: از کجا آن استدلال خود را طول می کشد. 1078 00:48:07,603 --> 00:48:09,985 بنابراین اگر من رفته تا به اصلی، من می توانید در x و y نه تنها عبور، 1079 00:48:09,985 --> 00:48:12,820 و من قول می دهم، آخرین قطعه ای از نحو جدید امروز. 1080 00:48:12,820 --> 00:48:17,200 من نیاز به تصویب در نمی x و Y اما آدرس x و y. 1081 00:48:17,200 --> 00:48:20,400 و معلوم است، نماد که نویسندگان C انتخاب 1082 00:48:20,400 --> 00:48:23,860 در صورت استفاده از یک علامت در اینجا، نه به با علامت بیتی اشتباه گرفته، 1083 00:48:23,860 --> 00:48:27,130 اگر شما استفاده از یک علامت در اینجا و یک علامت در اینجا، 1084 00:48:27,130 --> 00:48:29,570 این ارقام برای شما، چه آدرس x است، 1085 00:48:29,570 --> 00:48:31,740 شاید آن 10، چه خبر آدرس Y، شاید آن 1086 00:48:31,740 --> 00:48:35,400 11، و عبور آن در جای. 1087 00:48:35,400 --> 00:48:37,210 >> بنابراین بسیاری برای جذب همه در یک بار. 1088 00:48:37,210 --> 00:48:40,190 اما اجازه دهید در حال حاضر به سرعت ببینید در چهار دقیقه باقی مانده ما 1089 00:48:40,190 --> 00:48:42,150 در آن همه چیز به چپ چپ می توانید بروید. 1090 00:48:42,150 --> 00:48:45,120 و به عنوان یک کنار، در واقع من در زمان این تصویر، 1091 00:48:45,120 --> 00:48:46,920 TF این تصویر یک یا دو سال پیش انجام شد. 1092 00:48:46,920 --> 00:48:49,190 بنابراین این گوشه است از سالن ناهار خوری الیوت. 1093 00:48:49,190 --> 00:48:52,310 اشاره گرها شاید سخت ترین موضوع که ما در CS50 را پوشش میدهد. 1094 00:48:52,310 --> 00:48:54,810 بنابراین اگر شما نگران مرتب کردن بر اساس شیب است شاید آن را 1095 00:48:54,810 --> 00:48:56,770 بیشتر از یک چوب هاکی مثل این، تحقق بخشیدن به 1096 00:48:56,770 --> 00:49:00,160 ما در حال نزدیک شدن به یک نوع از اوج در از نظر پیچیدگی مفهومی. 1097 00:49:00,160 --> 00:49:02,300 >> و من مطرح کردن این عکس، چرا که من قسم می خورم 1098 00:49:02,300 --> 00:49:05,920 به خدا، در پاییز سال 1996، که من در زمان CS50 با همکار آموزش من، 1099 00:49:05,920 --> 00:49:09,620 نشاط مهتا، او به من در نشست گوشه ای از سالن الیوت D. بیش از ناهار، 1100 00:49:09,620 --> 00:49:12,330 و یا شام، و یا چیزی را امتحان کنید برای کمک به من درک اشاره گر. 1101 00:49:12,330 --> 00:49:16,520 و این جایی است که من هفته پس از این بود آن را در سخنرانی که معرفی شد 1102 00:49:16,520 --> 00:49:18,170 من در نهایت اشاره گر قابل درک باشد. 1103 00:49:18,170 --> 00:49:20,590 و من امیدوارم که این هستم دور هر چه زودتر برای شما کلیک کنید. 1104 00:49:20,590 --> 00:49:23,540 اما تحقق این کاملا در میان موضوعات پیچیده تر 1105 00:49:23,540 --> 00:49:24,420 ما در نگاه کردم. 1106 00:49:24,420 --> 00:49:25,819 اما در میان قدرتمند ترین است. 1107 00:49:25,819 --> 00:49:28,860 و هنگامی که شما آن را دریافت، آن را واقعا همه فقط رفتن به نهایت با هم آمده است. 1108 00:49:28,860 --> 00:49:31,460 بنابراین مطمئن باشند آن را نمی کند نیاز به همه غرق در امروز. 1109 00:49:31,460 --> 00:49:32,980 >> بنابراین در اینجا آخرین برنامه ما در حال رفتن به در نگاه کنید. 1110 00:49:32,980 --> 00:49:35,605 و ما قصد داریم تا با یک پایان سریع سه دقیقه از تولید انیمیشن خمیری 1111 00:49:35,605 --> 00:49:37,030 ساخته شده توسط دوستان ما، نیک Parlante. 1112 00:49:37,030 --> 00:49:41,440 در اینجا یک برنامه است، که در دو بالا خطوط اعلام x و y متغیر است. 1113 00:49:41,440 --> 00:49:44,780 که هر دو آدرس ها از اعداد صحیح، اشاره گر AKA. 1114 00:49:44,780 --> 00:49:48,125 پس از آن ما به اندازه کافی اختصاص حافظه برای ذخیره یک int 1115 00:49:48,125 --> 00:49:51,344 و ذخیره آدرس که حافظه در x. 1116 00:49:51,344 --> 00:49:53,260 بنابراین، آن را حتی ساده از مثال قبل از. 1117 00:49:53,260 --> 00:49:56,100 من چهار بایت از حافظه را، که به اندازه یک int است، 1118 00:49:56,100 --> 00:49:58,000 قرار داده و آن آدرس را در x است. 1119 00:49:58,000 --> 00:50:01,070 این خط در اینجا به معنی رفتن به آدرس X در 1120 00:50:01,070 --> 00:50:05,270 قرار داده و معنای زندگی، تعداد 42 وجود دارد. 1121 00:50:05,270 --> 00:50:07,710 اما این خط مرا نگران میکند. 1122 00:50:07,710 --> 00:50:12,620 ستاره Y معنی به آدرس در Y، و قرار دادن شماره بدشانسی 13 وجود دارد. 1123 00:50:12,620 --> 00:50:15,780 و چرا از آن خطرناک است، در این نقطه در story-- البته به سرعت در گفت 1124 00:50:15,780 --> 00:50:17,980 در دقیقه پایانی ما here-- چرا این کار بد 1125 00:50:17,980 --> 00:50:19,660 برای من می گویند، به آدرس در Y برود؟ 1126 00:50:19,660 --> 00:50:21,077 >> مخاطبان: شما باید [نامفهوم] است. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. مالان: من ندارد قرار دادن هر چیزی در y. 1128 00:50:22,910 --> 00:50:25,520 پس چه مقدار y است، در این نقطه در داستان؟ 1129 00:50:25,520 --> 00:50:26,570 ما هیچ ایده. 1130 00:50:26,570 --> 00:50:29,190 برخی از آن مقدار زباله است و نه نشانی از Binky مطمئن شوید. 1131 00:50:29,190 --> 00:50:32,532 اگر ما می تواند در این یادداشت به پایان برسد. 1132 00:50:32,532 --> 00:50:34,832 >> [پخش ویدئو] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey، Binky، از خواب بیدار. 1134 00:50:36,500 --> 00:50:39,140 این زمان برای اشاره گر سرگرم کننده است. 1135 00:50:39,140 --> 00:50:40,210 >> -آن چیست؟ 1136 00:50:40,210 --> 00:50:41,690 اطلاعات در مورد اشاره گر؟ 1137 00:50:41,690 --> 00:50:43,570 اوه، مغز گردو و غیره. 1138 00:50:43,570 --> 00:50:46,600 >> خوب، برای شروع، من حدس می زنم ما نیاز به رفتن به یک زن و شوهر اشاره گر. 1139 00:50:46,600 --> 00:50:47,380 >> -باشه. 1140 00:50:47,380 --> 00:50:51,120 این کد دو اشاره گر اختصاص که می تواند به اعداد صحیح اشاره می کنند. 1141 00:50:51,120 --> 00:50:53,557 >> -ok، به خوبی می بینم دو اشاره گر، اما آنها 1142 00:50:53,557 --> 00:50:55,140 به نظر نمی رسد به اشاره به هر چیزی. 1143 00:50:55,140 --> 00:50:55,970 >> -درست است. 1144 00:50:55,970 --> 00:50:58,100 در ابتدا علائم به هر چیزی نقطه نیست. 1145 00:50:58,100 --> 00:51:00,950 چیزهایی که آنها را به نقطه هستند نام pointees و تنظیم آنها را تا 1146 00:51:00,950 --> 00:51:02,330 مرحله دیگری است. 1147 00:51:02,330 --> 00:51:03,210 >> اوه، راست، راست. 1148 00:51:03,210 --> 00:51:03,940 می دانستم. 1149 00:51:03,940 --> 00:51:05,730 pointees جدا هستند. 1150 00:51:05,730 --> 00:51:08,310 پس چگونه می توانم در یک pointee شما اختصاص؟ 1151 00:51:08,310 --> 00:51:11,960 >> -ok، به خوبی این کد اختصاص pointee عدد صحیح جدید، 1152 00:51:11,960 --> 00:51:15,050 و این مجموعه بخشی X به نقطه را به آن است. 1153 00:51:15,050 --> 00:51:16,240 >> -Hey، که به نظر می رسد بهتر است. 1154 00:51:16,240 --> 00:51:17,743 بنابراین آن را به انجام چیزی. 1155 00:51:17,743 --> 00:51:23,580 >> -ok، من ارجاع ایکس اشاره گر به ذخیره شماره 42 به pointee آن است. 1156 00:51:23,580 --> 00:51:27,130 برای این ترفند، من نیاز من چوب جادو از غیر مرجع. 1157 00:51:27,130 --> 00:51:30,200 >> گرز سحر و جادو، شما از غیر مرجع؟ 1158 00:51:30,200 --> 00:51:32,310 آه، که، که بزرگ است. 1159 00:51:32,310 --> 00:51:34,270 >> -این چه کد نظر می رسد. 1160 00:51:34,270 --> 00:51:35,970 من فقط راه اندازی تعداد and-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP صدا] 1162 00:51:37,070 --> 00:51:39,140 >> -Hey، نگاه کن آنجا آن می رود. 1163 00:51:39,140 --> 00:51:43,980 بنابراین، انجام یک ارجاع به x زیر فلش برای دسترسی به pointee آن است. 1164 00:51:43,980 --> 00:51:46,150 در این مورد، به ذخیره 42 در آن وجود دارد. 1165 00:51:46,150 --> 00:51:50,700 هی، سعی کنید با استفاده از آن برای ذخیره تعداد 13 از طریق اشاره گر دیگر، y است. 1166 00:51:50,700 --> 00:51:51,840 >> -باشه. 1167 00:51:51,840 --> 00:51:56,270 من فقط بیش از اینجا به Y، و تعداد 13 راه اندازی. 1168 00:51:56,270 --> 00:52:00,380 و پس از آن گرز را غیر مرجع و just-- 1169 00:52:00,380 --> 00:52:01,646 >> [زنگ اخبار صدا] 1170 00:52:01,646 --> 00:52:04,080 >> اوه، هی که کار نمی کند. 1171 00:52:04,080 --> 00:52:06,470 می گویند، آه، Binky، من نمی فکر می کنم غیر مرجع 1172 00:52:06,470 --> 00:52:10,850 Y یک ایده خوب است، چرا که تنظیم تا pointee مرحله دیگری است. 1173 00:52:10,850 --> 00:52:12,480 و من فکر نمی کنم که ما تا کنون آن را انجام داد. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm، نقطه خوب است. 1175 00:52:14,620 --> 00:52:19,810 >> آره، ما اختصاص داده اشاره گر، Y، اما ما هرگز آن را به نقطه را به یک pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm، بسیار هوشیار. 1177 00:52:21,590 --> 00:52:23,215 -Hey، شما به دنبال خوب وجود دارد، Binky. 1178 00:52:23,215 --> 00:52:26,390 می توانید آن را تعمیر کنید به طوری که نقاط Y به pointee همانند x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure، من استفاده از گرز جادویی من از انتساب اشاره گر. 1180 00:52:29,290 --> 00:52:31,970 >> -is که برای رفتن به یک مشکل، مانند قبل. 1181 00:52:31,970 --> 00:52:33,790 >> طبخ غذا در منزل، این به آن pointees را لمس کنید. 1182 00:52:33,790 --> 00:52:35,840 آن را فقط تغییر یک اشاره گر به نقطه را به همان thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [ظاهر SOUND] 1184 00:52:36,465 --> 00:52:37,450 --as است. 1185 00:52:37,450 --> 00:52:38,440 >> -اوه می فهمم. 1186 00:52:38,440 --> 00:52:41,200 در حال حاضر امتیاز y به همان محل به عنوان X. 1187 00:52:41,200 --> 00:52:42,950 بنابراین، صبر کنید، در حال حاضر Y ثابت است. 1188 00:52:42,950 --> 00:52:44,110 از آن است که pointee. 1189 00:52:44,110 --> 00:52:47,779 بنابراین شما می توانید سعی کنید گرز غیر مرجع دوباره به ارسال بیش از 13. 1190 00:52:47,779 --> 00:52:51,110 >> اوه، خوب، در اینجا می رود. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey، در آن نگاه کنید. 1192 00:52:52,330 --> 00:52:53,570 در حال حاضر غیر مرجع آثار در y است. 1193 00:52:53,570 --> 00:52:57,900 و از آنجا که اشاره گر به اشتراک گذاری که یکی pointee، آنها هر دو 13 را ببینید. 1194 00:52:57,900 --> 00:52:59,952 >> آره، به اشتراک گذاری، UH، هر چه. 1195 00:52:59,952 --> 00:53:01,535 بنابراین، می خواهیم به تغییر مکان در حال حاضر؟ 1196 00:53:01,535 --> 00:53:03,730 >> اوه، نگاه ما خارج از زمان هستند. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> دقیقا وقتی سه قانون اشاره گر به یاد داشته باشید. 1199 00:53:06,520 --> 00:53:09,550 شماره 1، ساختار اصلی است که شما باید یک اشاره گر، 1200 00:53:09,550 --> 00:53:11,630 و آن را اشاره به یک pointee. 1201 00:53:11,630 --> 00:53:13,740 اما اشاره گر و pointee جدا هستند. 1202 00:53:13,740 --> 00:53:15,620 و خطای رایج است به راه اندازی یک اشاره گر 1203 00:53:15,620 --> 00:53:18,000 اما فراموش نکنید که به آن pointee است. 1204 00:53:18,000 --> 00:53:21,170 >> شماره 2، غیر مرجع اشاره گر شروع می شود در اشاره گر 1205 00:53:21,170 --> 00:53:24,020 و پس از فلش خود را بیش از برای دسترسی به pointee آن است. 1206 00:53:24,020 --> 00:53:27,815 همانطور که همه ما می دانیم، این تنها در صورتی وجود دارد کار می کند pointee، که نوع تماس می شود است 1207 00:53:27,815 --> 00:53:29,260 به حکومت شماره 1. 1208 00:53:29,260 --> 00:53:31,990 >> شماره 3، اشاره گر انتساب طول می کشد یک اشاره گر 1209 00:53:31,990 --> 00:53:35,330 و تغییرات آن را به نقطه را به همان pointee به عنوان اشاره گر است. 1210 00:53:35,330 --> 00:53:37,150 بنابراین پس از انتساب، دو اشاره گر 1211 00:53:37,150 --> 00:53:40,927 به pointee همان نقطه، گاهی اوقات که به اشتراک گذاری نامیده می شود. 1212 00:53:40,927 --> 00:53:42,510 و این همه به آن وجود دارد، واقعا. 1213 00:53:42,510 --> 00:53:43,130 خداحافظ خداحافظی کن. 1214 00:53:43,130 --> 00:53:43,475 >> [END پخش] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. مالان: که آن را برای CS50. 1216 00:53:44,830 --> 00:53:46,246 با تشکر از استاد نیک Parlante. 1217 00:53:46,246 --> 00:53:47,730 ما شما را هفته آینده را ببینید. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [پخش موسیقی الکترونیکی] 1220 00:53:56,435 --> 00:57:22,775