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