1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. Malan: Được rồi. 2 00:00:08,160 --> 00:00:11,170 Đây là CS50, và đây là kết thúc của tuần thứ hai. 3 00:00:11,170 --> 00:00:14,650 Nếu bạn mong đợi để bị đói khoảng thời gian này vào ngày mai, biết rằng chúng ta đang đi 4 00:00:14,650 --> 00:00:18,920 triệu tập như một ngày mai nhóm nhỏ, thứ Năm, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 URL này nếu bạn muốn RSVP. 6 00:00:21,460 --> 00:00:25,270 Không gian hạn hẹp, vì vậy xin vui lòng tha thứ nếu hình thức đã lấp đầy theo thời gian bạn 7 00:00:25,270 --> 00:00:26,680 điền này ra ngoài. 8 00:00:26,680 --> 00:00:29,400 Một URL mặc dù có thể được quan tâm này. 9 00:00:29,400 --> 00:00:32,409 >> Vì vậy, chỉ trong khoảng thời gian một tháng, các khóa học sẽ được làm sẵn có 10 00:00:32,409 --> 00:00:36,090 tất cả các cách rộng rãi hơn thông qua edx, thông qua đó người trên Internet sẽ được 11 00:00:36,090 --> 00:00:39,580 có thể làm theo cùng, tham gia vào các khóa học khá tích cực, trên thực tế. 12 00:00:39,580 --> 00:00:43,070 Họ sẽ sử dụng gia dụng CS50 và CS50 Chủ đề và hầu hết các 13 00:00:43,070 --> 00:00:45,840 công cụ phần mềm khác nhau mà chúng ta đã đã được sử dụng trong học kỳ này. 14 00:00:45,840 --> 00:00:49,030 Và một trong những sáng kiến, chúng tôi muốn đưa vào như là một thử nghiệm trong năm nay 15 00:00:49,030 --> 00:00:53,120 là để xem bao nhiêu nội dung chúng ta có thể dịch thành khác nói và 16 00:00:53,120 --> 00:00:54,110 viết ngôn ngữ. 17 00:00:54,110 --> 00:00:58,000 Vì vậy, nếu bạn có thể có một quan tâm đến tham gia trong dự án này, theo đó 18 00:00:58,000 --> 00:01:02,090 chúng tôi sẽ cung cấp bảng điểm tiếng Anh và phụ đề của khóa học 19 00:01:02,090 --> 00:01:05,190 bài giảng và quần short và hội thảo và các bộ phận và như thế - 20 00:01:05,190 --> 00:01:08,700 nếu bạn nói trôi chảy hoặc viết thành thạo một số ngôn ngữ khác, chúng tôi sẽ 21 00:01:08,700 --> 00:01:12,240 tham gia trong dự án này, nhờ đó mà bạn thực hiện trên một hoặc nhiều hơn các 22 00:01:12,240 --> 00:01:15,340 video, chuyển chúng thành một ngôn ngữ mà bạn biết khá tốt. 23 00:01:15,340 --> 00:01:19,050 Để cung cấp cho bạn một cảm giác của giao diện, có giao diện người dùng dựa trên web này 24 00:01:19,050 --> 00:01:22,330 rằng chúng tôi sẽ được sử dụng sẽ tạo ra cơ bản là một giao diện người dùng như thế này. 25 00:01:22,330 --> 00:01:24,520 Điều này đã được tôi giảng dạy một số Halloween trước đây. 26 00:01:24,520 --> 00:01:27,710 Và ở phía bên tay phải có trong màu đen bên cạnh các tem thời gian, 27 00:01:27,710 --> 00:01:31,300 bạn sẽ thấy những điều khác nhau tuôn ra từ miệng của tôi ngày hôm đó. 28 00:01:31,300 --> 00:01:34,660 Và sau đó dưới nó, bạn sẽ có thể để dịch sang một số ngôn ngữ khác. 29 00:01:34,660 --> 00:01:37,840 Lập bản đồ chính xác những gì giữa, trong trường hợp này, tiếng Anh 30 00:01:37,840 --> 00:01:38,660 và, nói, tiếng Tây Ban Nha. 31 00:01:38,660 --> 00:01:40,480 Vì vậy, nó thực sự là một công cụ rất thân thiện với người sử dụng. 32 00:01:40,480 --> 00:01:43,690 Bạn có thể tua lại và nhanh chóng chuyển tiếp rất dễ dàng với các phím tắt bàn phím. 33 00:01:43,690 --> 00:01:46,710 Vì vậy, nếu bạn muốn lấy một phần trong thí nghiệm này và có lời nói của bạn 34 00:01:46,710 --> 00:01:50,730 nhìn thấy và đọc bởi có khả năng hàng ngàn người ra khỏi đó, cảm thấy 35 00:01:50,730 --> 00:01:51,960 miễn phí để tham gia. 36 00:01:51,960 --> 00:01:56,940 >> Bây giờ một từ về con mèo con từ thứ hai, vì sợ rằng chúng tôi đã gửi một quá 37 00:01:56,940 --> 00:01:58,120 đáng sợ tin nhắn. 38 00:01:58,120 --> 00:02:02,130 Do nhận ra rằng giờ làm việc đề nghị và là phòng đề nghị, 39 00:02:02,130 --> 00:02:05,110 thiết kế của khóa học là rất nhiều để có sinh viên cộng tác và 40 00:02:05,110 --> 00:02:09,250 nói chuyện để làm việc thông qua các bài tập và các vấn đề với nhau. 41 00:02:09,250 --> 00:02:13,630 Và thực sự dòng đi xuống, một lần nữa, công việc cuối cùng bạn 42 00:02:13,630 --> 00:02:16,420 phải nộp của riêng bạn. 43 00:02:16,420 --> 00:02:19,080 Và vì vậy nó khá trung thực - trong giờ hành chính, nó hoàn toàn bình thường - 44 00:02:19,080 --> 00:02:21,560 nó hoàn toàn được mong đợi, thậm chí - để được trò chuyện với một số 45 00:02:21,560 --> 00:02:22,370 những người bạn bên cạnh bạn. 46 00:02:22,370 --> 00:02:25,240 Nếu anh ta hoặc cô ấy đang đấu tranh với một số chủ đề, và bạn giống như, oh, 47 00:02:25,240 --> 00:02:27,750 tôi cho bạn một cái nhìn thoáng qua của một số dòng mã mà tôi đã viết. 48 00:02:27,750 --> 00:02:28,290 Đó là tốt. 49 00:02:28,290 --> 00:02:28,700 Điều đó xảy ra. 50 00:02:28,700 --> 00:02:31,580 Và đó là rất nhiều thuận lợi, tôi nghĩ, với quá trình học tập. 51 00:02:31,580 --> 00:02:35,270 Trường hợp dòng, một lần nữa, bị vượt qua khi đầu là loại nghiêng trên 52 00:02:35,270 --> 00:02:38,800 giây, quá nhiều hoặc phút cho rằng thực sự chỉ có 53 00:02:38,800 --> 00:02:41,250 là một cơ hội khắc phục ách tắc cho bạn của bạn. 54 00:02:41,250 --> 00:02:43,870 Và chắc chắn, khi nhận được những điều trao đổi qua email và Dropbox và 55 00:02:43,870 --> 00:02:45,350 như thế, cũng là dòng. 56 00:02:45,350 --> 00:02:48,940 Vì vậy, bằng mọi cách, cảm thấy thoải mái và cảm thấy được khuyến khích để trò chuyện với bạn bè 57 00:02:48,940 --> 00:02:51,270 và các bạn cùng lớp về psets và nhiều hơn nữa. 58 00:02:51,270 --> 00:02:54,680 Và chỉ cần nhận ra rằng những gì bạn cuối cùng trình thực sự cần được 59 00:02:54,680 --> 00:02:57,780 sản phẩm sáng tạo của bạn và không phải một người nào khác. 60 00:02:57,780 --> 00:03:01,010 >> Vì vậy, trong cùng một tĩnh mạch của các sinh vật cuddly, bạn có thể 61 00:03:01,010 --> 00:03:02,820 biết của anh chàng này ở đây. 62 00:03:02,820 --> 00:03:06,180 Vì vậy, đây là một bộ phim horrifically cheesy từ năm trước. 63 00:03:06,180 --> 00:03:08,680 Bất cứ ai ở đây nhìn thấy Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Được rồi. 65 00:03:09,120 --> 00:03:10,220 Vì vậy, một số tốt ở đây. 66 00:03:10,220 --> 00:03:13,840 Vì vậy, đây là cách học tập tuyệt vời của chúng tôi giới thiệu ngày hôm nay cuối cùng 67 00:03:13,840 --> 00:03:15,130 khái niệm về mật mã. 68 00:03:15,130 --> 00:03:19,010 Và như vậy một trong những vấn đề tên miền cụ thể cho 2 pset, sẽ đến 69 00:03:19,010 --> 00:03:22,770 ra chậm vào tối mai, là để nhảy vào thế giới của mật mã, 70 00:03:22,770 --> 00:03:26,380 là nghệ thuật mã hóa hoặc xáo trộn thông tin. 71 00:03:26,380 --> 00:03:30,160 Và điều này cuối cùng liên quan đến thế giới của an ninh. 72 00:03:30,160 --> 00:03:34,440 >> Bây giờ bảo đảm cho hầu hết chúng ta đi kèm trong các hình thức của cơ chế khá nhàm chán. 73 00:03:34,440 --> 00:03:36,920 Tất cả chúng ta có tên người dùng và mật khẩu. 74 00:03:36,920 --> 00:03:41,350 Và tất cả chúng ta đều có tên người dùng và mật khẩu rất xấu, nhiều khả năng. 75 00:03:41,350 --> 00:03:45,250 Nếu mật khẩu của bạn là như nhau trên nhiều trang web, có thể là không 76 00:03:45,250 --> 00:03:47,920 ý tưởng tốt nhất, như chúng ta sẽ thảo luận vào cuối học kỳ. 77 00:03:47,920 --> 00:03:51,680 Nếu mật khẩu của bạn được viết trên một lưu ý dính - không phải trò đùa - trên của bạn 78 00:03:51,680 --> 00:03:55,130 màn hình, cũng không phải là nhất thiết phải thiết kế tốt nhất nhưng khá phổ biến 79 00:03:55,130 --> 00:03:56,140 hiện tượng này. 80 00:03:56,140 --> 00:04:00,420 Và nếu bạn không sử dụng mật mã để mã hóa mật khẩu của bạn, họ là 81 00:04:00,420 --> 00:04:01,610 đặc biệt dễ bị tổn thương. 82 00:04:01,610 --> 00:04:04,670 Vì vậy, nếu bạn nghĩ rằng bạn đang là siêu thông minh bằng cách có một từ ẩn 83 00:04:04,670 --> 00:04:07,740 tài liệu một nơi nào đó trên ổ cứng của bạn có tất cả các mật khẩu của bạn, nhưng 84 00:04:07,740 --> 00:04:10,550 đó là trong một thư mục mà không ai sẽ nhìn vào, mà cũng không phải là rất 85 00:04:10,550 --> 00:04:11,540 an toàn cơ chế. 86 00:04:11,540 --> 00:04:15,100 Và vì vậy những gì pset 2 sẽ giới thiệu này là nghệ thuật mật mã và 87 00:04:15,100 --> 00:04:18,300 xáo trộn thông tin để những thứ như mật khẩu 88 00:04:18,300 --> 00:04:19,500 an toàn hơn. 89 00:04:19,500 --> 00:04:24,500 Vì vậy, để thúc đẩy vấn đề này rất thực tế với một rất không thực thế giới 90 00:04:24,500 --> 00:04:28,740 kịch bản này, cho phép tôi giới thiệu với bạn một trong những đoạn phim yêu thích của chúng tôi ở đây từ này 91 00:04:28,740 --> 00:04:29,895 phim, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [VIDEO PLAYBACK] 93 00:04:30,565 --> 00:04:32,995 -Mũ bảo hiểm, bạn quái vật, những gì đang xảy ra? 94 00:04:32,995 --> 00:04:34,730 Bạn đang làm gì để con gái tôi? 95 00:04:34,730 --> 00:04:38,960 -Giấy phép tôi để giới thiệu các bác sĩ phẫu thuật rực rỡ trẻ, Tiến sĩ Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, mũi lớn nhất công việc người đàn ông trong toàn bộ 97 00:04:43,290 --> 00:04:45,526 vũ trụ và Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Your Điện hạ. 99 00:04:46,450 --> 00:04:47,380 Mũi công việc? 100 00:04:47,380 --> 00:04:48,035 Tôi không hiểu. 101 00:04:48,035 --> 00:04:49,480 Cô ấy đã có một công việc mũi. 102 00:04:49,480 --> 00:04:51,490 Đó là một 16 ngọt ngào hiện tại. 103 00:04:51,490 --> 00:04:53,090 -Không, nó không phải là những gì bạn nghĩ. 104 00:04:53,090 --> 00:04:55,150 Nó nhiều, tồi tệ hơn nhiều. 105 00:04:55,150 --> 00:04:59,860 Nếu bạn không cho tôi sự kết hợp lá chắn không khí, Tiến sĩ Schlotkin 106 00:04:59,860 --> 00:05:04,135 cho con gái của bạn trở lại mũi cũ của cô. 107 00:05:04,135 --> 00:05:05,385 -Không! 108 00:05:08,202 --> 00:05:10,186 Nơi mà bạn đã có được điều đó? 109 00:05:10,186 --> 00:05:11,178 -Tất cả các quyền. 110 00:05:11,178 --> 00:05:11,674 Tôi sẽ nói cho. 111 00:05:11,674 --> 00:05:12,666 Tôi sẽ nói cho. 112 00:05:12,666 --> 00:05:14,154 -Không, cha, không có. 113 00:05:14,154 --> 00:05:15,150 Bạn không được. 114 00:05:15,150 --> 00:05:16,460 Quyền phổ cập, thân yêu của tôi. 115 00:05:16,460 --> 00:05:18,450 Tôi sẽ bỏ lỡ mũi mới của bạn. 116 00:05:18,450 --> 00:05:21,550 Nhưng tôi sẽ không nói cho họ biết sự kết hợp không có vấn đề gì. 117 00:05:21,550 --> 00:05:23,100 -Rất tốt. 118 00:05:23,100 --> 00:05:25,510 Tiến sĩ Schlotkin, làm tồi tệ nhất của bạn. 119 00:05:25,510 --> 00:05:26,760 Niềm vui của tôi. 120 00:05:30,560 --> 00:05:31,180 -Không! 121 00:05:31,180 --> 00:05:33,450 Chờ đợi, chờ đợi. 122 00:05:33,450 --> 00:05:34,770 Tôi sẽ nói cho. 123 00:05:34,770 --> 00:05:36,400 Tôi sẽ nói cho. 124 00:05:36,400 --> 00:05:38,630 Tôi biết nó sẽ làm việc. 125 00:05:38,630 --> 00:05:42,040 Được rồi, đưa nó cho tôi. 126 00:05:42,040 --> 00:05:46,890 Sự kết hợp là một. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Two. 130 00:05:48,950 --> 00:05:49,370 -Two. 131 00:05:49,370 --> 00:05:50,450 -Two. 132 00:05:50,450 --> 00:05:50,715 -Ba 133 00:05:50,715 --> 00:05:51,380 -Ba. 134 00:05:51,380 --> 00:05:52,390 -Ba. 135 00:05:52,390 --> 00:05:53,200 -Four. 136 00:05:53,200 --> 00:05:53,720 -Four. 137 00:05:53,720 --> 00:05:55,830 -Four. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Five. 140 00:05:57,120 --> 00:05:58,560 -Five. 141 00:05:58,560 --> 00:06:03,770 Vì vậy, sự kết hợp là một, hai, ba, bốn, năm. 142 00:06:03,770 --> 00:06:06,745 Đó là sự kết hợp ngu ngốc nhất tôi từng được nghe trong cuộc sống của tôi. 143 00:06:06,745 --> 00:06:09,290 Đó là điều mà một thằng ngốc sẽ có trong hành lý của mình. 144 00:06:09,290 --> 00:06:11,540 Cảm ơn bạn, manh liệt của bạn. 145 00:06:11,540 --> 00:06:12,940 -Những gì bạn đã làm gì? 146 00:06:12,940 --> 00:06:14,230 -Tôi tắt tường. 147 00:06:14,230 --> 00:06:14,630 -Không, bạn đã không. 148 00:06:14,630 --> 00:06:15,430 Bạn tắt toàn bộ phim. 149 00:06:15,430 --> 00:06:16,722 Tôi phải đã bấm nút sai. 150 00:06:16,722 --> 00:06:18,078 -Thôi, đưa nó trở lại. 151 00:06:18,078 --> 00:06:18,805 Đặt bộ phim trở lại. 152 00:06:18,805 --> 00:06:19,080 -Vâng, thưa ông. 153 00:06:19,080 --> 00:06:19,270 Vâng, thưa ông. 154 00:06:19,270 --> 00:06:19,830 - Đi thôi, Erna. 155 00:06:19,830 --> 00:06:20,270 Hãy đến, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Tất nhiên bạn biết tôi vẫn sẽ có hoá đơn cho bạn cho việc này. 157 00:06:27,400 --> 00:06:28,325 -Vâng, nó hoạt động? 158 00:06:28,325 --> 00:06:29,550 Cổng đâu? 159 00:06:29,550 --> 00:06:29,910 Nó làm việc, thưa ông. 160 00:06:29,910 --> 00:06:30,770 Chúng tôi có sự kết hợp. 161 00:06:30,770 --> 00:06:31,390 -Great. 162 00:06:31,390 --> 00:06:35,630 Bây giờ chúng ta có thể mỗi hơi thở cuối cùng không khí trong lành từ hành tinh Druidia. 163 00:06:35,630 --> 00:06:36,550 Kết hợp là gì? 164 00:06:36,550 --> 00:06:38,805 Một, hai, ba, bốn, năm. 165 00:06:38,805 --> 00:06:40,610 Một, hai, ba, bốn, năm? 166 00:06:40,610 --> 00:06:41,070 -Vâng. 167 00:06:41,070 --> 00:06:41,760 Đó là tuyệt vời. 168 00:06:41,760 --> 00:06:45,200 Tôi đã có sự kết hợp trên cùng một hành lý của tôi. 169 00:06:45,200 --> 00:06:47,800 Chuẩn bị Spaceball 1 để khởi hành ngay lập tức. 170 00:06:47,800 --> 00:06:48,536 -Vâng, thưa ông. 171 00:06:48,536 --> 00:06:52,350 Và thay đổi sự kết hợp trên hành lý của tôi. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [END phát lại video] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. Malan: Một bộ phim tuyệt vời bạn nên bây giờ tất cả. 175 00:07:00,600 --> 00:07:06,540 Vì vậy, bối cảnh ở đây là với các dữ liệu không an toàn đến một cơ hội để 176 00:07:06,540 --> 00:07:07,790 mã hóa nó và để tranh giành nó. 177 00:07:07,790 --> 00:07:11,060 Và như vậy, ví dụ, là một ví dụ về một tin nhắn mã hóa. 178 00:07:11,060 --> 00:07:12,980 Điều này thực sự nói một cái gì đó bằng tiếng Anh. 179 00:07:12,980 --> 00:07:14,750 Nhưng rõ ràng là nó không hoàn toàn rõ ràng. 180 00:07:14,750 --> 00:07:17,360 Và chúng tôi sẽ đến vòng tròn đầy đủ ngày hôm nay để tách những gì bí mật này 181 00:07:17,360 --> 00:07:18,380 tin nhắn ở đây. 182 00:07:18,380 --> 00:07:22,370 Nhưng trong thế giới thực của máy tính, mọi thứ thậm chí không giống như họ có thể 183 00:07:22,370 --> 00:07:23,440 là cụm từ tiếng Anh. 184 00:07:23,440 --> 00:07:27,500 Ví dụ, đây là những gì bạn có thể tìm thấy trên một tiêu chuẩn Linux hoặc Mac hoặc 185 00:07:27,500 --> 00:07:32,080 Unix máy tính trong một tập tin đó là một lần khi một thời gian được gọi là tập tin mật khẩu. 186 00:07:32,080 --> 00:07:34,170 Ngày nay, nó đã bị di chuyển đi nơi khác. 187 00:07:34,170 --> 00:07:38,660 Nhưng nếu bạn nhìn vào đúng chỗ trên một hệ thống, bạn sẽ thấy không chỉ của bạn 188 00:07:38,660 --> 00:07:41,430 tên đăng nhập hoặc của người khác trên hệ thống, nhưng bạn sẽ thấy một 189 00:07:41,430 --> 00:07:43,410 phiên bản mã hóa của mật khẩu của họ. 190 00:07:43,410 --> 00:07:47,800 Thật vậy, hầm mộ, từ đó cho thấy rằng những thứ sau đây là mã hóa. 191 00:07:47,800 --> 00:07:52,030 Và loạt bài này dường như ngẫu nhiên của các chữ cái và các ký tự và số và 192 00:07:52,030 --> 00:07:56,370 vv có thể được giải mã chỉ bằng cách nói chung biết một số bí mật 193 00:07:56,370 --> 00:07:58,600 một từ bí mật, một số bí mật. 194 00:07:58,600 --> 00:08:02,760 Và quả thực, nghệ thuật mật mã cuối cùng nắm tin tưởng của một số 195 00:08:02,760 --> 00:08:05,700 sắp xếp và biết cái gì mà người khác không. 196 00:08:05,700 --> 00:08:10,010 Chúng tôi sẽ tìm hiểu chi tiết hơn một chút ngày hôm nay và trong các pset đến. 197 00:08:10,010 --> 00:08:11,860 >> Và bây giờ là một từ pass / thất bại. 198 00:08:11,860 --> 00:08:15,250 Vì vậy, đặc biệt là, như một số bạn đã tụt dốc vào 1 pset, thiết bị, và 199 00:08:15,250 --> 00:08:18,390 một thế giới mới cho chính mình, nhận ra rằng thất vọng và 200 00:08:18,390 --> 00:08:21,340 sự nhầm lẫn và khó khăn chỉ là kỹ thuật được mong đợi. 201 00:08:21,340 --> 00:08:24,410 Đặc biệt với các pset đầu tiên, nơi có rất nhiều mới chỉ nhận được 202 00:08:24,410 --> 00:08:28,830 quen thuộc với ls và cd và tất cả các lệnh phức tạp trong một môi trường mới. 203 00:08:28,830 --> 00:08:32,679 Và đó là riêng biệt từ các vật liệu thực tế và lập trình tự. 204 00:08:32,679 --> 00:08:35,960 Vì vậy, nhận ra, quá, mà chắc chắn có những giờ làm việc tồn tại như 205 00:08:35,960 --> 00:08:36,770 cơ cấu hỗ trợ. 206 00:08:36,770 --> 00:08:38,620 Phần bắt đầu vào chủ nhật tới. 207 00:08:38,620 --> 00:08:41,990 Nhưng quan trọng nhất, nếu bạn cảm thấy điều đó là không phải là 208 00:08:41,990 --> 00:08:44,420 thế giới cho bạn, nhận ra rằng nó thực sự chỉ cần mất thời gian. 209 00:08:44,420 --> 00:08:47,520 Và ông đã không cho cơ hội này năm trước cho tôi tham gia một lớp 210 00:08:47,520 --> 00:08:50,840 pass / fail, trung thực, tôi sẽ không bao giờ thậm chí còn đặt chân trong lớp học. 211 00:08:50,840 --> 00:08:53,520 Và bạn có thể thay đổi điều này cho đến khi, nói rằng, vào ngày thứ Hai thứ năm của khóa học. 212 00:08:53,520 --> 00:08:57,110 Vì vậy, nếu bạn đang ở trên các cạnh, nhận ra rằng thay vì đầu vào một số khác 213 00:08:57,110 --> 00:09:01,000 vùng biển hoàn toàn, chắc chắn xem xét chỉ cần thay đổi để vượt qua / không. 214 00:09:01,000 --> 00:09:03,750 Một lần nữa, không thực sự văn hóa này ở đây tại Đại học Harvard nhận việc 215 00:09:03,750 --> 00:09:08,080 pass / thất bại kể từ khi tất cả mọi người thực sự muốn đạt được hoặc khẳ. 216 00:09:08,080 --> 00:09:11,470 Nhưng thẳng thắn, đây là một cách tuyệt vời cố gắng một cái gì đó mà có thể không 217 00:09:11,470 --> 00:09:13,110 quen thuộc với bạn. 218 00:09:13,110 --> 00:09:17,090 Và bạn sẽ kết thúc làm trong hầu hết các trường hợp khá tốt, có lẽ 219 00:09:17,090 --> 00:09:18,040 nhiều ngạc nhiên của bạn. 220 00:09:18,040 --> 00:09:20,850 Và trong điều kiện cụ thể, những gì tôi nghĩ rằng vượt qua / không thường làm, 221 00:09:20,850 --> 00:09:23,350 đặc biệt là khi bạn có thể đã có kinh nghiệm với pset 0, nếu bạn đã đặt 222 00:09:23,350 --> 00:09:27,200 trong 10 giờ, 15 giờ, 25 giờ vào một số pset - và bạn chỉ cần đập 223 00:09:27,200 --> 00:09:28,180 đầu vào tường, 224 00:09:28,180 --> 00:09:29,850 và nó nhận được siêu muộn vào ban đêm, 225 00:09:29,850 --> 00:09:31,880 nhưng bạn đã thực hiện pset như 90% số đường, 226 00:09:31,880 --> 00:09:33,780 bạn biết bạn chỉ có thể tìm ra một điều - 227 00:09:33,780 --> 00:09:36,830 vượt qua / không thực sự có các cạnh của một lớp học như thế này, nơi bạn có thể sắp xếp 228 00:09:36,830 --> 00:09:39,150 của hạnh phúc nói được rồi, tôi biết nó không hoàn hảo. 229 00:09:39,150 --> 00:09:40,470 Nhưng tôi đã làm việc ass của tôi về điều này. 230 00:09:40,470 --> 00:09:42,410 Tôi khá hài lòng với nơi mà nó đã kết thúc. 231 00:09:42,410 --> 00:09:44,780 Và đó sẽ đáp ứng sự mong đợi vượt qua / thất bại. 232 00:09:44,780 --> 00:09:46,850 Vì vậy, giữ cho rằng trong tâm trí. 233 00:09:46,850 --> 00:09:47,140 >> Được rồi. 234 00:09:47,140 --> 00:09:50,980 Vì vậy, những người bạn của những người đã đấu tranh để sử dụng Đại học Harvard Wi-Fi biết 235 00:09:50,980 --> 00:09:54,780 rằng có một SSID CS50, một kết nối Wi-Fi nổi xung quanh đó bạn 236 00:09:54,780 --> 00:09:56,520 có thể có may mắn hơn. 237 00:09:56,520 --> 00:09:59,430 Đó là một mỉa mai rằng các mật khẩu cho điều này - nếu bạn muốn thử 238 00:09:59,430 --> 00:10:03,080 kết nối này cho tốc độ tốt hơn và cho chúng tôi biết nếu nó không tốt hơn - 239 00:10:03,080 --> 00:10:09,240 là một, hai, ba, bốn, năm, tất cả các con đường lên đến tám vì tám là 240 00:10:09,240 --> 00:10:10,270 an toàn hơn hơn năm. 241 00:10:10,270 --> 00:10:15,520 Vì vậy, nếu bạn cần mật khẩu Wi-Fi, kết nối với CS50 không dây ở đây. 242 00:10:15,520 --> 00:10:16,950 Một, hai, ba, bốn, năm, sáu, bảy, tám. 243 00:10:16,950 --> 00:10:20,440 Và bài viết CS50 Thảo luận nếu bạn vẫn còn có vấn đề kết nối không liên tục, 244 00:10:20,440 --> 00:10:24,880 và chúng tôi sẽ cho các quyền hạn đó được biết cho không gian này. 245 00:10:24,880 --> 00:10:25,180 >> Được rồi. 246 00:10:25,180 --> 00:10:30,350 Vì vậy, một lời trêu ghẹo nhanh chóng, đặc biệt là đối với những người bạn của chàng trai fan hâm mộ hoặc trẻ em gái 247 00:10:30,350 --> 00:10:31,900 của tất cả những thứ của Apple. 248 00:10:31,900 --> 00:10:37,566 Những gì tôi đào lên từ một vài năm trở lại tập tin này ở đây, ilock.c, chỉ để 249 00:10:37,566 --> 00:10:40,930 loại làm cho cụ thể hơn và phức tạp hơn một số cơ bản hơn C 250 00:10:40,930 --> 00:10:42,350 chương trình chúng tôi đã viết. 251 00:10:42,350 --> 00:10:44,360 Vì vậy, tôi mở tập tin này, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Nó có sẵn trên trang bài giảng cho ngày hôm nay. 253 00:10:46,830 --> 00:10:49,470 Ở phía bên tay trái, bạn sẽ thấy một danh sách dài các chức năng. 254 00:10:49,470 --> 00:10:51,860 Vì vậy, các đồng những người viết bài này đã viết lên một số chức năng, 255 00:10:51,860 --> 00:10:53,290 nhiều hơn là chỉ chính. 256 00:10:53,290 --> 00:10:55,490 Ông đã sử dụng một bó toàn bộ thư viện ở đây. 257 00:10:55,490 --> 00:11:00,450 Và nếu chúng ta bắt đầu di chuyển thông qua, điều này thực sự là rất 258 00:11:00,450 --> 00:11:04,670 đầu tiên, tôi tin rằng, nứt cho iPhone gốc. 259 00:11:04,670 --> 00:11:08,000 Khi bạn muốn jailbreak iPhone phiên bản gốc, có nghĩa là untether 260 00:11:08,000 --> 00:11:11,800 từ AT & T và thực sự cài đặt phần mềm đặc biệt vào nó và làm những việc 261 00:11:11,800 --> 00:11:13,510 rằng Apple không muốn mọi người làm 262 00:11:13,510 --> 00:11:17,020 , một người đã dành thời gian để tìm ra chính xác làm thế nào họ có thể khai thác 263 00:11:17,020 --> 00:11:20,880 phần mềm sai sót, sai lầm, lỗi, phần mềm của Apple. 264 00:11:20,880 --> 00:11:22,650 Và do đó được sinh ra ilock.c. 265 00:11:22,650 --> 00:11:26,670 Rằng nếu bạn biên dịch nó trên một máy tính và cài đặt nó vào một iPhone 266 00:11:26,670 --> 00:11:29,810 đã được kết nối vào máy tính của bạn thông qua, nói rằng, một cáp USB, điều này sẽ cung cấp cho bạn 267 00:11:29,810 --> 00:11:33,360 đặc quyền hành chính hoặc root trên iPhone của bạn và để cho bạn làm được khá nhiều 268 00:11:33,360 --> 00:11:34,170 bất cứ điều gì bạn muốn. 269 00:11:34,170 --> 00:11:36,740 >> Và như vậy có được mèo này hấp dẫn và trò chơi chuột giữa Apple và 270 00:11:36,740 --> 00:11:39,920 phần còn lại của thế giới giống như nhiều công ty, đặc biệt là khi họ cố gắng để khóa 271 00:11:39,920 --> 00:11:43,220 công cụ của họ để bạn chỉ có thể làm gì với nó những gì họ có ý định. 272 00:11:43,220 --> 00:11:46,620 Tuy nhiên, nhờ có những người như thế này và sự hiểu biết của họ về mức độ thấp 273 00:11:46,620 --> 00:11:50,580 chi tiết và trong trường hợp này, lập trình C và rất nhiều các cấu trúc quen thuộc 274 00:11:50,580 --> 00:11:54,630 mà chúng tôi đã bắt đầu chơi với, bạn có thể thực sự tận dụng 275 00:11:54,630 --> 00:11:59,050 phần cứng trong một cách mà bạn thấy phù hợp và không nhất thiết phải là một số thực thể của công ty. 276 00:11:59,050 --> 00:12:01,360 Vì vậy, ví dụ, tôi không có ý tưởng những gì tất cả điều này đang làm. 277 00:12:01,360 --> 00:12:03,220 Nhưng GetVersion âm thanh khá đơn giản. 278 00:12:03,220 --> 00:12:05,480 Và có vẻ như thế này là một chức năng mà người này đã viết. 279 00:12:05,480 --> 00:12:09,240 Một số loại số nguyên như là một đối số, không trả lại bất cứ điều gì, nhưng 280 00:12:09,240 --> 00:12:13,080 xuất hiện vòng lặp với một vòng lặp ở đây và nếu điều kiện, nếu điều kiện, 281 00:12:13,080 --> 00:12:15,620 phá vỡ, và bằng cách nào đó liên quan đến số phiên bản. 282 00:12:15,620 --> 00:12:16,700 Nếu chúng ta di chuyển xuống - 283 00:12:16,700 --> 00:12:19,570 mặc dù rất nhiều các từ khóa này sẽ là mới, và có một 284 00:12:19,570 --> 00:12:22,590 toàn bộ rất nhiều chức năng ở đây, chúng tôi đã không bao giờ nhìn thấy và có thể không bao giờ nhìn thấy trên 285 00:12:22,590 --> 00:12:23,830 quá trình học kỳ - 286 00:12:23,830 --> 00:12:27,150 vào cuối ngày, sau cùng các quy tắc và logic mà chúng tôi đã được 287 00:12:27,150 --> 00:12:28,760 chơi với vậy, đến nay. 288 00:12:28,760 --> 00:12:34,220 Vì vậy, đây là quá cũ để crack 3 iPhone của bạn hoặc 4s hoặc ngay sau 5s, những ngày này, 289 00:12:34,220 --> 00:12:37,320 nhưng biết rằng nó là tất cả rất nhiều bắt nguồn từ thế giới này rằng chúng tôi đã 290 00:12:37,320 --> 00:12:38,430 lặn xuống. 291 00:12:38,430 --> 00:12:41,900 >> Vì vậy, chúng ta hãy xem xét một ví dụ nhỏ đơn giản hơn. 292 00:12:41,900 --> 00:12:46,100 Điều này một, chỉ để có được ấm lên với một số cú pháp và cũng có một số dữ liệu khác 293 00:12:46,100 --> 00:12:49,240 loại mà chúng tôi đã nói chuyện về nhưng đã không thực sự nhìn thấy trong C. Vì vậy, đây là một 294 00:12:49,240 --> 00:12:51,680 tập tin gọi là positive1.c. 295 00:12:51,680 --> 00:12:55,120 Và theo các ý kiến ​​ở trên, điều này chỉ yêu cầu người sử dụng cung cấp một 296 00:12:55,120 --> 00:12:55,960 số dương. 297 00:12:55,960 --> 00:12:59,530 Vì vậy, nó là một ví dụ của một vòng lặp do-trong khi, đó là tốt đẹp cho người sử dụng tương tác 298 00:12:59,530 --> 00:13:01,980 chương trình khi bạn cần phải nói cho người dùng để làm một cái gì đó. 299 00:13:01,980 --> 00:13:05,190 Và nếu họ không hợp tác, bạn hét lên với họ hoặc từ chối đầu vào của họ. 300 00:13:05,190 --> 00:13:11,610 Trường hợp tại điểm, tôi sẽ làm dòng 19 đến 24 thời gian dài như người dùng có 301 00:13:11,610 --> 00:13:14,310 không cho tôi một số dương. 302 00:13:14,310 --> 00:13:20,400 Bây giờ chi tiết này ở đây trên dòng 18, tại sao tôi tuyên bố n ở trên này toàn bộ 303 00:13:20,400 --> 00:13:24,490 Looping xây dựng như trái ngược ngay bên cạnh dòng 22 304 00:13:24,490 --> 00:13:26,880 thực sự quan tâm để có được n? 305 00:13:26,880 --> 00:13:27,330 Yeah? 306 00:13:27,330 --> 00:13:27,780 [Không nghe được] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. Malan: Yeah, vì vậy vấn đề này phạm vi. 308 00:13:29,040 --> 00:13:30,850 Và trong nhiệm kỳ của giáo dân, phạm vi những gì tham khảo? 309 00:13:34,690 --> 00:13:36,610 Yeah? 310 00:13:36,610 --> 00:13:37,860 [Không nghe được] 311 00:13:40,040 --> 00:13:41,105 DAVID J. Malan: Bạn có thể nói một chút to hơn? 312 00:13:41,105 --> 00:13:43,450 SPEAKER 1: bạn có thể truy cập vào một biến cụ thể. 313 00:13:43,450 --> 00:13:45,170 DAVID J. Malan: Perfect. 314 00:13:45,170 --> 00:13:47,360 Nơi bạn có thể truy cập vào một biến cụ thể. 315 00:13:47,360 --> 00:13:50,400 Và nói chung, các quy tắc của ngón tay cái như vậy, đến nay đã được rằng phạm vi của một số 316 00:13:50,400 --> 00:13:55,860 biến được xác định bởi các dấu ngoặc nhọn gần đây nhất mà bạn đã nhìn thấy. 317 00:13:55,860 --> 00:14:02,010 Và như vậy trong trường hợp này, nếu tôi đã sai lầm khi tuyên bố n trên dòng 22, 318 00:14:02,010 --> 00:14:03,010 dòng sẽ làm việc. 319 00:14:03,010 --> 00:14:10,990 Tôi sẽ nhận được một int, và tôi sẽ đặt nó vào đó n biến ở dòng 22. 320 00:14:10,990 --> 00:14:16,900 Nhưng mà dòng mã bây giờ sẽ không có ý tưởng những gì tôi đang nói về? 321 00:14:16,900 --> 00:14:22,650 Vì vậy, 25, và nó quay ra 24, là tốt, bởi vì trong trường hợp này, nó nằm ngoài 322 00:14:22,650 --> 00:14:23,610 các dấu ngoặc nhọn. 323 00:14:23,610 --> 00:14:27,280 Vì vậy, chỉ cần một chút của một mối phiền toái nhưng rất dễ dàng giải quyết bằng cách đơn giản tuyên bố 324 00:14:27,280 --> 00:14:30,140 bên ngoài biến của các chức năng riêng của mình. 325 00:14:30,140 --> 00:14:32,600 >> Bây giờ chúng ta sẽ thấy sau ngày hôm nay, bạn có thể đi một bước xa hơn. 326 00:14:32,600 --> 00:14:34,860 Và thậm chí bạn có thể nhận được một chút lười biếng - 327 00:14:34,860 --> 00:14:37,320 và điều này không được khuyến cáo, nói chung - 328 00:14:37,320 --> 00:14:42,260 nhưng bạn thậm chí có thể nhận được lười biếng và đặt một biến trên toàn cầu, do đó, để nói chuyện, không 329 00:14:42,260 --> 00:14:46,670 bên trong của một chức năng, không ở bên trong một vòng lặp, nhưng trong tập tin riêng của mình, bên ngoài 330 00:14:46,670 --> 00:14:49,600 của tất cả các chức năng bạn đã viết, như tôi đã làm ở đây trên dòng 15. 331 00:14:49,600 --> 00:14:51,160 Nhưng điều này thường được tán thành. 332 00:14:51,160 --> 00:14:55,680 Tuy nhiên, nhận thấy đây là một giải pháp đôi khi các vấn đề khác, chúng tôi sẽ 333 00:14:55,680 --> 00:14:56,620 cuối cùng nhìn thấy. 334 00:14:56,620 --> 00:14:58,130 Vì vậy, bây giờ, chúng tôi sẽ để lại nó như thế này. 335 00:14:58,130 --> 00:15:01,030 Nhưng chúng ta hãy xem nếu chúng ta có thể viết lại này chỉ để bắt đầu thể hiện bản thân mình một 336 00:15:01,030 --> 00:15:01,990 chút khác nhau. 337 00:15:01,990 --> 00:15:05,330 >> Vì vậy, chương trình này, chỉ để được rõ ràng, là positive1. 338 00:15:05,330 --> 00:15:11,810 Hãy để tôi đi trước đây và trong cửa sổ thiết bị đầu cuối của tôi làm cho positive1, Nhập. 339 00:15:11,810 --> 00:15:12,740 Biên dịch, okay. 340 00:15:12,740 --> 00:15:14,910 Tôi sẽ chạy positive1, nhấn Enter. 341 00:15:14,910 --> 00:15:16,820 Tôi yêu cầu bạn cung cấp cho tôi một số nguyên dương. 342 00:15:16,820 --> 00:15:18,260 Tôi sẽ nói -1. 343 00:15:18,260 --> 00:15:18,910 Mà không làm việc. 344 00:15:18,910 --> 00:15:22,150 0, 99, có vẻ như để làm việc. 345 00:15:22,150 --> 00:15:23,570 Có lẽ không phải là kiểm tra nghiêm ngặt nhất. 346 00:15:23,570 --> 00:15:26,480 Nhưng ít nhất nó là một kiểm tra sanity tốt đẹp mà chúng ta đang đi đúng hướng. 347 00:15:26,480 --> 00:15:29,240 Vì vậy, bây giờ hãy để tôi đi trước và mở phiên bản hai của. 348 00:15:29,240 --> 00:15:32,500 Và những gì là khác nhau chưa? 349 00:15:32,500 --> 00:15:35,140 Nó thực hiện điều tương tự. 350 00:15:35,140 --> 00:15:40,660 Nhưng những gì đang nhảy ra khỏi rõ ràng là khác nhau như thời gian này? 351 00:15:40,660 --> 00:15:42,560 Yeah, do đó, điều này bool màu xanh lá cây. 352 00:15:42,560 --> 00:15:45,980 Gedit đã nhấn mạnh vào từ khóa này được gọi là bool màu xanh lá cây, 353 00:15:45,980 --> 00:15:47,000 đó là một kiểu dữ liệu. 354 00:15:47,000 --> 00:15:51,080 Nó không đến được xây dựng trong tất cả các phiên bản của C. Bạn cần phải bao gồm một 355 00:15:51,080 --> 00:15:52,010 cụ thể của thư viện. 356 00:15:52,010 --> 00:15:54,770 Trong trường hợp của chúng tôi, tôi bao gồm các thư viện để CS50 357 00:15:54,770 --> 00:15:56,460 có quyền truy cập để bool. 358 00:15:56,460 --> 00:15:59,810 Nhưng ở dòng 18, chúng tôi dường như có một giá trị Boolean ở đây gọi là biết ơn. 359 00:15:59,810 --> 00:16:01,040 Vì vậy, tôi đã có thể gọi là bất cứ điều gì này. 360 00:16:01,040 --> 00:16:04,500 Nhưng tôi gọi nó là biết ơn khi loại truyền đạt một số ý nghĩa ngữ nghĩa. 361 00:16:04,500 --> 00:16:07,930 Vì vậy, ban đầu trên dòng 18, tôi dường như không biết ơn vì 362 00:16:07,930 --> 00:16:12,150 Giá trị boolean biết ơn được khởi tạo là sai ở dòng 18. 363 00:16:12,150 --> 00:16:16,890 Và sau đó có vẻ như những gì tôi đã thực hiện ở đây trong các dòng 21 đến 23 là vừa 364 00:16:16,890 --> 00:16:18,610 loại viết lại logic của tôi. 365 00:16:18,610 --> 00:16:21,020 Vì vậy, không có chức năng khác nhau. 366 00:16:21,020 --> 00:16:26,940 Nhưng ở dòng 22, tôi kiểm tra nếu int người sử dụng đã cung cấp lớn hơn 367 00:16:26,940 --> 00:16:31,120 0, sau đó tôi chỉ đơn giản là thay đổi giá trị của cảm ơn đúng sự thật. 368 00:16:31,120 --> 00:16:32,290 Và tại sao tôi làm điều đó? 369 00:16:32,290 --> 00:16:35,600 Bởi vì trong dòng 25, rõ ràng, tôi sẽ kiểm tra một điều kiện. 370 00:16:35,600 --> 00:16:39,380 Làm điều này trong khi vòng lặp biết ơn là sai. 371 00:16:39,380 --> 00:16:43,610 >> Vì vậy, tôi đề nghị này như là một thay thế cho một phiên bản vì nó ít nhất một 372 00:16:43,610 --> 00:16:45,130 ít trực quan hơn, có lẽ. 373 00:16:45,130 --> 00:16:46,900 Đó là một chút căn cứ trong tiếng Anh. 374 00:16:46,900 --> 00:16:51,710 Vì vậy, làm như sau trong khi bạn không biết ơn hoặc trong khi biết ơn là sai. 375 00:16:51,710 --> 00:16:55,890 Và lần này cũng vậy, tôi dường như không quan tâm để nhớ những gì người dùng gõ 376 00:16:55,890 --> 00:16:57,730 tại vì thông báo không có biến n. 377 00:16:57,730 --> 00:16:58,650 Vì vậy, thực sự, tôi - 378 00:16:58,650 --> 00:17:00,080 lời nói dối trắng một chút. 379 00:17:00,080 --> 00:17:02,770 Chức năng, chương trình là một chút khác nhau, một khi chúng ta nhận được để dưới cùng của 380 00:17:02,770 --> 00:17:04,819 bởi vì tôi không nhớ những gì n là. 381 00:17:04,819 --> 00:17:09,579 Nhưng tôi muốn chứng minh ở đây là mặc dù chúng tôi đã nhìn thấy getInt và 382 00:17:09,579 --> 00:17:13,920 GetString được sử dụng ở phía bên phải của một dấu bằng vậy, đến nay để 383 00:17:13,920 --> 00:17:17,160 chúng tôi nhớ giá trị, kỹ thuật, đó không phải là thực sự cần thiết. 384 00:17:17,160 --> 00:17:20,950 Nếu vì lý do gì, bạn chỉ cần không quan tâm để lưu các giá trị, bạn chỉ muốn 385 00:17:20,950 --> 00:17:25,710 để kiểm tra giá trị, nhận thấy rằng chúng tôi chỉ đơn giản là có thể viết này getInt mở 386 00:17:25,710 --> 00:17:27,000 paren, gần paren. 387 00:17:27,000 --> 00:17:30,460 Chức năng sẽ trả về một giá trị, như chúng ta đã nói. 388 00:17:30,460 --> 00:17:32,010 Nó sẽ cung cấp cho bạn trở lại một int. 389 00:17:32,010 --> 00:17:36,450 Và vì vậy nếu bạn tinh thần nghĩ rằng điều này xảy ra, khi tôi gõ trong 99, getInt 390 00:17:36,450 --> 00:17:38,160 trả về số 99. 391 00:17:38,160 --> 00:17:41,330 Và như vậy khái niệm, nó như là mặc dù mã của tôi đã thực sự. 392 00:17:41,330 --> 00:17:45,880 Vì vậy, nếu 99 thực sự là lớn hơn 0, sau đó biết ơn trở thành sự thật. 393 00:17:45,880 --> 00:17:50,420 Sau đó, dòng 25 nhận ra ooh, chúng tôi đang thực hiện bởi vì bây giờ tôi biết ơn. 394 00:17:50,420 --> 00:17:54,590 Và trong line 26, chúng tôi chỉ đơn giản là nói, cảm ơn cho các số nguyên dương, bất cứ điều gì 395 00:17:54,590 --> 00:17:55,710 xảy ra để được. 396 00:17:55,710 --> 00:17:58,900 >> Bây giờ chúng ta hãy làm nhẹ đường cú pháp ở đây, vậy để nói chuyện. 397 00:17:58,900 --> 00:18:02,990 Hãy xem nếu chúng ta có thể làm sạch dòng 25 này với điều này không đúng thứ ba và cuối cùng 398 00:18:02,990 --> 00:18:04,640 trong positive3. 399 00:18:04,640 --> 00:18:08,250 Vì vậy, nhận thấy sự khác biệt bây giờ chỉ là những dòng mã? 400 00:18:11,930 --> 00:18:13,260 Yeah, vì vậy 25. 401 00:18:13,260 --> 00:18:15,520 Và chúng tôi đã không thực sự nhìn thấy thủ thuật này chỉ được nêu ra. 402 00:18:15,520 --> 00:18:19,510 Nhưng chúng tôi đã nhìn thấy dấu chấm than Thứ hai, mà biểu thị những gì? 403 00:18:19,510 --> 00:18:20,970 Vì vậy, không, hoặc phủ định. 404 00:18:20,970 --> 00:18:23,460 Vì vậy, một giá trị Boolean và lật giá trị của nó. 405 00:18:23,460 --> 00:18:24,390 Thực sự trở thành sai. 406 00:18:24,390 --> 00:18:25,500 False trở thành sự thật. 407 00:18:25,500 --> 00:18:28,910 Vì vậy, điều này, tôi sẽ đề xuất, thậm chí còn nhiều hơn một chút trực quan của một cách 408 00:18:28,910 --> 00:18:32,200 viết mã bởi vì tôi vẫn khởi tạo cảm ơn false. 409 00:18:32,200 --> 00:18:33,530 Tôi vẫn làm như sau. 410 00:18:33,530 --> 00:18:35,700 Tôi đặt cảm ơn đúng sự thật khi thời gian đến. 411 00:18:35,700 --> 00:18:40,690 Nhưng bây giờ bạn có thể thực sự chỉ là dịch mã này bằng lời nói từ trái sang phải, 412 00:18:40,690 --> 00:18:42,550 trong khi không biết ơn. 413 00:18:42,550 --> 00:18:46,170 Bởi vì bang, hoặc dấu chấm than, biểu thị khái niệm về không, do đó, trong khi 414 00:18:46,170 --> 00:18:47,010 không biết ơn. 415 00:18:47,010 --> 00:18:49,740 >> Vì vậy, một lần nữa, chúng tôi đã không giới thiệu bất kỳ khái niệm mới cho mỗi gia nhập. 416 00:18:49,740 --> 00:18:53,230 Chúng tôi đã nói chuyện về Booleans trở lại khi chúng tôi chơi với Scratch. 417 00:18:53,230 --> 00:18:55,690 Nhưng nhận ra bây giờ chúng tôi chỉ có thể bắt đầu viết mã của chúng tôi 418 00:18:55,690 --> 00:18:56,550 nhiều cách khác nhau. 419 00:18:56,550 --> 00:19:00,010 Vì vậy, đặc biệt là trong pset1, nếu bạn là loại đấu tranh để tìm ra các cách để 420 00:19:00,010 --> 00:19:03,400 viết một số chương trình, tỷ lệ cược bạn thật may mắn vì có sẽ được bất kỳ 421 00:19:03,400 --> 00:19:05,780 số các giải pháp mà bạn có thể xảy ra khi. 422 00:19:05,780 --> 00:19:09,850 Ví dụ, điều này chỉ là ba cho ngay cả những đơn giản nhất của các chương trình. 423 00:19:09,850 --> 00:19:10,180 Được rồi. 424 00:19:10,180 --> 00:19:13,860 Và bây giờ nhớ lại vào thứ hai, chúng tôi còn lại trên lưu ý này với giá trị trả lại. 425 00:19:13,860 --> 00:19:18,280 Vì vậy, lần đầu tiên, chúng tôi đã viết một chương trình mà không chỉ có chính, 426 00:19:18,280 --> 00:19:22,240 nó cũng có chức năng riêng tùy chỉnh của nó mà tôi đã viết ở đây. 427 00:19:22,240 --> 00:19:26,640 Vì vậy, trong dòng 31 đến 34, tôi đã thực hiện một chức năng khối lập phương. 428 00:19:26,640 --> 00:19:27,800 Nó không phải phức tạp. 429 00:19:27,800 --> 00:19:29,830 Nó chỉ là một lần một lần, trong trường hợp này. 430 00:19:29,830 --> 00:19:34,920 Nhưng những gì quan trọng về nó là tôi đang đầu vào trong các hình thức của một 431 00:19:34,920 --> 00:19:38,910 Tôi trở lại đầu ra dưới hình thức một lần một lần. 432 00:19:38,910 --> 00:19:43,940 >> Vì vậy, bây giờ tôi có khả năng, giống như tôi được sử dụng với printf một mình, để gọi 433 00:19:43,940 --> 00:19:47,120 chức năng này bằng cách kêu gọi các chức năng lập phương. 434 00:19:47,120 --> 00:19:49,470 Và chức năng lập phương có một số đầu vào. 435 00:19:49,470 --> 00:19:52,030 Và chức năng lập phương trả về một số đầu ra. 436 00:19:52,030 --> 00:19:56,660 Và do đó, ngược lại, printf chỉ cần làm một cái gì đó. 437 00:19:56,660 --> 00:19:59,490 Nó không trả lại bất cứ điều gì mà chúng tôi quan tâm - mặc dù, như là một 438 00:19:59,490 --> 00:20:00,820 sang một bên, nó trả về một giá trị. 439 00:20:00,820 --> 00:20:02,650 Bạn chỉ nói chung bỏ qua nó. 440 00:20:02,650 --> 00:20:04,000 Printf chỉ cần làm một cái gì đó. 441 00:20:04,000 --> 00:20:06,220 Nó có một tác dụng phụ của in ấn vào màn hình. 442 00:20:06,220 --> 00:20:09,480 Ngược lại ở đây, chúng tôi có chức năng lập phương, 443 00:20:09,480 --> 00:20:11,400 thực sự trả về một cái gì đó. 444 00:20:11,400 --> 00:20:12,960 >> Vì vậy, đây là nói chung - 445 00:20:12,960 --> 00:20:15,260 đối với những người quen thuộc với điều này, đó là một ý tưởng khá đơn giản. 446 00:20:15,260 --> 00:20:18,460 Nhưng đối với những người không quen thuộc với ý tưởng này đi qua trong đầu vào và nhận được 447 00:20:18,460 --> 00:20:21,700 kết quả đầu ra trở lại, chúng ta hãy thử đơn giản chỉ là cái gì đó siêu. 448 00:20:21,700 --> 00:20:25,180 Có ai thoải mái trên sân khấu một thời gian ngắn? 449 00:20:25,180 --> 00:20:27,460 Bạn có để được thoải mái với một máy ảnh trên bạn, cũng. 450 00:20:27,460 --> 00:20:27,640 Yeah. 451 00:20:27,640 --> 00:20:28,610 Được rồi, tên của bạn là gì? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. Malan: Ken. 454 00:20:29,420 --> 00:20:29,810 Được rồi, Ken. 455 00:20:29,810 --> 00:20:31,060 Nào lên. 456 00:20:31,060 --> 00:20:34,660 Vì vậy, Ken sẽ là một chức năng của các loại ở đây. 457 00:20:34,660 --> 00:20:35,760 Và chúng ta hãy đi trước và làm điều này. 458 00:20:35,760 --> 00:20:38,790 Hãy để có được một ưa thích ít. 459 00:20:38,790 --> 00:20:39,770 Hân hạnh được gặp bạn. 460 00:20:39,770 --> 00:20:41,010 Chào mừng bạn đến với sân khấu trung tâm. 461 00:20:41,010 --> 00:20:41,980 Được rồi. 462 00:20:41,980 --> 00:20:45,590 Hãy nhấn nút này ở đây. 463 00:20:45,590 --> 00:20:46,420 Được rồi. 464 00:20:46,420 --> 00:20:49,490 Vì vậy, ở đây bạn có một bảng đen hiện đại. 465 00:20:49,490 --> 00:20:53,050 Và những gì tôi là các chức năng chính, ví dụ. 466 00:20:53,050 --> 00:20:55,990 Và tôi không có một chiếc iPad trong tay tôi. 467 00:20:55,990 --> 00:20:59,000 Tôi thực sự không nhớ làm thế nào để tốt, trên thực tế, không thể nói rằng. 468 00:20:59,000 --> 00:21:02,200 Tôi không thực sự có chữ viết tay tốt. 469 00:21:02,200 --> 00:21:05,260 Và vì thế, tôi muốn bạn in một cái gì đó trên màn hình cho tôi. 470 00:21:05,260 --> 00:21:07,470 >> Vì vậy, tôi là chương trình chính. 471 00:21:07,470 --> 00:21:15,060 Và tôi sẽ có bạn nói điều này bằng cách viết nó trong đầu con gà của tôi và 472 00:21:15,060 --> 00:21:16,600 sau đó đi qua một đầu vào. 473 00:21:16,600 --> 00:21:20,000 Vì vậy, ngớ ngẩn mặc dù bài tập này là, khái niệm về chức năng và gọi một 474 00:21:20,000 --> 00:21:22,260 chức năng và trả về một chức năng thực sự nắm xuống này. 475 00:21:22,260 --> 00:21:23,120 Tôi là chính. 476 00:21:23,120 --> 00:21:26,270 Tôi vừa viết printf ("cái gì đó") trên màn hình. 477 00:21:26,270 --> 00:21:27,470 Tôi đang chạy chương trình này. 478 00:21:27,470 --> 00:21:30,900 Và ngay sau khi printf được gọi là, phải mất một đối số - hoặc một tham số, 479 00:21:30,900 --> 00:21:31,660 đôi khi - 480 00:21:31,660 --> 00:21:32,780 giữa dấu ngoặc kép. 481 00:21:32,780 --> 00:21:33,960 Đây là lập luận rằng. 482 00:21:33,960 --> 00:21:35,740 Tôi đang đi qua nó để Ken. 483 00:21:35,740 --> 00:21:39,390 Bây giờ anh ta là một hộp đen viết một số số năm trước mà dường như 484 00:21:39,390 --> 00:21:41,070 chỉ biết làm thế nào để in những thứ trên màn hình. 485 00:21:41,070 --> 00:21:42,320 >> Vì vậy, thực hiện. 486 00:21:48,842 --> 00:21:49,900 Đó không phải là xấu. 487 00:21:49,900 --> 00:21:50,890 Vì vậy, rất tốt. 488 00:21:50,890 --> 00:21:52,900 Vì vậy, bây giờ Ken được thực hiện thực hiện. 489 00:21:52,900 --> 00:21:55,810 Anh ta cần đưa cho tôi bất cứ điều gì trở lại? 490 00:21:55,810 --> 00:21:57,240 Vì vậy, không phải là chúng tôi đã nhìn thấy cho đến nay. 491 00:21:57,240 --> 00:21:59,230 Một lần nữa, printf không thực sự trả lại một số. 492 00:21:59,230 --> 00:22:01,640 Nhưng chúng ta sẽ bỏ qua cho bây giờ bởi vì chúng tôi đã không bao giờ sử dụng nó. 493 00:22:01,640 --> 00:22:03,400 Vì vậy, đó là nó cho Ken. 494 00:22:03,400 --> 00:22:06,650 Và vì vậy bây giờ chính trở lại để thực hiện - 495 00:22:06,650 --> 00:22:09,630 chính mất quyền kiểm soát của chương trình một lần nữa bởi vì đó là dòng mã, 496 00:22:09,630 --> 00:22:11,010 printf, được thực hiện thực hiện. 497 00:22:11,010 --> 00:22:13,890 Và chúng tôi đi về con đường của chúng tôi thực hiện bất cứ điều gì dòng khác có. 498 00:22:13,890 --> 00:22:14,130 >> Được rồi. 499 00:22:14,130 --> 00:22:17,080 Vì vậy, bây giờ chúng ta hãy thử một ví dụ hơi khác nhau. 500 00:22:17,080 --> 00:22:22,430 Và thời gian này, ở đây, trước tiên hãy xóa màn hình ở đây. 501 00:22:22,430 --> 00:22:24,670 Và lần này, chúng tôi sẽ làm chức năng cubing. 502 00:22:24,670 --> 00:22:27,350 Nhưng lần này, tôi mong đợi một giá trị đầu ra. 503 00:22:27,350 --> 00:22:28,630 Vì vậy, chúng ta hãy đi trước và làm điều này. 504 00:22:28,630 --> 00:22:35,680 Vì vậy, bây giờ tôi có một dòng mã nói rằng x = khối lập phương (x). 505 00:22:35,680 --> 00:22:36,930 Vì vậy, thực sự let's - 506 00:22:41,450 --> 00:22:43,940 dòng mã, thu hồi, trông như thế này. 507 00:22:43,940 --> 00:22:45,960 x = cube (x). 508 00:22:45,960 --> 00:22:48,100 Vì vậy, làm thế nào điều này sẽ để làm việc? 509 00:22:48,100 --> 00:22:50,820 Vì vậy, chúng ta hãy đi trước và cung cấp cho bạn một màn hình trắng một lần nữa. 510 00:22:50,820 --> 00:22:55,000 Và tôi sẽ viết xuống giá trị của x, tại thời điểm này trong 511 00:22:55,000 --> 00:23:01,080 thời gian xảy ra được, chúng ta hãy nói, 2, để giữ cho nó đơn giản. 512 00:23:01,080 --> 00:23:04,890 Vì vậy, tôi đã viết vào một mảnh giấy giá trị của 2, 513 00:23:04,890 --> 00:23:06,100 mà là x giá trị của tôi. 514 00:23:06,100 --> 00:23:08,250 Tôi trao cho Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Và tôi chỉ cần viết câu trả lời? 516 00:23:09,200 --> 00:23:12,660 DAVID J. Malan: Vâng, chúng ta hãy chỉ viết câu trả lời. 517 00:23:12,660 --> 00:23:13,030 Okay. 518 00:23:13,030 --> 00:23:16,280 Và bây giờ ông đã trả lại cho tôi một cái gì đó. 519 00:23:16,280 --> 00:23:17,560 Vì vậy, - 520 00:23:17,560 --> 00:23:18,170 hoàn hảo. 521 00:23:18,170 --> 00:23:18,840 Đẹp segue. 522 00:23:18,840 --> 00:23:21,970 >> Vì vậy, bây giờ ông tay tôi trở lại các giá trị của 8, trong trường hợp này. 523 00:23:21,970 --> 00:23:23,220 Và tôi phải làm gì với nó? 524 00:23:23,220 --> 00:23:26,130 Vâng, thực sự, chúng ta hãy xem. 525 00:23:26,130 --> 00:23:26,640 Có được quyền này. 526 00:23:26,640 --> 00:23:27,880 Tôi sẽ làm gì với nó? 527 00:23:27,880 --> 00:23:31,900 Bây giờ tôi sẽ mất giá trị này và thực sự lưu trữ nó trong những 528 00:23:31,900 --> 00:23:33,400 cùng một bit trong bộ nhớ. 529 00:23:33,400 --> 00:23:35,030 Nhưng chú ý, tôi là loại đấu tranh ở đây. 530 00:23:35,030 --> 00:23:38,280 Tôi là một chút bối rối, vì nơi nào tôi thực sự viết giá trị của x? 531 00:23:38,280 --> 00:23:41,840 Bởi vì những gì tôi đã làm là thể chất tay Ken một mảnh giấy 532 00:23:41,840 --> 00:23:44,400 có giá trị 2, đó là x. 533 00:23:44,400 --> 00:23:46,300 Và quả thực, đó là chính xác những gì sẽ xảy ra. 534 00:23:46,300 --> 00:23:50,100 Vì vậy, nó quay ra rằng khi bạn gọi một chức năng, và bạn vượt qua trong một cuộc tranh cãi 535 00:23:50,100 --> 00:23:54,130 như "hello world" hoặc bạn vượt qua trong một cuộc tranh cãi như 2, nói chung, bạn 536 00:23:54,130 --> 00:23:56,720 đi qua trong một bản sao của đối số đó. 537 00:23:56,720 --> 00:24:01,020 Và như tôi đã viết xuống số 2 ở đây và đưa nó đến Ken phải 538 00:24:01,020 --> 00:24:04,760 có nghĩa là tôi vẫn còn có một bản sao của 2 giá trị một nơi nào đó. 539 00:24:04,760 --> 00:24:08,140 Bởi vì thực tế, bây giờ mà tôi đã nhận lại giá trị 8, tôi cần phải đi trở lại trong 540 00:24:08,140 --> 00:24:12,010 Bộ nhớ RAM và thực sự viết xuống 8 nơi mà tôi đã từng có số 2. 541 00:24:12,010 --> 00:24:15,720 >> Vì vậy, trực quan nhớ khái niệm này đi qua trong nghĩa đen 542 00:24:15,720 --> 00:24:16,730 một bản sao của giá trị. 543 00:24:16,730 --> 00:24:19,570 Ken không điều của mình, tay tôi trở lại một cái gì đó - trong trường hợp này, 544 00:24:19,570 --> 00:24:20,820 một giá trị như 8. 545 00:24:20,820 --> 00:24:22,660 Và sau đó tôi phải làm một cái gì đó với giá trị đó nếu tôi 546 00:24:22,660 --> 00:24:24,880 muốn giữ nó xung quanh. 547 00:24:24,880 --> 00:24:29,470 Vì vậy, tất cả những điều này sẽ được tất cả các quá quen thuộc trước khi dài. 548 00:24:29,470 --> 00:24:33,082 Cảm ơn bạn rất nhiều cho bản demo này ở đây, Ken. 549 00:24:33,082 --> 00:24:34,820 Được rồi. 550 00:24:34,820 --> 00:24:36,720 Thực hiện rất tốt. 551 00:24:36,720 --> 00:24:40,610 Vì vậy, chúng ta hãy xem làm thế nào mà cuối cùng liên quan đến một số chức năng 552 00:24:40,610 --> 00:24:42,270 gọi mà chúng tôi đã làm ở đây. 553 00:24:42,270 --> 00:24:47,610 Vì vậy, hãy để tôi đi trước và mang lại cho chúng ta trở lại ví dụ cubing ở đây. 554 00:24:47,610 --> 00:24:53,080 Và nhận thấy rằng nếu chúng ta muốn thực sự bắt đầu này thêm nữa, chúng ta sẽ 555 00:24:53,080 --> 00:24:57,050 phải lưu tâm đến thực tế rằng số x được thông qua tại 556 00:24:57,050 --> 00:25:01,390 ở đây là khác với những gì thực sự được thông qua thành chức năng. 557 00:25:01,390 --> 00:25:03,940 Vì vậy, một lần nữa, điều này được thông qua bằng cách sao chép sẽ trở nên khá 558 00:25:03,940 --> 00:25:05,620 Gecman trong thời điểm này chỉ là một. 559 00:25:05,620 --> 00:25:09,320 >> Vì vậy, chúng ta hãy nhìn vào một cái gì đó không hoàn toàn làm việc phải được nêu ra. 560 00:25:09,320 --> 00:25:11,790 Tôi sẽ đi trước và mở một ví dụ lỗi thứ ba, 561 00:25:11,790 --> 00:25:13,560 là thiếu sót của thiên nhiên. 562 00:25:13,560 --> 00:25:18,070 Và nó được gọi buggy3, và nó thực hiện một chức năng trao đổi. 563 00:25:18,070 --> 00:25:23,500 Vì vậy, ở đây chúng tôi có một chức năng chính đã x và y tùy tiện khởi tạo 564 00:25:23,500 --> 00:25:24,720 1 và 2, tương ứng. 565 00:25:24,720 --> 00:25:27,590 Chúng ta có thể sử dụng getInt, nhưng chúng tôi chỉ cần một bài tập đơn giản. 566 00:25:27,590 --> 00:25:29,680 Vì vậy, nó cứng mã hóa là 1 và 2. 567 00:25:29,680 --> 00:25:35,330 Trong dòng 21 và 22, chúng tôi dường như in ra x và y, một trong mỗi dòng. 568 00:25:35,330 --> 00:25:39,620 Sau đó, trên dòng 23, tôi yêu cầu tôi trao đổi các giá trị này, dấu chấm, dấu chấm, dấu chấm. 569 00:25:39,620 --> 00:25:43,030 Tôi dường như gọi một chức năng trong dòng 24 trao đổi được gọi là 570 00:25:43,030 --> 00:25:44,000 mà phải mất hai đối số. 571 00:25:44,000 --> 00:25:46,430 Nó hoàn toàn legit cho các chức năng để có hai đối số. 572 00:25:46,430 --> 00:25:48,220 Chúng tôi đã nhìn thấy printf nó đã. 573 00:25:48,220 --> 00:25:50,370 Vì vậy, trao đổi rõ ràng có x và y. 574 00:25:50,370 --> 00:25:53,010 Và như tên gọi của nó, tôi sẽ hy vọng rằng nó sẽ 575 00:25:53,010 --> 00:25:54,320 trao đổi hai giá trị này. 576 00:25:54,320 --> 00:25:57,560 Vì vậy, sau đó tôi yêu cầu bồi thường trên đường dây 25, đổi chỗ. 577 00:25:57,560 --> 00:26:01,570 Và tôi in lại x và y theo giả định rằng 578 00:26:01,570 --> 00:26:02,830 họ đã thực sự được đổi chỗ. 579 00:26:02,830 --> 00:26:04,370 Nhưng nếu tôi thực sự chạy chương trình này - 580 00:26:04,370 --> 00:26:06,060 chúng tôi mở ra một cửa sổ terminal. 581 00:26:06,060 --> 00:26:07,750 Hãy để tôi làm buggy3. 582 00:26:07,750 --> 00:26:09,970 Như tên cho thấy, điều này sẽ không kết thúc tốt đẹp. 583 00:26:09,970 --> 00:26:14,690 Bởi vì khi tôi nhấn Enter, nhận thấy rằng x là 1. 584 00:26:14,690 --> 00:26:15,720 y là 2. 585 00:26:15,720 --> 00:26:19,160 Và ở phần cuối của chương trình, họ vẫn còn, trên thực tế, giống nhau. 586 00:26:19,160 --> 00:26:22,760 >> Vì vậy, dựa trên cuộc biểu tình chỉ là bây giờ với Ken, những gì đang thực sự xảy ra? 587 00:26:22,760 --> 00:26:24,660 Vâng, hãy để nhảy vào chức năng này trao đổi. 588 00:26:24,660 --> 00:26:25,800 Đó là siêu ngắn. 589 00:26:25,800 --> 00:26:28,020 Đó chỉ là một vài dòng mã dài. 590 00:26:28,020 --> 00:26:32,810 Nhưng vấn đề cơ bản dựa trên một câu chuyện đơn giản là những gì nói với 591 00:26:32,810 --> 00:26:34,270 lên đây với Ken? 592 00:26:34,270 --> 00:26:36,115 Trao đổi chia Tại sao? 593 00:26:36,115 --> 00:26:37,365 [Không nghe được] 594 00:26:39,840 --> 00:26:40,460 Chính xác. 595 00:26:40,460 --> 00:26:43,610 Vì vậy, chúng tôi đang lưu trữ một bản sao, không phải bản thân các biến. 596 00:26:43,610 --> 00:26:46,810 Nói cách khác, trao đổi rõ ràng có hai đối số, một int. 597 00:26:46,810 --> 00:26:49,370 Và nó tùy tiện được gọi là a và b. 598 00:26:49,370 --> 00:26:54,430 Và ở đây, tôi đã vượt qua x và y tương ứng là 1 và 2. 599 00:26:54,430 --> 00:26:56,580 Nhưng tôi không theo nghĩa đen đi trong x. 600 00:26:56,580 --> 00:26:58,410 Tôi không theo nghĩa đen đi qua trong y. 601 00:26:58,410 --> 00:27:01,230 Tôi đang đi qua một bản sao của x và một bản sao của y. 602 00:27:01,230 --> 00:27:05,180 Nó giống như hầu hết như là mặc dù bạn sao chép và dán vào trao đổi các giá trị 603 00:27:05,180 --> 00:27:07,440 bạn muốn nó thực sự thao tác. 604 00:27:07,440 --> 00:27:11,970 Vì vậy, nếu đó là trường hợp, khi tôi, chương trình bắt đầu thực hiện 605 00:27:11,970 --> 00:27:14,140 dòng 35, sau đó 36 - 606 00:27:14,140 --> 00:27:17,740 khi tôi nhận được dòng 37, vào thời điểm này trong câu chuyện, giá trị của một là gì? 607 00:27:20,740 --> 00:27:24,850 Tại thời điểm này trong câu chuyện, dòng 37, giá trị của một vào thời điểm này là gì? 608 00:27:24,850 --> 00:27:25,980 Vì vậy, nó chỉ nên là 1. 609 00:27:25,980 --> 00:27:26,170 Phải không? 610 00:27:26,170 --> 00:27:29,100 Bởi vì x đã được thông qua như là đối số đầu tiên. 611 00:27:29,100 --> 00:27:33,150 Và chức năng này chỉ tùy tiện gọi là đối số đầu tiên của nó, một. 612 00:27:33,150 --> 00:27:35,130 Tương tự như vậy là y, đối số thứ hai. 613 00:27:35,130 --> 00:27:37,930 Và nó chỉ tùy tiện gọi số thứ hai b. 614 00:27:37,930 --> 00:27:40,510 >> Bây giờ sự phân đôi này thực sự là khá đơn giản giải thích. 615 00:27:40,510 --> 00:27:40,880 Hãy suy nghĩ về nó. 616 00:27:40,880 --> 00:27:42,980 Không ai trong chúng tôi đã gặp người đã viết printf. 617 00:27:42,980 --> 00:27:49,880 Vì vậy, chắc chắn, họ không có ý tưởng những gì biến của chúng tôi 30 năm sau sẽ 618 00:27:49,880 --> 00:27:50,710 được gọi là. 619 00:27:50,710 --> 00:27:55,110 Vì vậy, đó có phải là một sự phân biệt giữa những gì bạn gọi biến trong 620 00:27:55,110 --> 00:27:59,960 chức năng bạn đang viết và những gì bạn gọi biến trong các chức năng bạn 621 00:27:59,960 --> 00:28:01,770 gọi điện thoại hoặc sử dụng. 622 00:28:01,770 --> 00:28:05,120 Vì vậy, nói cách khác, tôi đã viết biến của tôi là x và y. 623 00:28:05,120 --> 00:28:08,060 Nhưng nếu có ai đó khác đã viết các chức năng trao đổi, anh ta hoặc cô ấy chắc chắn 624 00:28:08,060 --> 00:28:10,480 sẽ không biết những gì biến của tôi sẽ được gọi là. 625 00:28:10,480 --> 00:28:13,850 Vì vậy, nhận ra rằng đây là lý do tại sao bạn có tính hai mặt của tên này. 626 00:28:13,850 --> 00:28:16,800 Về mặt kỹ thuật, tôi có thể làm điều này bằng cách trùng hợp ngẫu nhiên. 627 00:28:16,800 --> 00:28:19,750 Nhưng họ vẫn sẽ được thông qua như là bản sao. 628 00:28:19,750 --> 00:28:22,940 Nó sẽ chỉ là một sự trùng hợp ngẫu nhiên thuần túy về mặt thẩm mỹ nếu người đó đã viết 629 00:28:22,940 --> 00:28:25,590 hoán đổi đã sử dụng cùng một tên. 630 00:28:25,590 --> 00:28:25,930 >> Được rồi. 631 00:28:25,930 --> 00:28:29,010 Vì vậy, tại thời điểm này trong câu chuyện, dòng 37, là 1. 632 00:28:29,010 --> 00:28:30,410 b là 2. 633 00:28:30,410 --> 00:28:32,040 Và bây giờ tôi tiến hành trao đổi chúng. 634 00:28:32,040 --> 00:28:34,730 Vâng đầu tiên của tất cả, hãy để tôi thực sự làm điều này đơn giản hơn rất nhiều. 635 00:28:34,730 --> 00:28:36,500 Tôi không biết những gì những người ba dòng mã đã làm. 636 00:28:36,500 --> 00:28:37,370 Hãy để tôi chỉ làm điều này. 637 00:28:37,370 --> 00:28:38,850 b được một. 638 00:28:38,850 --> 00:28:40,170 một được b. 639 00:28:40,170 --> 00:28:41,450 Xong. 640 00:28:41,450 --> 00:28:43,540 Tại sao điều này bị phá vỡ, một cách logic không? 641 00:28:46,980 --> 00:28:48,590 Đó là trong những điều trực quan, phải không? 642 00:28:48,590 --> 00:28:50,640 Vì vậy, trở thành b. 643 00:28:50,640 --> 00:28:52,450 Và b trở thành một. 644 00:28:52,450 --> 00:28:55,410 Nhưng vấn đề là ngay khi dòng 37 thực hiện, những gì 645 00:28:55,410 --> 00:28:58,170 giá trị của a và b? 646 00:28:58,170 --> 00:28:59,070 Giống nhau, 1. 647 00:28:59,070 --> 00:29:03,460 Bởi vì bạn đã clobbered, có thể nói, bạn đã thay đổi b bằng với một. 648 00:29:03,460 --> 00:29:06,000 Vì vậy, một khi dòng 37 được thực hiện, đó là tuyệt vời. 649 00:29:06,000 --> 00:29:09,940 Bây giờ bạn có hai bản sao của các bên trong số 1 của chức năng này. 650 00:29:09,940 --> 00:29:14,720 Vì vậy, sau đó khi bạn nói ở dòng 38, được b, tốt, bạn đang loại hơi say. 651 00:29:14,720 --> 00:29:17,370 Bởi vì bạn chỉ cần gán 1 đến 1. 652 00:29:17,370 --> 00:29:20,400 Bạn đã bị mất giá trị mà bạn quan tâm. 653 00:29:20,400 --> 00:29:22,910 >> Vì vậy, trong phiên bản gốc của điều này, nhận thấy những gì tôi đã làm. 654 00:29:22,910 --> 00:29:26,620 Tôi thay vào đó đã có một dòng thứ ba của mã trông như thế này. 655 00:29:26,620 --> 00:29:29,910 Tôi tuyên bố một biến tạm thời - tmp là một cái tên rất phổ biến 656 00:29:29,910 --> 00:29:31,240 cho một biến tạm thời. 657 00:29:31,240 --> 00:29:34,280 Đây là một int bởi vì nó có phù hợp với những gì tôi muốn làm cho một bản sao của. 658 00:29:34,280 --> 00:29:39,720 Tôi lưu trữ một bản sao của một bên trong tmp. Vì vậy, một khi dòng 37 đã thực hiện, 659 00:29:39,720 --> 00:29:41,390 giá trị của một - 660 00:29:41,390 --> 00:29:42,970 nhanh chóng kiểm tra sanity - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Giá trị của b là 2. 663 00:29:45,780 --> 00:29:48,470 Và giá trị của tmp cũng là 1. 664 00:29:48,470 --> 00:29:51,470 Vì vậy, bây giờ tôi thực hiện dòng 38. 665 00:29:51,470 --> 00:29:57,180 Vì vậy, một khi dòng 38 thực hiện, có giá trị của b. 666 00:29:57,180 --> 00:29:58,510 Và b là 2. 667 00:29:58,510 --> 00:30:00,500 Vì vậy, một là 2. 668 00:30:00,500 --> 00:30:03,110 Vì vậy, tại thời điểm này trong câu chuyện, một là 2, b là 2, 669 00:30:03,110 --> 00:30:05,130 và tmp là 1. 670 00:30:05,130 --> 00:30:09,330 Vì vậy, bây giờ một cách hợp lý, chúng tôi có thể chỉ tiếng tom tmp giá trị vào b. 671 00:30:09,330 --> 00:30:10,690 Và chúng tôi đang làm. 672 00:30:10,690 --> 00:30:12,170 >> Vì vậy, chúng tôi đã giải quyết vấn đề đó. 673 00:30:12,170 --> 00:30:16,040 Thật không may, khi tôi chạy chương trình này theo hình thức này, nó không thực sự trao đổi 674 00:30:16,040 --> 00:30:17,700 bất kỳ giá trị. 675 00:30:17,700 --> 00:30:18,950 Tuy nhiên, để được rõ ràng, tại sao? 676 00:30:23,420 --> 00:30:26,310 Tôi cố định các vấn đề hợp lý từ cách đây chỉ là một thời điểm. 677 00:30:26,310 --> 00:30:31,150 Nhưng một lần nữa, nếu tôi chạy chương trình này, x và y vẫn không thay đổi vào cuối năm 678 00:30:31,150 --> 00:30:33,834 thực hiện của chương trình. 679 00:30:33,834 --> 00:30:34,760 [Không nghe được] 680 00:30:34,760 --> 00:30:36,030 DAVID J. Malan: Vì vậy, chúng tôi đã không quay trở lại bất cứ điều gì. 681 00:30:36,030 --> 00:30:36,960 Vì vậy, đó là sự thật. 682 00:30:36,960 --> 00:30:39,880 Nhưng hóa ra có một chút của một vấn đề ở đây vì vậy, đến nay, 683 00:30:39,880 --> 00:30:42,460 chỉ có điều chúng tôi đã có thể trở lại là một chuyện. 684 00:30:42,460 --> 00:30:46,540 Và đây là một hạn chế của C. Bạn chỉ có thể trở lại thực sự là một giá trị, 685 00:30:46,540 --> 00:30:48,970 trong trường hợp đó, tôi là loại mắc kẹt ở đây 686 00:30:48,970 --> 00:30:51,805 vì tôi có thể trả lại giá trị mới của x hoặc tôi có thể trả lại 687 00:30:51,805 --> 00:30:53,160 giá trị mới của y. 688 00:30:53,160 --> 00:30:54,330 Nhưng tôi muốn cả hai trở lại. 689 00:30:54,330 --> 00:30:58,010 Vì vậy, trở lại là không phải là giải pháp đơn giản ở đây. 690 00:30:58,010 --> 00:30:59,770 Nhưng vấn đề về cơ bản là lý do tại sao? 691 00:30:59,770 --> 00:31:03,270 Chúng ta đã thực sự đổi chỗ? 692 00:31:03,270 --> 00:31:04,010 a và b. 693 00:31:04,010 --> 00:31:07,670 Nhưng a và b là bản sao của x và y, có nghĩa là chúng tôi chỉ làm tất cả những điều này 694 00:31:07,670 --> 00:31:10,080 làm việc - chúng tôi chỉ cần bỏ ra giống như ba phút nói về trao đổi 695 00:31:10,080 --> 00:31:11,680 chức năng và cả ba trong số các biến này. 696 00:31:11,680 --> 00:31:15,090 Và đó là tuyệt vời, hoàn toàn chính xác trong sự cô lập. 697 00:31:15,090 --> 00:31:20,230 Nhưng a và phạm vi của b duy nhất là trong những dòng này ở đây. 698 00:31:20,230 --> 00:31:24,130 Vì vậy, giống như một vòng lặp for, nếu bạn khai báo một số nguyên bên trong cho 699 00:31:24,130 --> 00:31:27,400 loop - tương tự như vậy, nếu bạn đang tuyên bố a và b bên trong của một hàm 700 00:31:27,400 --> 00:31:30,550 bạn đã viết, chúng chỉ có giá trị bên trong của chức năng đó. 701 00:31:30,550 --> 00:31:35,020 Điều đó có nghĩa là ngay khi trao đổi được thực hiện thực hiện và chúng tôi đi từ đường 24 đến 702 00:31:35,020 --> 00:31:38,380 25 dòng, x và y chưa được thay đổi. 703 00:31:38,380 --> 00:31:42,580 Bạn chỉ lãng phí một toàn bộ rất nhiều thời gian trao đổi các bản sao của các biến. 704 00:31:42,580 --> 00:31:46,490 >> Vì vậy, nó chỉ ra rằng giải pháp này là thực sự không rõ ràng. 705 00:31:46,490 --> 00:31:49,210 Nó không hoàn toàn đủ để trở về giá trị bởi vì chúng tôi có thể 706 00:31:49,210 --> 00:31:50,320 chỉ trả lại một giá trị. 707 00:31:50,320 --> 00:31:53,370 Và tôi thực sự muốn trao đổi cả x và y cùng một lúc. 708 00:31:53,370 --> 00:31:55,020 Vì vậy, chúng ta sẽ quay trở lại này. 709 00:31:55,020 --> 00:31:58,770 Nhưng hiện nay, nhận ra rằng vấn đề cơ bản xuất phát từ thực tế 710 00:31:58,770 --> 00:32:00,660 rằng a và b là bản sao. 711 00:32:00,660 --> 00:32:03,450 Và họ đang có trong phạm vi của riêng mình. 712 00:32:03,450 --> 00:32:04,980 Vâng, chúng ta hãy cố gắng để giải quyết vấn đề này một cách nào đó. 713 00:32:04,980 --> 00:32:09,200 Hãy để tôi thực sự di chuyển trở lại đây và mở ra, chúng ta hãy nói, một biến thể thứ tư 714 00:32:09,200 --> 00:32:11,170 này, buggy4. 715 00:32:11,170 --> 00:32:13,230 Và những gì về điều này? 716 00:32:13,230 --> 00:32:16,690 Đây là một vấn đề tương tự nhưng đơn giản hơn để xem xét trước khi chúng tôi mất một đâm vào 717 00:32:16,690 --> 00:32:17,530 giải quyết nó. 718 00:32:17,530 --> 00:32:19,440 Chương trình này được gọi là tăng. 719 00:32:19,440 --> 00:32:24,320 Và nó dường như khởi tạo một số nguyên x 1 ở dòng 18. 720 00:32:24,320 --> 00:32:25,950 Sau đó tôi cho x là 1. 721 00:32:25,950 --> 00:32:28,020 Sau đó tôi yêu cầu bồi thường incrementing, dấu chấm, dấu chấm, dấu chấm. 722 00:32:28,020 --> 00:32:29,460 Sau đó tôi gọi tăng. 723 00:32:29,460 --> 00:32:33,480 Nhưng sau đó trong dòng 22 và 23, tôi cho nó được tăng lên. 724 00:32:33,480 --> 00:32:37,780 Tôi cho x bây giờ là bất cứ điều gì, 2 lẽ. 725 00:32:37,780 --> 00:32:39,770 >> Tuy nhiên, chương trình này là lỗi. 726 00:32:39,770 --> 00:32:41,020 Vấn đề là gì? 727 00:32:43,450 --> 00:32:44,418 Yeah? 728 00:32:44,418 --> 00:32:45,668 [Không nghe được] 729 00:32:49,260 --> 00:32:49,850 DAVID J. Malan: Chính xác. 730 00:32:49,850 --> 00:32:52,430 Vì vậy, x đã được khai báo rõ ràng trên dòng 18. 731 00:32:52,430 --> 00:32:54,410 Đó là bên trong dấu ngoặc nhọn chính. 732 00:32:54,410 --> 00:32:58,470 Vì vậy, câu trả lời đơn giản ở đây là, tốt, x tồn tại ở đây. 733 00:32:58,470 --> 00:33:01,510 Nó không tồn tại ở dòng 32. 734 00:33:01,510 --> 00:33:03,710 Vì vậy, chương trình này sẽ thực sự thậm chí không biên dịch. 735 00:33:03,710 --> 00:33:07,910 Trình biên dịch, khi tôi cố gắng biên dịch mã này, sẽ quát vào tôi 736 00:33:07,910 --> 00:33:13,190 về một số định danh không khai báo hoặc một cái gì đó để có hiệu lực đó. 737 00:33:13,190 --> 00:33:13,870 Trong thực tế, chúng ta hãy thử. 738 00:33:13,870 --> 00:33:15,235 Điều này là làm cho buggy4. 739 00:33:17,780 --> 00:33:18,190 Có nó được. 740 00:33:18,190 --> 00:33:22,030 Sử dụng x định danh không khai báo ở dòng 32. 741 00:33:22,030 --> 00:33:25,700 Và trên thực tế, chúng ta hãy rõ ràng hơn ở đây ngày hôm nay để điều này rất hữu ích trong 742 00:33:25,700 --> 00:33:27,140 giờ và ở nhà. 743 00:33:27,140 --> 00:33:29,000 Chú ý rằng nó là một chút khó hiểu bằng văn bản. 744 00:33:29,000 --> 00:33:31,560 Nhưng thực tế là Clang có hét vào mặt chúng tôi, nói 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, thực sự là hữu ích. 746 00:33:36,970 --> 00:33:41,970 Nó có nghĩa rằng lỗi này là trên đường 32 ở năm vị trí ký tự. 747 00:33:41,970 --> 00:33:44,670 Vì vậy, một, hai, ba, bốn, năm. 748 00:33:44,670 --> 00:33:46,640 Đó là, trên thực tế, nơi mà vấn đề là. 749 00:33:46,640 --> 00:33:49,710 Và cũng cần lưu ý vào các giờ văn phòng và ở nhà, tôi thật may mắn ở đây. 750 00:33:49,710 --> 00:33:50,740 Tôi có một sai lầm. 751 00:33:50,740 --> 00:33:52,660 Nó sẽ là tương đối dễ dàng để sửa chữa. 752 00:33:52,660 --> 00:33:56,220 Nhưng nếu bạn nhận được toàn bộ màn hình đầy đủ các thông báo lỗi quá, một lần nữa, 753 00:33:56,220 --> 00:33:59,240 nhận ra rằng một trong những dưới cùng chỉ có thể là triệu chứng của 754 00:33:59,240 --> 00:34:00,320 trên cùng những người thân. 755 00:34:00,320 --> 00:34:03,560 Vì vậy, luôn luôn đuổi xuống lỗi của bạn từ trên xuống. 756 00:34:03,560 --> 00:34:06,720 Bởi vì chỉ có thể là một hiệu ứng vòng hoa cúc cho bạn 757 00:34:06,720 --> 00:34:09,030 có vấn đề cách hơn bạn thực sự làm. 758 00:34:09,030 --> 00:34:14,989 >> Vì vậy, làm thế nào chúng ta có thể khắc phục điều này, nếu mục tiêu của tôi là để tăng x? 759 00:34:14,989 --> 00:34:15,370 Đó là những gì? 760 00:34:15,370 --> 00:34:15,620 Okay. 761 00:34:15,620 --> 00:34:16,679 Vì vậy, chúng ta có thể làm cho x toàn cầu. 762 00:34:16,679 --> 00:34:18,860 Chúng ta hãy xem các phím tắt rằng tôi đã cảnh báo trước đó. 763 00:34:18,860 --> 00:34:20,550 Nhưng heck, chúng ta chỉ cần một sửa chữa nhanh chóng. 764 00:34:20,550 --> 00:34:23,949 Vì vậy, chúng ta hãy chỉ nói rằng x int lên ở đây. 765 00:34:23,949 --> 00:34:25,600 Điều đó làm cho x toàn cầu. 766 00:34:25,600 --> 00:34:28,460 Vì vậy, bây giờ chính có quyền truy cập vào nó. 767 00:34:28,460 --> 00:34:31,780 Và tăng có quyền truy cập vào nó. 768 00:34:31,780 --> 00:34:33,860 Và để cho tôi đi trước và biên dịch này ngay bây giờ. 769 00:34:33,860 --> 00:34:36,330 Hãy buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Có vẻ để biên dịch ngay bây giờ. 771 00:34:37,440 --> 00:34:40,949 Hãy chạy buggy4, và có vẻ như thực sự làm việc. 772 00:34:40,949 --> 00:34:42,780 Bây giờ đây là một trong những điều này - 773 00:34:42,780 --> 00:34:45,870 làm như tôi nói, không phải là tôi làm, như tôi đã chỉ cần thực hiện ở đây. 774 00:34:45,870 --> 00:34:49,239 Bởi vì nói chung, các chương trình của chúng tôi sẽ nhận được thú vị hơn nhiều và 775 00:34:49,239 --> 00:34:50,440 nhiều thời gian hơn. 776 00:34:50,440 --> 00:34:53,199 Và nếu giải pháp của bạn cho các vấn đề của cuộc sống chỉ là ah, đặt tất cả các 777 00:34:53,199 --> 00:34:57,550 biến ở phía trên cùng của tập tin của bạn, rất nhanh chóng làm các chương trình nhận được 778 00:34:57,550 --> 00:34:59,700 horrifically khó quản lý. 779 00:34:59,700 --> 00:35:02,050 Nó được còn khó nghĩ ra tên biến mới. 780 00:35:02,050 --> 00:35:05,240 Nó được khó khăn hơn để hiểu những gì biến là làm những gì. 781 00:35:05,240 --> 00:35:08,250 >> Và do đó, nói chung, điều này không phải là một giải pháp tốt. 782 00:35:08,250 --> 00:35:09,780 Vì vậy, hãy làm điều này tốt hơn. 783 00:35:09,780 --> 00:35:11,920 Chúng tôi không muốn sử dụng một biến toàn cầu ở đây. 784 00:35:11,920 --> 00:35:14,050 Tôi muốn để tăng x. 785 00:35:14,050 --> 00:35:16,050 Vì vậy, tôi có thể rõ ràng - 786 00:35:16,050 --> 00:35:18,450 vào cuối ngày, đó là một câu chuyện ngớ ngẩn bởi vì chúng tôi chỉ làm điều này. 787 00:35:18,450 --> 00:35:22,050 Nhưng nếu tôi không biết về điều hành rằng, tôi đã không được phép 788 00:35:22,050 --> 00:35:27,700 thay đổi nó trong chính bản thân, làm thế nào khác tôi có thể thực hiện Ken ở đây, điều này 789 00:35:27,700 --> 00:35:31,450 thời gian không hình khối nhưng để tăng? 790 00:35:31,450 --> 00:35:32,700 Làm thế nào để thay đổi điều này ở đây? 791 00:35:32,700 --> 00:35:33,025 Yeah. 792 00:35:33,025 --> 00:35:34,275 [Không nghe được] 793 00:35:37,430 --> 00:35:38,000 DAVID J. Malan: Được rồi, tốt. 794 00:35:38,000 --> 00:35:40,490 Vì vậy, tại sao tôi không vượt qua trong x? 795 00:35:40,490 --> 00:35:44,390 Và sau đó thay vì trả lại, tại sao tôi chỉ làm return x + 1? 796 00:35:44,390 --> 00:35:46,370 Bây giờ, mọi việc một vài chi tiết có thay đổi ở đây. 797 00:35:46,370 --> 00:35:47,530 Tôi đang đi đúng hướng. 798 00:35:47,530 --> 00:35:48,910 Những gì khác tôi cần tinh chỉnh không? 799 00:35:48,910 --> 00:35:49,470 Người khác. 800 00:35:49,470 --> 00:35:49,882 Yeah? 801 00:35:49,882 --> 00:35:51,530 [Không nghe được] 802 00:35:51,530 --> 00:35:53,520 DAVID J. Malan: tôi cần phải thay đổi kiểu trả về của tăng 803 00:35:53,520 --> 00:35:54,590 bởi vì nó không làm mất hiệu lực. 804 00:35:54,590 --> 00:35:56,650 Void có nghĩa là không có gì được trả lại. 805 00:35:56,650 --> 00:35:57,600 Nhưng rõ ràng, bây giờ nó là. 806 00:35:57,600 --> 00:36:01,280 Vì vậy, điều này cần phải thay đổi để int để phù hợp với bất cứ điều gì 807 00:36:01,280 --> 00:36:02,580 Tôi đang thực sự trở lại. 808 00:36:02,580 --> 00:36:04,580 >> Bây giờ cái gì khác là vẫn còn lỗi ở đây. 809 00:36:04,580 --> 00:36:04,982 Yeah? 810 00:36:04,982 --> 00:36:06,590 [Không nghe được] 811 00:36:06,590 --> 00:36:07,630 DAVID J. Malan: Vì vậy, tôi cần phải tăng x? 812 00:36:07,630 --> 00:36:10,336 [Không nghe được] 813 00:36:10,336 --> 00:36:11,880 DAVID J. Malan: Ah, vì vậy tôi cần phải vượt qua x. 814 00:36:11,880 --> 00:36:13,300 Vì vậy, tôi cần phải làm điều này ở đây. 815 00:36:17,590 --> 00:36:19,690 Vì vậy, các mẫu thử nghiệm, tôi phải thay đổi này tại đây. 816 00:36:19,690 --> 00:36:21,290 Vì vậy, điều này đã trở thành một int. 817 00:36:21,290 --> 00:36:22,820 Điều này phải trở thành - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Tôi thực sự có một lỗi ở đây. 820 00:36:24,710 --> 00:36:25,780 Hãy để sửa lỗi này đầu tiên. 821 00:36:25,780 --> 00:36:27,990 Điều này sẽ thực sự là gì? 822 00:36:27,990 --> 00:36:29,330 Vì vậy, nó đã nhận được một cái gì đó int. 823 00:36:29,330 --> 00:36:30,340 Nó có thể là x. 824 00:36:30,340 --> 00:36:33,120 Nhưng thẳng thắn, nếu bạn bắt đầu kêu gọi tất cả x biến của bạn, nó sẽ nhận được 825 00:36:33,120 --> 00:36:35,250 ít hơn và ít rõ ràng hơn được mà. 826 00:36:35,250 --> 00:36:38,210 Vì vậy, hãy chỉ cần tùy tiện chọn một quy ước đặt tên khác nhau cho tôi 827 00:36:38,210 --> 00:36:40,220 helper chức năng, các chức năng Tôi đang viết. 828 00:36:40,220 --> 00:36:41,100 Chúng tôi sẽ gọi nó là một. 829 00:36:41,100 --> 00:36:44,500 Hoặc chúng ta có thể gọi nó là - hãy gọi nó là even_number thậm chí còn rõ ràng hơn. 830 00:36:44,500 --> 00:36:47,610 Vì vậy, sau đó tôi phải quay trở lại bất cứ điều gì con số này cộng thêm 1. 831 00:36:47,610 --> 00:36:49,720 Và bây giờ tôi phải thay đổi một điều khác ở đây và một 832 00:36:49,720 --> 00:36:50,700 những điều khác ở đây. 833 00:36:50,700 --> 00:36:54,150 Tôi phải làm gì để thay đổi trên đường dây 21 đầu tiên? 834 00:36:54,150 --> 00:36:55,390 Tôi phải gán nó vào x. 835 00:36:55,390 --> 00:36:57,480 Vì vậy, tôi có thể không chỉ cần gọi x tăng. 836 00:36:57,480 --> 00:37:01,000 Tôi cần phải nhớ câu trả lời bằng cách thay đổi giá trị của x 837 00:37:01,000 --> 00:37:02,020 phía bên tay trái. 838 00:37:02,020 --> 00:37:04,930 Và mặc dù x là bây giờ trái và phải, đó là hoàn toàn tốt bởi vì 839 00:37:04,930 --> 00:37:08,370 phía bên tay phải được thực hiện đầu tiên sau đó được plopped vào bên trái 840 00:37:08,370 --> 00:37:10,240 tay điều, x trong trường hợp này. 841 00:37:10,240 --> 00:37:11,900 Và rồi cuối cùng, đây là một sửa chữa dễ dàng. 842 00:37:11,900 --> 00:37:15,080 Điều này chỉ nên phù hợp với những gì xuống dưới đây. 843 00:37:15,080 --> 00:37:17,120 Int number. 844 00:37:17,120 --> 00:37:17,320 >> Được rồi. 845 00:37:17,320 --> 00:37:20,290 Vì vậy, một bó toàn bộ những thay đổi cho một chức năng thực sự ngu ngốc. 846 00:37:20,290 --> 00:37:24,250 Tuy nhiên, đại diện của những điều mà chúng ta ngày càng sẽ muốn làm. 847 00:37:24,250 --> 00:37:25,490 Vì vậy, hãy buggy4. 848 00:37:25,490 --> 00:37:26,485 Tôi đã hơi say lên một nơi nào đó. 849 00:37:26,485 --> 00:37:27,520 Lạy Chúa tôi. 850 00:37:27,520 --> 00:37:29,660 Năm sai lầm trong, như, một chương trình sáu. 851 00:37:29,660 --> 00:37:36,500 Vì vậy, những gì sai trái trên dòng 18, nhân vật của 5? 852 00:37:36,500 --> 00:37:36,970 Được rồi. 853 00:37:36,970 --> 00:37:39,330 Vì vậy, tôi phải khai báo int này. 854 00:37:39,330 --> 00:37:39,630 Được rồi. 855 00:37:39,630 --> 00:37:41,790 Vì vậy, chúng ta hãy xem, một bó toàn bộ các lỗi khác. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Nhưng một lần nữa, chúng ta hãy xóa màn hình - 859 00:37:46,020 --> 00:37:48,660 L kiểm soát ở đây và Clang lại chạy. 860 00:37:48,660 --> 00:37:51,340 Vì vậy, năm vấn đề thực sự là chỉ là một. 861 00:37:51,340 --> 00:37:53,500 Vì vậy, bây giờ chúng ta hãy chạy buggy4 Enter. 862 00:37:53,500 --> 00:37:54,150 Whew. 863 00:37:54,150 --> 00:37:57,434 x đã được tăng lên một cách chính xác. 864 00:37:57,434 --> 00:37:58,420 >> Được rồi. 865 00:37:58,420 --> 00:38:01,700 Bất kỳ câu hỏi về việc làm thế nào để tăng số? 866 00:38:01,700 --> 00:38:02,896 Yeah? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Tại sao nó rằng bạn chỉ có thể thay đổi x số trong biến 868 00:38:06,864 --> 00:38:08,860 tên và nó sẽ biết những gì bạn có nghĩa là? 869 00:38:08,860 --> 00:38:09,600 DAVID J. Malan: Tốt câu hỏi. 870 00:38:09,600 --> 00:38:13,130 Làm thế nào mà tôi có thể chỉ cần thay đổi x số lượng và chương trình sẽ biết 871 00:38:13,130 --> 00:38:13,990 ngay lập tức? 872 00:38:13,990 --> 00:38:16,120 Vì vậy, một lần nữa, hãy nghĩ về nó như là trừu tượng này. 873 00:38:16,120 --> 00:38:20,110 Vì vậy, nếu tôi chính và Ken là gia tăng, thẳng thắn, tôi không quan tâm 874 00:38:20,110 --> 00:38:21,540 Ken gọi iPad của mình. 875 00:38:21,540 --> 00:38:25,350 Tôi không quan tâm những gì ông gọi là bất cứ điều gì mà đã làm với việc thực hiện của mình 876 00:38:25,350 --> 00:38:26,550 chức năng này. 877 00:38:26,550 --> 00:38:32,130 Vì vậy, đây là một chi tiết thực hiện mà tôi, chính, không 878 00:38:32,130 --> 00:38:33,010 phải quan tâm đến. 879 00:38:33,010 --> 00:38:37,440 Và vì vậy chỉ cần thay đổi nó nhất quán bên trong của hàm, số ở đây 880 00:38:37,440 --> 00:38:41,340 và cuối cùng đây là tất cả phải mất quá lâu như tôi biên dịch lại. 881 00:38:41,340 --> 00:38:43,820 Đó là loại giống như nếu bạn nghĩ về nhiều người trong chúng ta, những người bạn của lái xe 882 00:38:43,820 --> 00:38:46,590 giấy phép, những người đã điều khiển, hoặc nếu bạn đã thậm chí lái xe trong một chiếc xe - 883 00:38:46,590 --> 00:38:50,710 hầu hết chúng ta không có ý tưởng làm thế nào một chiếc xe hơi hoạt động bên dưới mui xe. 884 00:38:50,710 --> 00:38:54,710 Và nghĩa đen, nếu bạn mở mui xe, hầu hết chúng ta - trong đó có tôi - 885 00:38:54,710 --> 00:38:56,580 sẽ không thực sự biết những gì chúng tôi đang tìm kiếm tại. 886 00:38:56,580 --> 00:38:58,850 Loại như bạn có thể cảm thấy với các công cụ như quyền này ngay bây giờ. 887 00:38:58,850 --> 00:39:01,380 Nhưng chúng tôi không thực sự cần phải chăm sóc xe hoạt động như thế nào. 888 00:39:01,380 --> 00:39:05,000 Chúng tôi không có để chăm sóc tất cả những gì của các thanh và piston và cáp bên trong 889 00:39:05,000 --> 00:39:07,700 xe đang thực sự làm. 890 00:39:07,700 --> 00:39:11,360 >> Vì vậy, một cái gì đó giống như những gì bạn gọi các piston không quan trọng 891 00:39:11,360 --> 00:39:11,920 trong trường hợp này. 892 00:39:11,920 --> 00:39:12,490 Cùng một ý tưởng. 893 00:39:12,490 --> 00:39:12,670 Yeah? 894 00:39:12,670 --> 00:39:13,920 [Không nghe được] 895 00:39:25,250 --> 00:39:29,530 DAVID J. Malan: Nếu có sử dụng trong những thời điểm xa biến trước đây 896 00:39:29,530 --> 00:39:32,220 bạn, các lập trình viên, sẽ phải thay đổi chúng ở khắp mọi nơi. 897 00:39:32,220 --> 00:39:35,230 Hoặc bạn có nghĩa là có thể làm File, Menu, và sau đó Tìm / Thay thế, 898 00:39:35,230 --> 00:39:36,270 một cái gì đó như thế. 899 00:39:36,270 --> 00:39:40,110 Nhưng bạn sẽ phải tự mình thực hiện những thay đổi. 900 00:39:40,110 --> 00:39:41,200 Bạn có phải là phù hợp. 901 00:39:41,200 --> 00:39:42,450 [Không nghe được] 902 00:39:47,200 --> 00:39:48,960 DAVID J. Malan: thứ tự đặc biệt như ở đây? 903 00:39:48,960 --> 00:39:52,660 Nếu điều này là int một số khác? 904 00:39:52,660 --> 00:39:52,940 Yeah. 905 00:39:52,940 --> 00:39:56,430 Vì vậy, để vấn đề khi bạn đang gọi chức năng. 906 00:39:56,430 --> 00:40:00,350 Vì vậy, nếu tôi đã kêu gọi tăng với một cái gì đó dấu phẩy một cái gì đó, 907 00:40:00,350 --> 00:40:01,400 có một ánh xạ trực tiếp. 908 00:40:01,400 --> 00:40:04,490 Biến đầu tiên, bất cứ điều gì nó được gọi là, được thực hiện một bản sao của người đầu tiên 909 00:40:04,490 --> 00:40:05,480 tranh luận ở đây. 910 00:40:05,480 --> 00:40:07,280 Xin lỗi, không phải là một dấu ngoặc đơn. 911 00:40:07,280 --> 00:40:09,300 Đối số dòng thứ hai lên với một trong những thứ hai. 912 00:40:09,300 --> 00:40:11,220 >> Vì vậy, để, có, vấn đề này. 913 00:40:11,220 --> 00:40:11,490 Được rồi. 914 00:40:11,490 --> 00:40:13,360 Xin lỗi tôi đã một chặng đường dài để đến đó. 915 00:40:13,360 --> 00:40:14,610 Các câu hỏi khác? 916 00:40:16,460 --> 00:40:16,850 Được rồi. 917 00:40:16,850 --> 00:40:20,300 Vì vậy, chúng ta hãy xem nếu chúng ta không có thể vẽ một bức tranh về những gì đang thực sự xảy ra 918 00:40:20,300 --> 00:40:22,160 ở đây bên dưới mui xe, do đó, để nói chuyện. 919 00:40:22,160 --> 00:40:26,310 Vì vậy, đây là một hình chữ nhật mà có thể đại diện cho bộ nhớ máy tính của bạn. 920 00:40:26,310 --> 00:40:31,240 Vì vậy, ngay cả khi bạn không có ý tưởng làm thế nào bộ nhớ hoạt động hoặc làm thế nào RAM công trình, ít nhất là 921 00:40:31,240 --> 00:40:33,590 cho rằng bạn có chùm của nó những ngày này. 922 00:40:33,590 --> 00:40:34,740 Bạn đã có MB của nó. 923 00:40:34,740 --> 00:40:35,760 Bạn đã có GB của nó. 924 00:40:35,760 --> 00:40:40,690 Và chúng ta biết từ số không tuần một byte chỉ là những gì? 925 00:40:40,690 --> 00:40:41,280 8 bit. 926 00:40:41,280 --> 00:40:42,730 Đúng, vì vậy 8 zero và những người thân. 927 00:40:42,730 --> 00:40:46,300 Vì vậy, nếu máy tính của bạn có một buổi biểu diễn của RAM, hai hợp đồng biểu diễn của bộ nhớ RAM những ngày này, bạn có một 928 00:40:46,300 --> 00:40:54,450 tỷ hay 2 tỷ byte của bộ nhớ, hoặc khoảng 8 tỷ 16 tỷ đồng 929 00:40:54,450 --> 00:40:56,560 bit, bên trong máy tính của bạn. 930 00:40:56,560 --> 00:40:59,710 Bây giờ không giống như ví dụ nhỏ Willy Woolly, nó không phải là các hạt từ tính 931 00:40:59,710 --> 00:41:00,560 thường nữa. 932 00:41:00,560 --> 00:41:04,470 Càng ngày, trong máy tính xách tay ít nhất, đó là các ổ đĩa trạng thái rắn, ổ SSD, 933 00:41:04,470 --> 00:41:05,560 chỉ không có bộ phận chuyển động. 934 00:41:05,560 --> 00:41:06,710 Đó là tất cả điện tử. 935 00:41:06,710 --> 00:41:08,070 Đó là tất cả các điện theo. 936 00:41:08,070 --> 00:41:12,360 Vì vậy, suy nghĩ, mặc dù, của hình chữ nhật này chỉ đại diện cho một hoặc hai 937 00:41:12,360 --> 00:41:13,930 GB bộ nhớ mà bạn có. 938 00:41:13,930 --> 00:41:15,500 >> Vì vậy, đó là một đoạn bộ nhớ. 939 00:41:15,500 --> 00:41:20,460 Bây giờ thế giới của khoa học máy tính có loại khối phân vùng của 940 00:41:20,460 --> 00:41:22,570 bộ nhớ để làm việc khác nhau. 941 00:41:22,570 --> 00:41:25,930 Vì vậy, ví dụ, nếu điều này là bộ nhớ RAM của máy tính - theo đề nghị của 942 00:41:25,930 --> 00:41:30,400 hình chữ nhật đó - quay ra rằng theo quy ước, ở phía trên của bộ nhớ RAM của bạn, do đó, 943 00:41:30,400 --> 00:41:33,170 để nói chuyện, nói chung là những gì được gọi là một đoạn văn bản. 944 00:41:33,170 --> 00:41:35,910 Đó là zero và những người mà bạn đã biên soạn. 945 00:41:35,910 --> 00:41:39,040 Vì vậy, khi chúng tôi đã xem xét bên dưới mui xe vào những gì a.out, tất cả 946 00:41:39,040 --> 00:41:40,360 zero và những người thân - 947 00:41:40,360 --> 00:41:44,000 khi bạn chạy một chương trình, những zeroes và những người được nạp từ ổ cứng 948 00:41:44,000 --> 00:41:46,290 ổ đĩa vào một cái gì đó gọi là RAM. 949 00:41:46,290 --> 00:41:48,950 Và trong bộ nhớ RAM, họ đang đặt ở đầu trang. 950 00:41:48,950 --> 00:41:50,330 Bây giờ trong khi đó, bạn có những thứ khác. 951 00:41:50,330 --> 00:41:53,060 Khởi tạo dữ liệu, dữ liệu chưa được khởi tạo. 952 00:41:53,060 --> 00:41:56,440 Hai rộng bộ nhớ tham khảo biến toàn cầu, 953 00:41:56,440 --> 00:41:57,530 bạn không thường xuyên sử dụng. 954 00:41:57,530 --> 00:42:00,630 Nhưng đôi khi nếu bạn làm, họ kết thúc ở đó là tốt. 955 00:42:00,630 --> 00:42:01,620 Sau đó có một số công cụ khác. 956 00:42:01,620 --> 00:42:04,130 Môi trường biến, chúng tôi sẽ không dành nhiều thời gian trên. 957 00:42:04,130 --> 00:42:06,120 Nhưng sau đó hai điều quan trọng sẽ trở lại trong suốt 958 00:42:06,120 --> 00:42:08,130 học kỳ, stack và heap. 959 00:42:08,130 --> 00:42:12,280 >> Vì vậy, hầu hết các bộ nhớ máy tính của bạn được dành riêng khi chạy một chương trình cho 960 00:42:12,280 --> 00:42:14,880 cái gì gọi là ngăn xếp và một cái gì đó gọi là đống. 961 00:42:14,880 --> 00:42:16,940 Và chúng tôi sẽ không nói về heap, nhưng chúng tôi sẽ 962 00:42:16,940 --> 00:42:18,180 nói về stack. 963 00:42:18,180 --> 00:42:22,910 Và ngăn xếp được có nghĩa là để gợi lên hình ảnh như phòng ăn 964 00:42:22,910 --> 00:42:26,120 khay bữa ăn trong Mather House, hoặc bất cứ nơi nào bạn xảy ra được, nơi mà các 965 00:42:26,120 --> 00:42:27,810 Nhân viên phòng ăn sạch chúng mỗi ngày. 966 00:42:27,810 --> 00:42:30,180 Họ ngăn xếp chúng lên từ tầng trên lên. 967 00:42:30,180 --> 00:42:33,800 Và tương tự như trong bộ nhớ, có ý tưởng này đưa một cái gì đó trên một 968 00:42:33,800 --> 00:42:36,740 ngăn xếp, đặt một cái gì đó trên một chồng, đặt một cái gì đó trên một chồng. 969 00:42:36,740 --> 00:42:38,000 Và chúng tôi làm những gì có nghĩa là bằng cách này? 970 00:42:38,000 --> 00:42:41,430 Vâng, hãy để phóng to trên nửa dưới của hình ảnh này, máy tính của bạn 971 00:42:41,430 --> 00:42:43,990 RAM, đề nghị sau đây. 972 00:42:43,990 --> 00:42:48,300 Nó chỉ ra rằng khi bạn chạy một chương trình như a.out hoặc hello, bất cứ điều gì 973 00:42:48,300 --> 00:42:49,920 chương trình mà bạn đã viết, 974 00:42:49,920 --> 00:42:53,030 một lần nữa, những zeroes và những người được nạp từ ổ đĩa cứng của bạn - đó là 975 00:42:53,030 --> 00:42:56,190 lưu trữ lâu dài, vẫn ở đó ngay cả khi bạn rút phích cắm 976 00:42:56,190 --> 00:42:57,220 được nạp vào bộ nhớ RAM. 977 00:42:57,220 --> 00:42:59,020 RAM là nhanh hơn so với ổ đĩa cứng. 978 00:42:59,020 --> 00:43:00,700 Nó nhỏ hơn so với các ổ đĩa cứng. 979 00:43:00,700 --> 00:43:03,490 Nhưng đó là nơi mà các chương trình sống trong khi bạn đang chạy. 980 00:43:03,490 --> 00:43:06,380 >> Vì vậy, bạn nhấp đúp chuột vào một chương trình trên một máy Mac hoặc máy PC - nó được nạp từ 981 00:43:06,380 --> 00:43:07,750 ổ cứng vào RAM. 982 00:43:07,750 --> 00:43:11,760 Ngay sau khi nó đã được nạp vào bộ nhớ RAM, zero và những người đi ở đầu đường, 983 00:43:11,760 --> 00:43:13,130 gọi là phân khúc văn bản. 984 00:43:13,130 --> 00:43:17,040 Nhưng sau đó, ngay sau khi chương trình của bạn thực sự bắt đầu chạy, các chính 985 00:43:17,040 --> 00:43:18,140 chức năng được gọi. 986 00:43:18,140 --> 00:43:21,070 Và chính, như chúng ta đã thấy, thường có biến địa phương. 987 00:43:21,070 --> 00:43:24,560 Và nó có ints và chuỗi ký tự và các loại tương tự. 988 00:43:24,560 --> 00:43:28,300 Vì vậy, nếu chương trình của bạn mà bạn đã viết hoặc chương trình mà bạn có 989 00:43:28,300 --> 00:43:33,680 nhấp đúp vào sử dụng một số các biến bên trong của chính họ kết thúc ở 990 00:43:33,680 --> 00:43:37,020 dưới cùng của ngăn xếp của bạn bộ nhớ, do đó, để nói chuyện. 991 00:43:37,020 --> 00:43:39,160 Bây giờ cụ thể, điều này thực sự có nghĩa gì? 992 00:43:39,160 --> 00:43:44,080 Điều này chỉ có nghĩa là nếu chúng ta để đếm những điều - 993 00:43:44,080 --> 00:43:49,380 nếu chúng ta tính số byte của bộ nhớ RAM trong máy tính của bạn, thông báo rằng 994 00:43:49,380 --> 00:43:51,650 điều này có thể là số zero byte. 995 00:43:51,650 --> 00:43:56,130 Điều này có thể là byte số một, hai, ba, bốn, năm, sáu, tất cả 996 00:43:56,130 --> 00:43:57,290 các con đường lên thích 997 00:43:57,290 --> 00:44:01,520 2 tyû seõ là tất cả các con đường lên ở phía trên. 998 00:44:01,520 --> 00:44:05,960 Vì vậy, nói cách khác, khi chúng ta nói về bộ nhớ RAM hoặc bộ nhớ trong của byte, 999 00:44:05,960 --> 00:44:09,680 chỉ có nghĩa là ai đó đã quyết định những gì để từng con số nằm trên từng 1000 00:44:09,680 --> 00:44:11,110 những khối của bộ nhớ. 1001 00:44:11,110 --> 00:44:16,950 >> Vì vậy, khi bạn cần 32 bit cho một int, hoặc bạn cần 8 bit cho một char, 1002 00:44:16,950 --> 00:44:18,320 để họ kết thúc trong bộ nhớ? 1003 00:44:18,320 --> 00:44:20,650 Vậy khái niệm, họ chỉ kết thúc ở dưới cùng của 1004 00:44:20,650 --> 00:44:21,780 điều được gọi là ngăn xếp. 1005 00:44:21,780 --> 00:44:25,670 Nhưng những gì thú vị bây giờ là khi gọi một chức năng. 1006 00:44:25,670 --> 00:44:28,830 Giả sử một chức năng được gọi là foo, chỉ là một tên tùy ý. 1007 00:44:28,830 --> 00:44:32,480 Điều gì sẽ xảy ra là chính là ở dưới cùng của ngăn xếp bộ nhớ này. 1008 00:44:32,480 --> 00:44:35,630 Foo bây giờ được đặt trên đầu trang của chính trong bộ nhớ. 1009 00:44:35,630 --> 00:44:40,020 Vì vậy, bất kỳ biến địa phương mà foo đã kết thúc loại khái niệm trên 1010 00:44:40,020 --> 00:44:40,770 những người trong chính. 1011 00:44:40,770 --> 00:44:46,920 Nếu foo gọi một chức năng được gọi là bar, các biến kết thúc ở đây. 1012 00:44:46,920 --> 00:44:49,790 Nếu thanh gọi là cái gì khác, ở đây, ở đây, ở đây. 1013 00:44:49,790 --> 00:44:53,900 Vì vậy, những gì thú vị về việc chạy một chương trình là khi bạn gọi chức năng, 1014 00:44:53,900 --> 00:44:57,720 và những chức năng gọi chức năng, và những chức năng gọi chức năng, 1015 00:44:57,720 --> 00:45:00,980 bạn xây dựng chồng này của các chức năng trong bộ nhớ. 1016 00:45:00,980 --> 00:45:06,740 Và chỉ một lần trở về chức năng nào bạn bắt đầu nhận được rằng bộ nhớ trở lại. 1017 00:45:06,740 --> 00:45:11,190 Vì vậy, một trong những cách dễ nhất để chạy ra khỏi bộ nhớ trong một chương trình máy tính là 1018 00:45:11,190 --> 00:45:14,170 viết các chức năng mà không bao giờ trở lại. 1019 00:45:14,170 --> 00:45:16,650 >> Vì vậy, ví dụ, chúng ta hãy chứng minh như là nhiều với một 1020 00:45:16,650 --> 00:45:18,460 cố ý lỗi chương trình. 1021 00:45:18,460 --> 00:45:24,690 Hãy để tôi đi trước và # include int main (void). 1022 00:45:24,690 --> 00:45:31,270 Và tôi sẽ làm trong khi (2> 1), mà có lẽ sẽ không bao giờ 1023 00:45:31,270 --> 00:45:33,370 thay đổi chúng ta. 1024 00:45:33,370 --> 00:45:37,720 Và hãy để tôi đi trước và làm printf. 1025 00:45:37,720 --> 00:45:39,950 Trên thực tế, điều đó sẽ được ít trực quan thú vị. 1026 00:45:39,950 --> 00:45:40,460 Hãy làm điều này. 1027 00:45:40,460 --> 00:45:44,840 Cho int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Hãy làm cho sai lầm này, i + +. 1029 00:45:49,740 --> 00:45:51,150 Và chúng ta không printf đây. 1030 00:45:51,150 --> 00:45:52,550 Hãy thực hành những gì tôi đang giảng dạy. 1031 00:45:52,550 --> 00:45:54,090 Hãy có một phương pháp ở đây. 1032 00:45:54,090 --> 00:46:00,860 Void đoạn điệp khúc, và chúng tôi sẽ nói int i. 1033 00:46:00,860 --> 00:46:02,295 Và sau đó tôi sẽ nói, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, chúng ta hãy làm điều này thú vị hơn. 1035 00:46:06,790 --> 00:46:08,350 Hãy thực sự không in bất cứ điều gì ở tất cả. 1036 00:46:08,350 --> 00:46:10,530 Hãy chỉ làm điều này. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Được rồi. 1039 00:46:17,000 --> 00:46:20,040 Vì vậy, đây là lỗi vì lý do tại sao? 1040 00:46:20,040 --> 00:46:22,850 Tôi đang làm điều này như tôi đi vì chương trình không thực sự làm bất cứ điều gì 1041 00:46:22,850 --> 00:46:23,420 quan tâm. 1042 00:46:23,420 --> 00:46:24,670 Nhưng đó không phải là mục tiêu. 1043 00:46:24,670 --> 00:46:30,440 Mục đích là để viết một chương trình có chức năng chính làm những gì, rõ ràng? 1044 00:46:30,440 --> 00:46:31,370 Hãy gọi cho chính nó. 1045 00:46:31,370 --> 00:46:32,600 Và trên thực tế, chúng ta không cần vòng lặp. 1046 00:46:32,600 --> 00:46:36,070 Hãy thậm chí đơn giản hóa này chỉ để không bị mất thị giác của thực sự là 1047 00:46:36,070 --> 00:46:37,310 cơ bản lỗi. 1048 00:46:37,310 --> 00:46:39,200 Cuộc gọi chính điệp khúc hát một số đoạn điệp khúc. 1049 00:46:39,200 --> 00:46:41,760 Sau đó, tôi đã làm điều gì đó ngu ngốc, và tôi đã có điệp khúc điệp khúc gọi bởi vì tôi cho rằng 1050 00:46:41,760 --> 00:46:43,550 người khác để thực hiện nó có thể. 1051 00:46:43,550 --> 00:46:45,960 Và bây giờ điều này sẽ không biên dịch được nêu ra. 1052 00:46:45,960 --> 00:46:48,340 Tôi cần phải làm những gì? 1053 00:46:48,340 --> 00:46:49,700 Tôi cần các mẫu thử nghiệm, hãy nhớ. 1054 00:46:49,700 --> 00:46:55,520 Vì vậy, tôi cần phải có điệp khúc void (int i); 1055 00:46:55,520 --> 00:46:57,470 >> Vì vậy, bây giờ, nếu tôi đi xuống ở đây - 1056 00:46:57,470 --> 00:46:59,030 trên thực tế, chúng ta hãy sử dụng cửa sổ lớn hơn. 1057 00:46:59,030 --> 00:47:01,670 Hãy cho đi trước và làm cho đoạn điệp khúc. 1058 00:47:01,670 --> 00:47:06,000 Hãy cho đi trước và làm cho đoạn điệp khúc. 1059 00:47:06,000 --> 00:47:08,302 Sử dụng khai hải quan không xác định i. 1060 00:47:08,302 --> 00:47:09,860 Ồ, đó là ngu ngốc. 1061 00:47:09,860 --> 00:47:11,020 Chúng ta không cần tranh luận. 1062 00:47:11,020 --> 00:47:13,680 Hãy chỉ làm điều này. 1063 00:47:13,680 --> 00:47:14,550 Muốn chúng tôi đã bắt đầu theo cách này. 1064 00:47:14,550 --> 00:47:16,160 Nó đã có một chương trình dễ dàng hơn nhiều để viết. 1065 00:47:16,160 --> 00:47:20,100 Vì vậy, có. 1066 00:47:20,100 --> 00:47:23,870 Bây giờ hãy đi qua cửa sổ thiết bị đầu cuối của tôi, lại chạy Clang. 1067 00:47:23,870 --> 00:47:26,900 Và ở đây chúng tôi đi. 1068 00:47:26,900 --> 00:47:28,020 Đó là thực sự nhanh chóng. 1069 00:47:28,020 --> 00:47:30,690 Điều gì thực sự xảy ra, mặc dù? 1070 00:47:30,690 --> 00:47:33,430 Vâng, bây giờ tôi sẽ thêm dòng in, vì vậy chúng tôi có thể nhìn thấy. 1071 00:47:33,430 --> 00:47:41,330 Vì vậy, hãy để tôi nói printf, hãy nói, tôi đang ở đây. 1072 00:47:41,330 --> 00:47:43,470 Được rồi, không có biến, chúng tôi sẽ để nó như thế. 1073 00:47:43,470 --> 00:47:44,860 Hãy để tôi chạy lại làm. 1074 00:47:44,860 --> 00:47:47,940 Hãy để tôi lại điệp khúc. 1075 00:47:47,940 --> 00:47:51,235 Và đi kèm. 1076 00:47:53,880 --> 00:47:55,130 Tiếp tục đi. 1077 00:47:57,630 --> 00:47:59,750 Một sang một bên, tại sao nó không bị rơi chưa? 1078 00:47:59,750 --> 00:48:02,050 Lỗi phân khúc xảy ra siêu nhanh trước đây. 1079 00:48:02,050 --> 00:48:04,250 [Không nghe được] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. Malan: Chính xác. 1081 00:48:04,830 --> 00:48:06,350 Vì vậy, nó cần có thời gian để in. 1082 00:48:06,350 --> 00:48:08,370 Nó chỉ mất thêm công việc trên một phần của máy tính. 1083 00:48:08,370 --> 00:48:09,550 Và vì thế,. 1084 00:48:09,550 --> 00:48:10,620 Segmentation fault. 1085 00:48:10,620 --> 00:48:12,140 >> Vì vậy, nhận thấy chương trình nhanh chóng chạy như thế nào. 1086 00:48:12,140 --> 00:48:14,110 Nếu bạn không in bất cứ điều gì, siêu nhanh. 1087 00:48:14,110 --> 00:48:18,100 Nhưng chúng ta vẫn có lỗi phân khúc này bởi vì những gì đã xảy ra? 1088 00:48:18,100 --> 00:48:21,310 Vâng, nếu bạn nghĩ về bộ nhớ máy tính của bạn như thế nào được đặt ra, 1089 00:48:21,310 --> 00:48:22,890 sẽ xảy ra là chính. 1090 00:48:22,890 --> 00:48:23,800 Nhưng ở đây - 1091 00:48:23,800 --> 00:48:28,670 chúng ta hãy gọi đây là đoạn điệp khúc, và chúng ta hãy gọi đây là điệp khúc. 1092 00:48:28,670 --> 00:48:33,420 Và bây giờ nếu tôi làm thẩm mỹ của tôi, điều này là chỉ cần đi để nói điệp khúc, 1093 00:48:33,420 --> 00:48:38,060 đoạn điệp khúc, đoạn điệp khúc, đoạn điệp khúc, đoạn điệp khúc, điệp khúc, điệp khúc, quảng cáo nauseum. 1094 00:48:38,060 --> 00:48:39,920 Và cuối cùng, những gì sẽ xảy ra? 1095 00:48:39,920 --> 00:48:46,690 Nếu bức tranh lớn theo nghĩa đen là điều này, những gì vừa xảy ra khái niệm? 1096 00:48:46,690 --> 00:48:48,320 Ngăn xếp vượt heap. 1097 00:48:48,320 --> 00:48:52,400 Hoặc tệ hơn, bạn chỉ cần tàn phá tất cả mọi thứ, bao gồm cả các đoạn văn bản, đó là 1098 00:48:52,400 --> 00:48:54,530 zero và những người đại diện cho chương trình của bạn. 1099 00:48:54,530 --> 00:48:56,690 Trong ngắn hạn, điều này chỉ là siêu, siêu xấu. 1100 00:48:56,690 --> 00:48:56,860 Phải không? 1101 00:48:56,860 --> 00:48:58,620 Chương trình của bạn đã nằm ngoài vòng kiểm soát. 1102 00:48:58,620 --> 00:49:02,840 Bạn đang sử dụng bộ nhớ cách nhiều hơn bạn dự định tất cả vì một ngu ngốc 1103 00:49:02,840 --> 00:49:03,920 sai lầm, trong trường hợp này. 1104 00:49:03,920 --> 00:49:08,160 Hoặc trong trường hợp này, một chức năng rất cố tình kêu gọi chính nó. 1105 00:49:08,160 --> 00:49:09,210 Bây giờ điều này không phải là tất cả xấu. 1106 00:49:09,210 --> 00:49:12,540 Chức năng tự gọi mình là thực sự có quyền lực rất lớn 1107 00:49:12,540 --> 00:49:13,700 khi bạn sử dụng nó một cách chính xác. 1108 00:49:13,700 --> 00:49:15,650 Tôi đã không được sử dụng nó một cách chính xác ở đây. 1109 00:49:15,650 --> 00:49:16,940 >> Vì vậy, đây không phải là tất cả xấu. 1110 00:49:16,940 --> 00:49:20,620 Nhưng thực tế là tôi không bao giờ thực sự ngừng kêu gọi bản thân mình là một cơ bản 1111 00:49:20,620 --> 00:49:23,050 điểm yếu của chương trình này. 1112 00:49:23,050 --> 00:49:25,090 Vì vậy, nơi chúng ta đi với tất cả những điều này? 1113 00:49:25,090 --> 00:49:26,230 Vâng, những gì thực sự xảy ra? 1114 00:49:26,230 --> 00:49:30,010 Khi tôi gọi chức năng tăng, như chúng tôi đã làm trong những ví dụ, 1115 00:49:30,010 --> 00:49:33,290 Tôi có một giá trị như 1 mà tôi vượt qua. 1116 00:49:33,290 --> 00:49:35,820 Tôi vượt qua trong một bản sao của một số. 1117 00:49:35,820 --> 00:49:37,080 Vì vậy, sau đây sẽ xảy ra. 1118 00:49:37,080 --> 00:49:40,390 Vì vậy, chúng ta hãy đi vào ví dụ tăng. 1119 00:49:40,390 --> 00:49:44,230 Và anh chàng này ngay trên đây. 1120 00:49:44,230 --> 00:49:46,800 Vì vậy, đây là những gì đang thực sự xảy ra. 1121 00:49:46,800 --> 00:49:50,770 Khi tôi gọi tăng, và tôi vượt qua trong x, bức tranh những gì 1122 00:49:50,770 --> 00:49:53,660 xảy ra ở đây là điều này - 1123 00:49:53,660 --> 00:50:00,240 nếu tôi có giá trị của 1 lưu trữ ở đây, và tôi thực sự gọi tăng, 1124 00:50:00,240 --> 00:50:02,680 bây giờ được gọi là điệp khúc - 1125 00:50:02,680 --> 00:50:04,010 yeah, đó là ném tôi ra khỏi đây. 1126 00:50:04,010 --> 00:50:06,750 Vì vậy, chúng ta hãy gọi việc tăng độ. 1127 00:50:06,750 --> 00:50:09,420 Và chúng tôi không biết những gì chức năng tiếp theo này sẽ là. 1128 00:50:09,420 --> 00:50:14,270 Vì vậy, những gì thực sự xảy ra ở đây là một nơi nào đó trong chính, tôi có một đoạn 1129 00:50:14,270 --> 00:50:16,670 bộ nhớ được lưu trữ số 1. 1130 00:50:16,670 --> 00:50:19,730 Khi tôi gọi tăng, tôi đang sử dụng một đoạn bộ nhớ, nhưng bây giờ tôi 1131 00:50:19,730 --> 00:50:20,840 có bản sao của 1. 1132 00:50:20,840 --> 00:50:25,480 Khi tôi tăng giá trị đó, điều này sẽ trở thành 2 - kinh khủng bằng văn bản về 1133 00:50:25,480 --> 00:50:26,420 màn hình ở đây. 1134 00:50:26,420 --> 00:50:30,550 Nhưng sau đó, những gì xảy ra ngay sau khi trở lại tăng? 1135 00:50:30,550 --> 00:50:34,610 Bộ nhớ này chỉ được bàn giao lại cho hệ điều hành, có nghĩa là tất cả 1136 00:50:34,610 --> 00:50:37,470 bạn đã thực hiện là không có gì hữu ích. 1137 00:50:37,470 --> 00:50:43,460 Một trong đó đã chứa trong chính vẫn là thực sự có. 1138 00:50:43,460 --> 00:50:44,650 >> Vì vậy, chúng ta sẽ có điều này? 1139 00:50:44,650 --> 00:50:49,400 Vâng, nó quay ra rằng trong bộ nhớ, bạn phải trở lại trở lại trình tự của các 1140 00:50:49,400 --> 00:50:50,940 byte mà bạn có thể đặt công cụ. 1141 00:50:50,940 --> 00:50:53,760 Và nó chỉ ra rằng chúng tôi đã nhìn thấy một cái gì đó liên quan đến việc đưa 1142 00:50:53,760 --> 00:50:55,100 mọi thứ trở lại để sao lưu để sao lưu để sao lưu. 1143 00:50:55,100 --> 00:51:00,170 Một chuỗi, dựa trên một tuần và bây giờ hai tuần là gì? 1144 00:51:00,170 --> 00:51:01,840 Vì vậy, nó chỉ là một tập hợp các ký tự. 1145 00:51:01,840 --> 00:51:05,290 Vì vậy, nó quay ra, cũng giống như bạn có thể đặt số điện thoại trong bộ nhớ, tương tự như vậy bạn có thể 1146 00:51:05,290 --> 00:51:06,900 đặt các ký tự trong bộ nhớ. 1147 00:51:06,900 --> 00:51:09,810 Và một khi chúng ta bắt đầu các ký tự đặt trong bộ nhớ trở lại trở lại để trở lại 1148 00:51:09,810 --> 00:51:12,800 trở lại, nó chỉ ra rằng bằng cách sử dụng đơn giản của những thứ như một vòng lặp for hoặc 1149 00:51:12,800 --> 00:51:14,510 một vòng lặp trong khi, chúng ta có thể lặp đi lặp lại - 1150 00:51:14,510 --> 00:51:17,130 từ trái sang phải trên các ký tự trong một chuỗi - 1151 00:51:17,130 --> 00:51:20,720 và bắt đầu xoa bóp chúng thành các nhân vật khác nhau hoàn toàn. 1152 00:51:20,720 --> 00:51:25,550 A có thể trở thành B. B có thể trở thành C. Vì vậy, mà cuối cùng, chúng ta có thể có một 1153 00:51:25,550 --> 00:51:28,830 Câu tiếng Anh mà thực sự có ý nghĩa và chuyển đổi mỗi người 1154 00:51:28,830 --> 00:51:32,440 thư cùng một lúc bằng cách đi bộ thông qua bộ nhớ của máy tính của chúng tôi để lại cho 1155 00:51:32,440 --> 00:51:34,300 quyền thực sự mã hóa. 1156 00:51:34,300 --> 00:51:36,590 >> Vì vậy, chúng ta hãy nghỉ năm phút của chúng tôi ở đây, và khi chúng ta trở lại, chúng tôi sẽ 1157 00:51:36,590 --> 00:51:39,060 bắt đầu quá trình xáo trộn thông tin này. 1158 00:51:41,640 --> 00:51:43,180 >> Được rồi. 1159 00:51:43,180 --> 00:51:48,440 Vì vậy, trước khi chúng ta đi sâu vào một số mật mã và những điều được gọi là mảng, hãy để tôi 1160 00:51:48,440 --> 00:51:51,610 tạm dừng cho bất kỳ câu hỏi vì tôi cảm thấy như tôi thực sự loại lộn xộn một số 1161 00:51:51,610 --> 00:51:52,230 những chủ đề. 1162 00:51:52,230 --> 00:51:53,940 Vì vậy, hãy sửa chữa bây giờ nếu chúng ta có thể. 1163 00:51:53,940 --> 00:51:56,480 Vì vậy, chúng tôi chỉ nói chuyện về giá trị trả lại. 1164 00:51:56,480 --> 00:51:58,630 Chúng tôi nói về đối số. 1165 00:51:58,630 --> 00:52:02,330 Và chúng tôi đã nói về khái niệm này, mà chúng ta sẽ quay trở lại trong những tuần tới 1166 00:52:02,330 --> 00:52:07,140 đến, xem bộ nhớ như là một bó toàn bộ các xếp chồng lên nhau 1167 00:52:07,140 --> 00:52:08,540 khay, vậy để nói chuyện. 1168 00:52:08,540 --> 00:52:13,460 Từ phía dưới lên, như vậy mà mỗi khay được đặt trên stack đại diện cho 1169 00:52:13,460 --> 00:52:15,160 một chức năng mà hiện đang được gọi. 1170 00:52:17,970 --> 00:52:20,300 Bất kỳ câu hỏi nào? 1171 00:52:20,300 --> 00:52:22,890 Vì vậy, làm thế nào về - hãy để tôi thử hỏi một câu hỏi. 1172 00:52:22,890 --> 00:52:25,520 Tôi tiếp tục làm hư đó, nhưng bây giờ it's - you've tất cả nhìn thấy khuôn mặt của cậu bé. 1173 00:52:25,520 --> 00:52:27,020 Vì vậy, chúng tôi sẽ quay lại đó. 1174 00:52:27,020 --> 00:52:29,700 >> Vậy cho tôi hỏi một câu hỏi ở đây. 1175 00:52:29,700 --> 00:52:34,810 Hãy để tôi đơn giản hóa này trở lại với những gì nó đã được trước khi một số trước đó của chúng tôi Q & A. 1176 00:52:34,810 --> 00:52:41,730 Và thực tế là tăng có dấu ngoặc đơn mở, int number, đóng cửa 1177 00:52:41,730 --> 00:52:42,260 ngoặc đơn. 1178 00:52:42,260 --> 00:52:46,370 Int number đại diện cho điều gì? 1179 00:52:46,370 --> 00:52:47,250 [Không nghe được] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. Malan: Một lập luận. 1181 00:52:47,870 --> 00:52:50,732 Được rồi, nhưng một đối số là gì? 1182 00:52:50,732 --> 00:52:51,620 [Không nghe được] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. Malan: Xin lỗi, những gì? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Một cái gì đó bạn vượt qua. 1185 00:52:53,150 --> 00:52:53,570 DAVID J. Malan: Được rồi. 1186 00:52:53,570 --> 00:52:54,780 Vì vậy, một cái gì đó mà bạn vượt qua. 1187 00:52:54,780 --> 00:52:56,560 Và nói chung, nó chỉ là đầu vào. 1188 00:52:56,560 --> 00:52:59,860 Nếu bạn đang viết một chức năng và mục đích của chức năng đó trong cuộc sống là để làm 1189 00:52:59,860 --> 00:53:03,290 một chút gì đó khác nhau mỗi lần bạn sử dụng nó, sau đó là cách duy nhất cho 1190 00:53:03,290 --> 00:53:07,710 điều đó xảy ra sẽ thực sự có vẻ là để cung cấp cho nó với đầu vào để nó 1191 00:53:07,710 --> 00:53:10,180 có thể làm một cái gì đó khác nhau với đầu vào mà mỗi lần. 1192 00:53:10,180 --> 00:53:13,590 >> Vì vậy, bạn cần phải xác định hai điều khi một hàm có đầu vào. 1193 00:53:13,590 --> 00:53:17,240 Bạn cần xác định tên mà bạn muốn cung cấp cho đầu vào, hoàn toàn là 1194 00:53:17,240 --> 00:53:20,790 thuận tiện của riêng của bạn để bạn có thể đề cập đến nó trong các chức năng mà bạn 1195 00:53:20,790 --> 00:53:23,610 mình đang viết, như tôi đã làm ở đây ở dòng 32. 1196 00:53:23,610 --> 00:53:27,840 Nhưng bạn cũng cần phải xác định loại hình của nó bởi vì C là một ngôn ngữ lập trình 1197 00:53:27,840 --> 00:53:28,840 mà chỉ đòi hỏi 1198 00:53:28,840 --> 00:53:31,810 rằng nếu bạn muốn một biến, bạn có để bảo máy tính 1199 00:53:31,810 --> 00:53:32,790 kiểu dữ liệu đó là, 1200 00:53:32,790 --> 00:53:35,540 phần lớn để nó biết bao nhiêu bit 1201 00:53:35,540 --> 00:53:37,230 phân bổ cho biến đó. 1202 00:53:37,230 --> 00:53:38,600 Bởi vì nó có thể là sáu 1203 00:53:38,600 --> 00:53:39,990 xin lỗi, nó sẽ không là sáu. 1204 00:53:39,990 --> 00:53:41,050 Nó có thể là 16. 1205 00:53:41,050 --> 00:53:41,630 Nó có thể là 8. 1206 00:53:41,630 --> 00:53:44,410 Nó có thể là 32, thậm chí 64. 1207 00:53:44,410 --> 00:53:45,820 Tuy nhiên, máy tính cần phải biết. 1208 00:53:45,820 --> 00:53:49,110 Bây giờ int ở phía bên tay trái đại diện cho những gì, ngược lại? 1209 00:53:52,825 --> 00:53:53,780 [Không nghe được] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. Malan: đó là gì? 1211 00:53:54,570 --> 00:53:55,390 [Không nghe được] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. Malan: Các loại chức năng và, cụ thể hơn, 1213 00:53:57,920 --> 00:53:59,755 loại sản lượng của nó. 1214 00:53:59,755 --> 00:54:00,220 Đúng. 1215 00:54:00,220 --> 00:54:04,220 Vì vậy, trong khi các điều trong ngoặc đơn đại diện cho đầu vào của nó, nếu có, 1216 00:54:04,220 --> 00:54:06,640 điều bên trái đại diện cho đầu ra của nó. 1217 00:54:06,640 --> 00:54:10,560 Và trong trường hợp này, tăng dường như trả về int. 1218 00:54:10,560 --> 00:54:14,590 Và như vậy int là kiểu trả về của chức năng này. 1219 00:54:14,590 --> 00:54:16,090 >> Để trở về có nghĩa là gì? 1220 00:54:16,090 --> 00:54:19,810 Nghĩa đen, bạn sử dụng trở lại từ khóa. 1221 00:54:19,810 --> 00:54:24,640 Và sau đó nếu những gì bạn đang trở về bên phải của từ khóa là một 1222 00:54:24,640 --> 00:54:28,340 số nguyên, sau đó thực sự là phù hợp với những gì chúng tôi đã hứa. 1223 00:54:28,340 --> 00:54:31,110 Bạn không thể làm một cái gì đó như thế này - 1224 00:54:31,110 --> 00:54:32,280 hello, thế giới - 1225 00:54:32,280 --> 00:54:33,500 bởi vì đó là một chuỗi. 1226 00:54:33,500 --> 00:54:35,440 Rõ ràng nó không phải là một số nguyên. 1227 00:54:35,440 --> 00:54:40,450 Vì vậy, trong ngắn hạn, gánh nặng thực sự với chúng tôi, các lập trình viên, cụ thể như 1228 00:54:40,450 --> 00:54:44,730 những gì chúng ta đang trở về và sau đó thực sự đi về trả lại nó. 1229 00:54:44,730 --> 00:54:49,030 Và sau đó để làm cho rõ ràng hơn một chút bối cảnh 1230 00:54:49,030 --> 00:54:50,080 ở đó, ông một lần nữa. 1231 00:54:50,080 --> 00:54:51,060 Bối cảnh - 1232 00:54:51,060 --> 00:54:52,830 lớn bất ngờ tới trong thời điểm này chỉ là một. 1233 00:54:52,830 --> 00:54:57,720 Bối cảnh ở đây bây giờ là bộ nhớ máy tính của bạn, một lần nữa, một 1234 00:54:57,720 --> 00:54:59,070 gigabyte, hai gigabyte, bất cứ điều gì. 1235 00:54:59,070 --> 00:54:59,630 Có lẽ đó là nhiều hơn nữa. 1236 00:54:59,630 --> 00:55:00,540 Có lẽ đó là ít hơn. 1237 00:55:00,540 --> 00:55:03,750 Tuy nhiên, máy tính xem nó như là có phần khác nhau. 1238 00:55:03,750 --> 00:55:04,860 Một cái gì đó đi xuống. 1239 00:55:04,860 --> 00:55:06,020 Cái gì khác đi lên. 1240 00:55:06,020 --> 00:55:07,540 Các công cụ khác nhau đi ở giữa. 1241 00:55:07,540 --> 00:55:09,300 Và hôm nay, chúng tôi chỉ bắt đầu kể câu chuyện này. 1242 00:55:09,300 --> 00:55:11,130 >> Nhưng chúng tôi sẽ quay trở lại thời gian này. 1243 00:55:11,130 --> 00:55:15,000 Để bây giờ, mảnh duy nhất của bộ nhớ chúng ta thực sự quan tâm đến là phân khúc văn bản 1244 00:55:15,000 --> 00:55:17,160 bởi vì đó chỉ đại diện cho các zero và những người 1245 00:55:17,160 --> 00:55:18,460 Clang đã đưa ra cả. 1246 00:55:18,460 --> 00:55:21,570 Vì vậy, khi bạn chạy một lệnh vào bàn phím như a.out, hoặc bạn đôi 1247 00:55:21,570 --> 00:55:25,350 nhấp vào một biểu tượng trên Mac OS hoặc Windows, chương trình của bạn được tải từ ổ cứng 1248 00:55:25,350 --> 00:55:26,930 lái xe vào RAM. 1249 00:55:26,930 --> 00:55:30,850 Và nó ngồi phịch ở trên cùng của bộ nhớ RAM của máy tính của bạn, do đó, để nói chuyện. 1250 00:55:30,850 --> 00:55:35,470 Bây giờ trong khi đó, chương trình của bạn bắt đầu chạy và chính được gọi là trong 1251 00:55:35,470 --> 00:55:39,240 chương trình bạn đã viết hoặc chương trình Microsoft hay Apple đã viết, bất kỳ của nó 1252 00:55:39,240 --> 00:55:42,930 các biến địa phương kết thúc xuống ở dưới cùng của bộ nhớ máy tính của bạn. 1253 00:55:42,930 --> 00:55:46,490 Nhưng nếu chính các cuộc gọi một chức năng rằng chính nó đã biến hoặc 1254 00:55:46,490 --> 00:55:48,340 đối số, họ kết thúc ở trên nó. 1255 00:55:48,340 --> 00:55:50,670 Và nếu chức năng mà các cuộc gọi một cái gì đó, họ kết thúc ở trên nó, 1256 00:55:50,670 --> 00:55:51,840 ở trên nó, ở trên nó. 1257 00:55:51,840 --> 00:55:56,100 Và chỉ một lần một chức năng được thực hiện thực hiện không chồng khay, do đó, 1258 00:55:56,100 --> 00:55:58,320 để nói chuyện, bắt đầu để có được thấp hơn và thấp hơn. 1259 00:55:58,320 --> 00:56:03,370 Và đây là những gì sau đó, trong Tóm lại, giải thích lý do tại sao, khi bạn gọi khối lập phương - 1260 00:56:03,370 --> 00:56:04,660 hoặc bạn gọi tăng - 1261 00:56:04,660 --> 00:56:06,490 bạn đang đi qua trong một bản sao của giá trị. 1262 00:56:06,490 --> 00:56:09,840 Và điều đó có nghĩa những bức tranh là bạn đang nghĩa đen văn bản 1263 00:56:09,840 --> 00:56:14,540 số 1 ​​trong một phần khác của bộ nhớ, thay đổi 1 đến 2, trong trường hợp của 1264 00:56:14,540 --> 00:56:15,360 tăng - 1265 00:56:15,360 --> 00:56:17,450 hoặc một 8, trong trường hợp của khối lập phương - 1266 00:56:17,450 --> 00:56:21,450 và sau đó ném rằng bộ nhớ bỏ ngay khi tăng hoặc khối lập phương 1267 00:56:21,450 --> 00:56:23,410 trả về chức năng. 1268 00:56:23,410 --> 00:56:24,267 >> Câu hỏi. 1269 00:56:24,267 --> 00:56:25,517 [Không nghe được] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. Malan: Trường hợp các biến toàn cầu được lưu trữ trong những gì 1271 00:56:29,970 --> 00:56:32,960 hiện đang được gọi là khởi tạo dữ liệu hoặc dữ liệu chưa được khởi tạo. 1272 00:56:32,960 --> 00:56:35,900 Sự khác biệt là, nếu bạn có một biến toàn cầu, và bạn gán cho nó 1273 00:56:35,900 --> 00:56:39,530 ngay lập tức một giá trị với dấu bằng, kết thúc ở đầu trang. 1274 00:56:39,530 --> 00:56:43,390 Và nếu bạn chỉ nói int x dấu chấm phẩy không có giá trị, nó kết thúc tăng nhẹ 1275 00:56:43,390 --> 00:56:46,670 trong bộ nhớ RAM thấp hơn chỉ đơn giản là theo quy ước. 1276 00:56:46,670 --> 00:56:49,308 Các câu hỏi khác. 1277 00:56:49,308 --> 00:56:49,750 Được rồi. 1278 00:56:49,750 --> 00:56:53,040 >> Vì vậy, hình ảnh này sẽ quay trở lại khi chúng ta mạnh mẽ hơn với những gì chúng ta có thể làm 1279 00:56:53,040 --> 00:56:53,830 với máy tính. 1280 00:56:53,830 --> 00:56:58,790 Nhưng hiện nay, chúng ta hãy có một đoạn giới thiệu ngắn gọn về mật mã học, một loại hình cụ thể của 1281 00:56:58,790 --> 00:57:01,910 mật mã mà không giải quyết tất cả các vấn đề của thế giới, nhưng không giải quyết 1282 00:57:01,910 --> 00:57:02,480 một số người trong số họ. 1283 00:57:02,480 --> 00:57:06,090 Trong trường hợp này ở đây, chúng tôi có một cái gì đó gọi là khóa bí mật mật mã. 1284 00:57:06,090 --> 00:57:10,430 Và mật mã khóa bí mật, như tên cho thấy, nguồn gốc an ninh của mình 1285 00:57:10,430 --> 00:57:11,330 từ một bí mật. 1286 00:57:11,330 --> 00:57:14,720 Vì vậy, ví dụ, nếu bạn đang ở trường lớp và bạn đang đi qua một 1287 00:57:14,720 --> 00:57:18,040 thư ít bí mật tình yêu trai hoặc con gái bạn đang nghiền trên - nếu bạn 1288 00:57:18,040 --> 00:57:20,820 muốn vượt qua thông qua khán giả, có thể bạn sẽ không viết 1289 00:57:20,820 --> 00:57:24,120 một ghi chú bằng tiếng Anh hoặc bất kỳ ngôn ngữ mẹ đẻ của bạn, thay vào đó, bạn 1290 00:57:24,120 --> 00:57:25,800 có thể mã hóa nó. 1291 00:57:25,800 --> 00:57:27,820 Hoặc bạn chỉ có thể gửi một tin nhắn văn bản những ngày này. 1292 00:57:27,820 --> 00:57:30,310 Nhưng bạn thực sự có thể vượt qua chúng một lưu ý trong suốt lớp học. 1293 00:57:30,310 --> 00:57:33,820 Và để làm điều này an toàn, theo cách như vậy mà bạn bè và giáo viên 1294 00:57:33,820 --> 00:57:36,820 không biết những gì bạn đang viết, bạn có thể đi lên với một khá đơn giản 1295 00:57:36,820 --> 00:57:37,800 thuật toán - 1296 00:57:37,800 --> 00:57:39,290 trẻ mặc dù bạn có thể có - 1297 00:57:39,290 --> 00:57:40,780 chỉ tranh giành từ. 1298 00:57:40,780 --> 00:57:44,390 Vì vậy, thay vì viết một, bạn có thể viết B. Thay vì B, bạn có thể viết 1299 00:57:44,390 --> 00:57:46,670 C. Thay vì C, bạn có thể viết D, và vv. 1300 00:57:46,670 --> 00:57:50,020 Hoặc bạn có thể đi lên với một bản dịch tinh vi của các chữ cái 1301 00:57:50,020 --> 00:57:51,300 chữ cái khác nhau. 1302 00:57:51,300 --> 00:57:55,440 Tuy nhiên, nắm bắt được trai hay gái mà bạn đang gửi ghi chú này cần phải 1303 00:57:55,440 --> 00:57:56,850 biết điều gì đó. 1304 00:57:56,850 --> 00:57:59,620 Đó là những gì, rõ ràng? 1305 00:57:59,620 --> 00:58:01,400 Giống như, bí mật của bạn là gì. 1306 00:58:01,400 --> 00:58:04,620 Giống như, rằng ánh xạ giữa A và B và Cs và Ds là gì? 1307 00:58:04,620 --> 00:58:08,780 Là nó chỉ thêm một, do đó, để nói chuyện, để mỗi người trong số các chữ cái để đi từ 1308 00:58:08,780 --> 00:58:09,730 A đến B, B đến C? 1309 00:58:09,730 --> 00:58:11,350 Là nó phức tạp hơn? 1310 00:58:11,350 --> 00:58:16,450 Vì vậy, bạn và lòng của bạn cần phải có thông tin bí mật này. 1311 00:58:16,450 --> 00:58:18,170 Nhưng có loại catch-22 ở đây. 1312 00:58:18,170 --> 00:58:20,760 Nếu đây là lần đầu tiên bạn đang gửi bức thư tình này thông qua các 1313 00:58:20,760 --> 00:58:25,590 lớp học, làm thế nào là trai hay con gái sẽ biết những gì bí mật, ngay cả là? 1314 00:58:25,590 --> 00:58:28,450 Vì vậy, bí mật khóa mật không giải quyết tất cả các vấn đề của thế giới. 1315 00:58:28,450 --> 00:58:30,490 Và đó thực sự là một mối quan hệ mà chúng ta sẽ trở lại đối với 1316 00:58:30,490 --> 00:58:31,370 cuối học kỳ. 1317 00:58:31,370 --> 00:58:35,970 >> Tương tự như vậy, không ai trong chúng tôi có thể gửi một - 1318 00:58:35,970 --> 00:58:39,453 tương tự như vậy, hầu hết chúng ta không biết một người nào đó mà các công trình, ví dụ, 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Tuy nhiên, nhiều người trong chúng ta có thể mua các công cụ tại Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 Và chúng ta đã được dạy để giả định rằng những thương mại điện tử 1322 00:58:45,670 --> 00:58:47,060 giao dịch được an toàn. 1323 00:58:47,060 --> 00:58:47,210 Phải không? 1324 00:58:47,210 --> 00:58:49,310 URL có thể https. 1325 00:58:49,310 --> 00:58:51,590 Có có thể ngớ ngẩn một chút biểu tượng ổ khóa ở đâu đó. 1326 00:58:51,590 --> 00:58:54,680 Có một số loại mật mã bảo mật thông tin thẻ tín dụng của bạn 1327 00:58:54,680 --> 00:58:56,980 giữa bạn và Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Chưa hết, nếu mật mã liên quan đến việc biết một số bí mật, nhưng tôi không 1329 00:59:00,410 --> 00:59:03,330 biết bất cứ ai tại Amazon, và tôi đã chắc chắn không bố trí bất kỳ loại 1330 00:59:03,330 --> 00:59:07,350 bí mật với một người nào đó tại Amazon, như thế nào là máy tính của tôi hay trình duyệt của tôi làm điều này? 1331 00:59:07,350 --> 00:59:10,100 Vâng, hoá ra có các loại mật mã hoàn toàn để giải quyết 1332 00:59:10,100 --> 00:59:10,740 vấn đề đó. 1333 00:59:10,740 --> 00:59:13,610 Nhưng ngày hôm nay, chúng ta sẽ tập trung vào đơn giản, nơi bạn có thể sắp xếp 1334 00:59:13,610 --> 00:59:18,480 ứng trước cho biết một số bí mật, như cộng thêm 1 hoặc lập bản đồ một số giữa A và B. 1335 00:59:18,480 --> 00:59:20,710 >> Và quá trình mật mã nói chung liên quan đến việc này. 1336 00:59:20,710 --> 00:59:23,550 Bạn có một số văn bản đơn giản, được mô tả ở đây ở bên trái. 1337 00:59:23,550 --> 00:59:26,260 Bạn chạy nó thông qua một số loại thuật toán hoặc thủ tục 1338 00:59:26,260 --> 00:59:27,670 để mã hóa nó. 1339 00:59:27,670 --> 00:59:31,390 Có lẽ đó chỉ A trở thành B, B trở thành C. Và sau đó bạn kết thúc với 1340 00:59:31,390 --> 00:59:32,260 thuật toán mã hóa văn bản. 1341 00:59:32,260 --> 00:59:36,450 Trong khi đó, một khi lòng của bạn nhận được lưu ý bí mật, anh ta hoặc cô ấy có để sau đó 1342 00:59:36,450 --> 00:59:39,950 giải mã nó bằng cách thường đảo ngược rằng thuật toán để có được 1343 00:59:39,950 --> 00:59:41,640 sao các văn bản đơn giản. 1344 00:59:41,640 --> 00:59:43,860 Hiện nay có hiện thân vật lý của điều này. 1345 00:59:43,860 --> 00:59:46,720 Ví dụ, đây là một chút nhẫn giải mã bí mật. 1346 00:59:46,720 --> 00:59:50,060 Và đây là một chiếc nhẫn trong ý nghĩa rằng có hai quay ở đây. 1347 00:59:50,060 --> 00:59:53,630 Trên các thiết bị ngoại vi bên ngoài của điều này, có chữ cái từ A đến Z, 1348 00:59:53,630 --> 00:59:55,110 mặc dù họ đang ở trong thứ tự ngẫu nhiên. 1349 00:59:55,110 --> 00:59:58,410 Và bên trong, có thực sự là một số con số, như vậy mà với điều này 1350 00:59:58,410 --> 01:00:02,940 nhẫn, loại có thể biến bên ngoài nhưng không phải bên trong để xếp hàng 1351 01:00:02,940 --> 01:00:04,110 số với các chữ cái. 1352 01:00:04,110 --> 01:00:08,290 Và trong clip mà bạn đang về để xem một số trong đó bạn có thể đã thấy 24/7 1353 01:00:08,290 --> 01:00:11,120 xung quanh mùa Giáng sinh từ một bộ phim được gọi là A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Bạn sẽ thấy rằng Ralphie bé nhỏ đã mong muốn tìm ra những gì mồ côi 1355 01:00:16,050 --> 01:00:19,810 Thông điệp bí mật của Annie là ông đã được truyền đạt, tôi nghĩ, trong 1356 01:00:19,810 --> 01:00:22,810 hình thức thông điệp bằng số serial trên một hộp. 1357 01:00:22,810 --> 01:00:26,760 Và bạn phải tích lũy tất cả các thẻ đi kèm 1358 01:00:26,760 --> 01:00:27,480 trong hộp ngũ cốc. 1359 01:00:27,480 --> 01:00:28,320 Bạn phải gửi bằng bưu điện. 1360 01:00:28,320 --> 01:00:31,060 Bạn đã có để lấy lại chiếc nhẫn giải mã bí mật, để bạn cuối cùng có thể tìm 1361 01:00:31,060 --> 01:00:34,190 ra lập bản đồ giữa các chữ cái và số, 1362 01:00:34,190 --> 01:00:35,420 hoặc chữ cái và chữ. 1363 01:00:35,420 --> 01:00:39,790 Vì vậy, tôi cung cấp cho bạn đoạn clip ngắn này từ A Christmas Story để thúc đẩy pset 2 và 1364 01:00:39,790 --> 01:00:42,340 thảo luận của chúng tôi, trong một thời điểm, các mảng. 1365 01:00:42,340 --> 01:00:43,773 Vì vậy, ở đây chúng tôi có Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [VIDEO PLAYBACK] 1367 01:00:44,126 --> 01:00:47,470 -Be được biết là tất cả và bệnh lặt vặt mà Ralph Parker hướng bổ nhiệm 1368 01:00:47,470 --> 01:00:50,690 thành viên của vòng bí mật nhỏ Orphan Annie và được hưởng tất cả 1369 01:00:50,690 --> 01:00:53,500 danh dự và lợi ích xảy ra chúng. 1370 01:00:53,500 --> 01:00:56,040 -Ký, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Countersigned, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 Bằng mực! 1373 01:01:00,150 --> 01:01:02,910 Danh dự và lợi ích, đã ở độ tuổi chín. 1374 01:01:09,970 --> 01:01:10,730 Nào, chúng ta hãy về với nó. 1375 01:01:10,730 --> 01:01:15,000 Tôi không cần tất cả những nhạc jazz về buôn lậu và cướp biển. 1376 01:01:15,000 --> 01:01:17,624 Listen tối mai cho các cuộc phiêu lưu kết luận của The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Bây giờ là thời gian cho thông điệp bí mật của Annie cho bạn thành viên 1379 01:01:23,380 --> 01:01:25,670 vòng bí mật. 1380 01:01:25,670 --> 01:01:30,260 Hãy nhớ rằng, trẻ em, thành viên duy nhất của vòng bí mật của Annie có thể giải mã 1381 01:01:30,260 --> 01:01:31,660 Thông điệp bí mật của Annie. 1382 01:01:31,660 --> 01:01:36,230 Hãy nhớ rằng, Annie là tùy thuộc vào bạn. 1383 01:01:36,230 --> 01:01:38,720 Đặt chân của bạn B2. 1384 01:01:38,720 --> 01:01:41,040 Đây là tin nhắn. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Tôi đang ở trong cuộc họp bí mật đầu tiên của tôi. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre là trong giọng nói tuyệt vời đêm nay. 1389 01:01:51,700 --> 01:01:54,890 Tôi có thể nói rằng tin nhắn tối nay là thực sự quan trọng. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Đó là một tin nhắn từ Annie mình. 1392 01:01:58,590 --> 01:01:59,840 Hãy nhớ rằng, không nói cho ai biết. 1393 01:02:04,570 --> 01:02:08,750 -90 Giây sau đó, tôi đang ở trong căn phòng duy nhất trong nhà, nơi một cậu bé chín 1394 01:02:08,750 --> 01:02:12,980 có thể ngồi trong sự riêng tư và giải mã. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. Tôi đã đi đến tiếp theo. 1396 01:02:17,130 --> 01:02:20,330 E. Từ đầu tiên là được. 1397 01:02:20,330 --> 01:02:22,670 S. Nó được dễ dàng hơn. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, thôi nào, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Tôi phải đi đây. 1401 01:02:28,430 --> 01:02:30,350 -Tôi sẽ xuống ngay, ma. 1402 01:02:30,350 --> 01:02:33,720 Gee whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Hãy chắc chắn để. 1404 01:02:38,270 --> 01:02:40,000 Hãy chắc chắn với những gì? 1405 01:02:40,000 --> 01:02:42,105 Ít Orphan Annie cố gắng để nói là gì? 1406 01:02:42,105 --> 01:02:43,095 Hãy chắc chắn với những gì? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy đã có để đi. 1409 01:02:44,580 --> 01:02:45,570 Bạn sẽ vui lòng đi ra? 1410 01:02:45,570 --> 01:02:46,560 -Tất cả các quyền, ma. 1411 01:02:46,560 --> 01:02:48,540 Tôi sẽ ra ngay. 1412 01:02:48,540 --> 01:02:50,580 -Tôi đã nhận được gần hơn. 1413 01:02:50,580 --> 01:02:52,550 Sự căng thẳng là khủng khiếp. 1414 01:02:52,550 --> 01:02:53,355 Đó là gì? 1415 01:02:53,355 --> 01:02:56,315 Số phận của hành tinh có thể treo trong sự cân bằng. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy có để đi. 1418 01:02:59,165 --> 01:03:02,310 -Ta sẽ ra ngay, buồn thì thôi. 1419 01:03:02,310 --> 01:03:04,000 Gee, gần như ở đó. 1420 01:03:04,000 --> 01:03:05,180 Ngón tay của tôi đã bay. 1421 01:03:05,180 --> 01:03:07,150 Tâm trí của tôi là một cái bẫy thép. 1422 01:03:07,150 --> 01:03:08,790 Mỗi lỗ chân lông rung. 1423 01:03:08,790 --> 01:03:10,040 Nó đã gần như rõ ràng. 1424 01:03:10,040 --> 01:03:13,400 Có, có, có, có. 1425 01:03:13,400 --> 01:03:18,960 Hãy chắc chắn để uống Ovaltine của bạn. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Thương mại dể thương? 1428 01:03:28,200 --> 01:03:29,640 Con trai của một bitch. 1429 01:03:29,640 --> 01:03:33,340 [END phát lại video] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. Malan: Như vậy, có chúng tôi có mật mã. 1431 01:03:36,040 --> 01:03:39,670 Vì vậy, làm thế nào trong một máy tính, chúng ta có thể đi về việc thực hiện hoặc 1432 01:03:39,670 --> 01:03:40,950 đại diện cho những thứ như thế này? 1433 01:03:40,950 --> 01:03:44,430 Vâng, chúng ta cần một cách để thể hiện mình nhiều hơn một chút linh hoạt hơn 1434 01:03:44,430 --> 01:03:46,420 biến của chúng tôi vậy, đến nay đã cho phép. 1435 01:03:46,420 --> 01:03:47,370 Chúng tôi đã có ints. 1436 01:03:47,370 --> 01:03:48,380 Chúng tôi đã có ký tự. 1437 01:03:48,380 --> 01:03:50,790 Chúng tôi đã có phao nổi và tăng gấp đôi và một vài người khác. 1438 01:03:50,790 --> 01:03:55,050 Nhưng những miếng cá nhân của bộ nhớ mà không thực sự cho phép chúng ta 1439 01:03:55,050 --> 01:03:58,010 thể hiện những thứ như từ và câu và cụm từ. 1440 01:03:58,010 --> 01:04:00,200 Thật vậy, chúng tôi đã gọi là chuỗi những điều như vậy. 1441 01:04:00,200 --> 01:04:03,650 Nhưng chúng tôi đã hứa rằng điều này thực sự chỉ là một sự đơn giản hóa trong CS50 1442 01:04:03,650 --> 01:04:07,020 thư viện mà chúng tôi đang có ý định vỏ trở lại. 1443 01:04:07,020 --> 01:04:08,970 >> Và do đó, chúng ta hãy bắt đầu để làm điều đó ở đây. 1444 01:04:08,970 --> 01:04:11,130 Hãy để tôi đi trước và mở một tập tin - 1445 01:04:11,130 --> 01:04:13,770 tất cả các file có sẵn như trực tuyến thông thường - 1446 01:04:13,770 --> 01:04:19,120 gọi là array.c để giải quyết một vấn đề không liên quan đến chuỗi nhưng mà vẽ 1447 01:04:19,120 --> 01:04:23,040 hình ảnh ở đây về làm thế nào chúng ta có thể sử dụng một cái gì đó được gọi là một mảng. 1448 01:04:23,040 --> 01:04:25,530 Một mảng là một kiểu dữ liệu. 1449 01:04:25,530 --> 01:04:31,320 Đó là một kiểu của biến, các loại, có nhiều loại dữ liệu nhỏ hơn 1450 01:04:31,320 --> 01:04:34,150 bên trong của nó trở lại trở lại để sao lưu để sao lưu. 1451 01:04:34,150 --> 01:04:37,700 Vì vậy, ví dụ, nếu chúng ta muốn viết một chương trình nhỏ cung cấp cho bạn 1452 01:04:37,700 --> 01:04:42,110 bài kiểm tra trung bình cho một khóa học như 50 có hai câu đố, bạn có thể rất dễ dàng 1453 01:04:42,110 --> 01:04:45,170 viết chương trình này - thậm chí trên một số nguyên liệu tuần trước - 1454 01:04:45,170 --> 01:04:47,770 bằng cách sử dụng getInt và một vài biến. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, và nó khá đơn giản. 1456 01:04:51,920 --> 01:04:55,930 Đó là có thể 10, 20 dòng mã, tối đa, để thực hiện một chương trình yêu cầu 1457 01:04:55,930 --> 01:05:01,170 người sử dụng cho hai điểm bài kiểm tra và sau đó tính trung bình của họ bằng cách thêm chúng 1458 01:05:01,170 --> 01:05:03,850 với nhau, chia hai, và sau đó in kết quả. 1459 01:05:03,850 --> 01:05:06,380 Chúng tôi có thể có thể làm điều đó khá dễ dàng bây giờ sau khi 1460 01:05:06,380 --> 01:05:07,510 một số số phút. 1461 01:05:07,510 --> 01:05:11,005 >> Nhưng vấn đề là giả sử rằng 50 có ba câu đố hoặc bốn. 1462 01:05:11,005 --> 01:05:13,510 Giả sử rằng bạn muốn sử dụng chương trình tương tự cho một lớp học mà có 1463 01:05:13,510 --> 01:05:14,850 hàng tuần các câu đố. 1464 01:05:14,850 --> 01:05:16,610 Hãy suy nghĩ về một lớp học mà đã hàng tuần các câu đố. 1465 01:05:16,610 --> 01:05:20,610 Nếu có như 16 hoặc tuần trong một học kỳ, bây giờ bạn có 16 biến 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Ngay sau khi bạn bắt đầu nhìn thấy điều này dự phòng, sao chép và dán 1468 01:05:27,560 --> 01:05:31,390 mã, nó nên bắt đầu để làm cho bạn muốn có một cách tốt hơn. 1469 01:05:31,390 --> 01:05:33,930 Và may mắn thay, vì các mảng, có. 1470 01:05:33,930 --> 01:05:34,980 Vì vậy, hãy làm điều này. 1471 01:05:34,980 --> 01:05:38,430 Trước tiên, hãy để tôi giới thiệu một điều rất đơn giản mà chúng tôi đã không được sử dụng cho đến nay, 1472 01:05:38,430 --> 01:05:40,140 nhưng bạn sẽ thấy nó đôi khi trong mã. 1473 01:05:40,140 --> 01:05:42,360 Đây là những gì thường được gọi là một hằng số. 1474 01:05:42,360 --> 01:05:45,790 Vì vậy, nó là một hằng số trong ý nghĩa rằng giá trị này không bao giờ thay đổi. 1475 01:05:45,790 --> 01:05:49,210 Các quy ước của con người khi tạo ra một hằng số là sử dụng tất cả vốn 1476 01:05:49,210 --> 01:05:51,940 chữ cái, chỉ cần để nó thực sự nổi bật trong mã của bạn. 1477 01:05:51,940 --> 01:05:55,960 Và từ khóa đặc biệt mà bạn sử dụng trong C # define. 1478 01:05:55,960 --> 01:06:00,250 Vì vậy, nếu bạn nói # xác định, sau đó một không gian, sau đó là từ mà bạn muốn sử dụng cho 1479 01:06:00,250 --> 01:06:03,260 tên của hằng số, và sau đó giá trị của các hằng số. 1480 01:06:03,260 --> 01:06:06,180 Vì vậy, thông báo, đây là khác nhau do chuyển giao một cái gì đó cho một biến. 1481 01:06:06,180 --> 01:06:07,020 Không có dấu bằng. 1482 01:06:07,020 --> 01:06:08,240 Có dấu chấm phẩy. 1483 01:06:08,240 --> 01:06:11,410 Đây là những gì thường được biết đến như là một chỉ thị tiền xử lý, nhưng nhiều hơn về 1484 01:06:11,410 --> 01:06:12,210 rằng một thời điểm khác. 1485 01:06:12,210 --> 01:06:18,540 >> Để bây giờ, điều này tạo ra một giá trị không thay đổi được gọi là câu đố thực tế có 1486 01:06:18,540 --> 01:06:19,940 số giá trị là 2. 1487 01:06:19,940 --> 01:06:24,020 Vì vậy, bất cứ nơi nào bạn nhìn thấy các câu đố, câu đố, bài kiểm tra trong suốt tập tin này, đó là 1488 01:06:24,020 --> 01:06:25,410 chỉ là số 2. 1489 01:06:25,410 --> 01:06:28,100 Bây giờ, nếu tôi nhìn vào chính hiện nay, chúng ta hãy xem cách làm việc này. 1490 01:06:28,100 --> 01:06:29,500 Lúc đầu, có vẻ một chút khó hiểu. 1491 01:06:29,500 --> 01:06:31,340 Nhưng đó là tất cả các công cụ từ một tuần. 1492 01:06:31,340 --> 01:06:32,710 Yêu cầu người dùng cho các lớp. 1493 01:06:32,710 --> 01:06:33,630 Làm thế nào để chúng ta làm điều này? 1494 01:06:33,630 --> 01:06:35,470 Vâng, trong dòng 22 - 1495 01:06:35,470 --> 01:06:37,210 đây thực sự là một phần ngon ngọt - 1496 01:06:37,210 --> 01:06:40,960 Tôi tuyên bố một phao, nhưng không phải chỉ một phao duy nhất. 1497 01:06:40,960 --> 01:06:44,620 Tôi tuyên bố, đúng hơn, một mảng của các giá trị dấu chấm động. 1498 01:06:44,620 --> 01:06:49,100 Rằng biến sẽ được gọi là lớp, như ngụ ý ở đây. 1499 01:06:49,100 --> 01:06:53,080 Nhưng mảnh duy nhất của cú pháp mới sau đó là những dấu ngoặc vuông, thực tế 1500 01:06:53,080 --> 01:06:59,350 mà tôi đã nói điểm nổi và sau đó khung mở và sau đó một số. 1501 01:06:59,350 --> 01:07:02,460 Thông báo, nếu điều này là một hằng số, đây là giống như chúng tôi đã làm điều này. 1502 01:07:02,460 --> 01:07:06,890 Điều này có nghĩa là hey máy tính, cho tôi hai phao, và chúng ta hãy chung gọi 1503 01:07:06,890 --> 01:07:08,220 cho điểm. 1504 01:07:08,220 --> 01:07:11,920 Điều này là trái ngược với một quá trình tẻ nhạt như thế này nhiều hơn nữa. 1505 01:07:11,920 --> 01:07:15,850 Float grade1, nổi grade2, và vv. 1506 01:07:15,850 --> 01:07:20,010 Vì vậy, một mảng cho phép chúng tôi thực hiện ý tưởng này nhưng ít hơn nhiều cẩu thả, trong 1507 01:07:20,010 --> 01:07:24,630 như vậy một cách mà chúng ta có thể viết một dòng mã thay vì, nói, 16 của một 16 1508 01:07:24,630 --> 01:07:25,740 tuần học kỳ. 1509 01:07:25,740 --> 01:07:29,950 Vì vậy, tôi không muốn cứng mã 2 bởi vì nếu bạn nghĩ về điều này 1510 01:07:29,950 --> 01:07:34,160 một cách hợp lý - cho rằng năm tới CS50 thay đổi đến 3 câu đố thay vì. 1511 01:07:34,160 --> 01:07:35,510 Và tôi đã có số 2. 1512 01:07:35,510 --> 01:07:36,600 Tôi đã có số 2 ở đây. 1513 01:07:36,600 --> 01:07:37,580 Tôi đã có số 2 ở đây. 1514 01:07:37,580 --> 01:07:38,560 Tôi đã có số 2 ở đây. 1515 01:07:38,560 --> 01:07:43,180 Nó trở nên rất tẻ nhạt và rất dễ dàng để vít lên và vô tình thay đổi 1516 01:07:43,180 --> 01:07:47,690 một giá trị 3 và bỏ lỡ một số giá trị khác 2. 1517 01:07:47,690 --> 01:07:52,460 Vì vậy, tôi đang đi để thay vào đó trừu tượng này đi và sử dụng hằng số này, như của nó 1518 01:07:52,460 --> 01:07:54,120 tên gợi ý, không bao giờ thay đổi. 1519 01:07:54,120 --> 01:07:57,710 Và bây giờ, không có vấn đề cho dù chúng ta có khác nhau câu đố năm nay hoặc năm sau, tôi 1520 01:07:57,710 --> 01:08:01,210 chỉ cần có để thay đổi nó ở một nơi, lên đây ở đầu trang. 1521 01:08:01,210 --> 01:08:02,720 >> Vì vậy, đó là tất cả các hằng số. 1522 01:08:02,720 --> 01:08:08,680 Trong khi đó, tính năng khái niệm mới là của một mảng. 1523 01:08:08,680 --> 01:08:14,660 Vì vậy, các dấu ngoặc vuông cho tôi này nổi nhiều và cho phép tôi chung 1524 01:08:14,660 --> 01:08:16,630 gọi cho điểm ở đây. 1525 01:08:16,630 --> 01:08:17,990 Vì vậy, bây giờ chúng ta hãy xem những gì tôi sẽ làm. 1526 01:08:17,990 --> 01:08:20,359 Trong dòng 24 là sự khởi đầu của một vòng lặp for. 1527 01:08:20,359 --> 01:08:22,260 Điều này là thực sự không có gì lạ mắt. 1528 01:08:22,260 --> 01:08:25,060 Nó chỉ sử dụng câu đố thay vì một số mã hóa cứng. 1529 01:08:25,060 --> 01:08:27,790 Nhưng không có gì trí tuệ khác nhau có từ tuần trước. 1530 01:08:27,790 --> 01:08:29,040 Đây chỉ là printf. 1531 01:08:29,040 --> 01:08:35,490 Vì vậy, printf ("bài kiểm tra số% d% d") bởi vì tôi chỉ muốn in ra cho tôi bài kiểm tra 1532 01:08:35,490 --> 01:08:38,050 số một trong hai và sau đó hai hai. 1533 01:08:38,050 --> 01:08:39,850 Vì vậy, đây hoàn toàn là một điều thẩm mỹ. 1534 01:08:39,850 --> 01:08:42,500 Nhưng phần thú vị bây giờ là ở dòng 27. 1535 01:08:42,500 --> 01:08:48,310 Để điền vào một trong hai giữ chỗ với một floating-point 1536 01:08:48,310 --> 01:08:51,029 giá trị, bạn lại sử dụng dấu ngoặc vuông. 1537 01:08:51,029 --> 01:08:55,620 Trong trường hợp này, tôi đang sử dụng i bởi vì điều này cho vòng lặp đã bắt đầu với tôi bằng 1538 01:08:55,620 --> 01:08:57,560 những gì giá trị, rõ ràng không? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Vì vậy, trên phiên đầu tiên của vòng lặp này, nó như là mặc dù tôi 1541 01:09:01,350 --> 01:09:02,689 đã viết điều này trong mã. 1542 01:09:02,689 --> 01:09:05,580 Nhưng trên lặp thứ hai của vòng lặp này, nó là như thể tôi 1543 01:09:05,580 --> 01:09:07,750 đã viết này trong mã của tôi. 1544 01:09:07,750 --> 01:09:10,750 Tuy nhiên, thực tế là tôi đang sử dụng một biến là hoàn hảo bởi vì, như tên gọi 1545 01:09:10,750 --> 01:09:14,300 cho thấy, nó thay đổi giá trị của nó trên mỗi iteration. 1546 01:09:14,300 --> 01:09:17,370 Vì vậy, tôi điền vào mảng này một chỗ tại một thời điểm. 1547 01:09:17,370 --> 01:09:18,910 Mảng này trông như thế nào? 1548 01:09:18,910 --> 01:09:21,430 Vâng, lý do tôi vẽ hình chữ nhật này siêu đơn giản trên màn hình ở đây 1549 01:09:21,430 --> 01:09:23,350 trước đây là vì lý do này. 1550 01:09:23,350 --> 01:09:27,279 Một mảng là một đoạn bộ nhớ tiếp theo là một đoạn bộ nhớ, 1551 01:09:27,279 --> 01:09:30,109 tiếp theo là một đoạn bộ nhớ, và vv. 1552 01:09:30,109 --> 01:09:35,260 Vì vậy, nếu mảng của tôi là kích thước 2, trong trường hợp này đây, tất cả những gì tôi sẽ được làm bằng cách 1553 01:09:35,260 --> 01:09:37,590 gõ điểm số của bài kiểm tra của tôi, giống như ở đây. 1554 01:09:37,590 --> 01:09:39,430 Tôi nhận được 100 ngày này. 1555 01:09:39,430 --> 01:09:42,020 Và sau đó tôi có một 99 ngày này. 1556 01:09:42,020 --> 01:09:46,040 Sau đó, bộ nhớ này có thể thậm chí không được sử dụng bởi vì tôi đã chỉ yêu cầu 1557 01:09:46,040 --> 01:09:48,689 máy tính cho một loạt các kích thước 2. 1558 01:09:48,689 --> 01:09:50,180 Những hình vuông là vẫn còn đó. 1559 01:09:50,180 --> 01:09:50,340 Phải không? 1560 01:09:50,340 --> 01:09:52,500 Bạn vẫn có 2 GB RAM, thậm chí nếu bạn chỉ 1561 01:09:52,500 --> 01:09:53,979 yêu cầu hai phao. 1562 01:09:53,979 --> 01:09:58,710 Vì vậy, ý tưởng đằng sau mảng là máy tính chỉ mất một đoạn bộ nhớ 1563 01:09:58,710 --> 01:10:03,230 và sau đó phân chia lại các phần nhỏ hơn để sao lưu để sao lưu để sao lưu. 1564 01:10:03,230 --> 01:10:04,740 Và đó là tất cả các mảng. 1565 01:10:04,740 --> 01:10:09,080 Đó là một đoạn tiếp giáp của bộ nhớ, bên trong mà bạn có thể đặt mọi thứ. 1566 01:10:09,080 --> 01:10:12,400 >> Bây giờ điều này xảy ra sau đó làm chỉ là một số số học nhàm chán. 1567 01:10:12,400 --> 01:10:16,170 Nếu tôi di chuyển xuống đây, đây là nơi mà tôi sau đó lặp qua mảng. 1568 01:10:16,170 --> 01:10:19,410 Tôi đi lên với tổng của tất cả các giá trị trong mảng. 1569 01:10:19,410 --> 01:10:22,390 Và sau đó tôi sử dụng chức năng quanh đây để thực sự làm các 1570 01:10:22,390 --> 01:10:23,940 tổng hợp chia cho các câu đố. 1571 01:10:23,940 --> 01:10:27,450 Nhưng hãy để tôi vẫy tay của tôi lúc đó là sắp xếp của số học đủ cho bây giờ. 1572 01:10:27,450 --> 01:10:30,010 Tuy nhiên, tất cả những gì làm cho tôi cuối cùng là tính toán trung bình. 1573 01:10:30,010 --> 01:10:33,640 Bài kiểm tra vì vậy đầu tiên cộng với bài kiểm tra thứ hai, chia cho 2, và sau đó in ấn 1574 01:10:33,640 --> 01:10:34,700 nó ra như là một int. 1575 01:10:34,700 --> 01:10:39,030 >> Nhưng chúng ta hãy chuyển sang một ví dụ khác nhau gọi là string1, 1576 01:10:39,030 --> 01:10:42,370 trong đó vẽ ra một hình ảnh tương tự nhưng sử dụng chuỗi. 1577 01:10:42,370 --> 01:10:45,550 Hãy để tôi đi trước và đơn giản hóa này chỉ là một thời điểm. 1578 01:10:45,550 --> 01:10:48,340 Và tha thứ cho thụt đầu dòng cho bây giờ. 1579 01:10:48,340 --> 01:10:52,280 Thông báo tại dòng 19 của ví dụ này, tôi nhận được một chuỗi từ người sử dụng. 1580 01:10:52,280 --> 01:10:55,780 Nhưng hãy chú ý tiếp theo những gì tôi đang làm trong các dòng 22 trở đi. 1581 01:10:55,780 --> 01:11:00,260 Tôi đang thực sự lặp lại từ i đến - và đây là một thủ thuật mới - 1582 01:11:00,260 --> 01:11:02,730 strlen, chuỗi dài. 1583 01:11:02,730 --> 01:11:07,010 Đây là một chức năng mà đi kèm với C rằng nếu bạn vượt qua nó một chuỗi, nó cho 1584 01:11:07,010 --> 01:11:08,950 bạn bao nhiêu ký tự trong chuỗi đó. 1585 01:11:08,950 --> 01:11:09,440 Đó là tất cả. 1586 01:11:09,440 --> 01:11:12,520 Thực tế là nó là strlen thay vì chuỗi dài chỉ vì nó là 1587 01:11:12,520 --> 01:11:13,040 gọn gàng hơn. 1588 01:11:13,040 --> 01:11:17,100 30 năm trước, người thích để viết những điều càng ngắn gọn càng tốt. 1589 01:11:17,100 --> 01:11:19,080 Vì vậy, chúng tôi vẫn giữ nguyên quy ước ở đây. 1590 01:11:19,080 --> 01:11:21,730 i + + chỉ có nghĩa là tăng i trong mỗi lần lặp. 1591 01:11:21,730 --> 01:11:24,310 Và bây giờ nhận thấy điều này, đó là thực sự thú vị. 1592 01:11:24,310 --> 01:11:28,730 Vì vậy, trong dòng 24, tôi nói máy tính, cho tôi một nhân vật, tám 1593 01:11:28,730 --> 01:11:30,770 bit, và gọi nó là c. 1594 01:11:30,770 --> 01:11:35,370 Nhưng đây là những gì trên phía bên tay phải nói? 1595 01:11:35,370 --> 01:11:38,150 Bằng tiếng Anh, đại diện cho những gì? 1596 01:11:38,150 --> 01:11:40,070 [Không nghe được] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. Malan: Chính xác. 1598 01:11:40,490 --> 01:11:42,390 Hãy cho tôi ký tự đầu tiên trong mảng. 1599 01:11:42,390 --> 01:11:45,400 Hay rộng hơn, cung cấp cho tôi những ký tự thứ i trong mảng. 1600 01:11:45,400 --> 01:11:48,230 Và nhận ra điều quan trọng là bây giờ mà là nhà khoa học máy tính, chúng tôi thực sự 1601 01:11:48,230 --> 01:11:49,330 đếm từ 0. 1602 01:11:49,330 --> 01:11:51,290 Bạn không có quyền tự quyết ngay bây giờ để bắt đầu làm điều này. 1603 01:11:51,290 --> 01:11:54,580 Bây giờ bạn phải hành xử phù hợp với kỳ vọng của máy tính và 1604 01:11:54,580 --> 01:11:58,010 đếm từ số không bởi vì [0] sẽ là người đầu tiên 1605 01:11:58,010 --> 01:11:59,670 nhân vật trong một chuỗi. 1606 01:11:59,670 --> 01:12:01,320 [1] sẽ là người thứ hai. 1607 01:12:01,320 --> 01:12:03,610 [2] là có được thứ ba, và vv. 1608 01:12:03,610 --> 01:12:08,840 Vì vậy, chương trình này, nếu tôi biên dịch nó - điều này là, một lần nữa, string1. 1609 01:12:08,840 --> 01:12:11,040 >> Vì vậy, hãy string1. 1610 01:12:11,040 --> 01:12:16,730 Và bây giờ tôi chạy string1 trong cửa sổ thiết bị đầu cuối của tôi. 1611 01:12:16,730 --> 01:12:19,180 Nó đang chờ đợi cho đầu vào, vì vậy tôi sẽ gõ vào, nói rằng, David. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 Và bây giờ nó in DAVID trên tất cả các dòng khác nhau vì 1614 01:12:23,350 --> 01:12:24,430 nhận thấy những gì tôi đang làm. 1615 01:12:24,430 --> 01:12:27,510 Tôi đang in một ký tự tại một thời điểm. 1616 01:12:27,510 --> 01:12:29,100 Bây giờ chúng ta sẽ không đi vào chi tiết về điều này. 1617 01:12:29,100 --> 01:12:31,610 Nhưng tôi đã xóa một chút thời gian trước kiểm tra này ở đây. 1618 01:12:31,610 --> 01:12:36,310 Nó chỉ ra rằng nếu người dùng đang bị lỗi, đối lập, hoặc chỉ 1619 01:12:36,310 --> 01:12:41,780 nhầm lẫn, bạn thực sự có thể không đưa ra một chuỗi có độ dài một số. 1620 01:12:41,780 --> 01:12:43,640 Nếu bạn nhấn phím sai trên bàn phím, bạn có thể cho 1621 01:12:43,640 --> 01:12:44,390 không có chuỗi ở tất cả. 1622 01:12:44,390 --> 01:12:47,790 Hoặc nếu bạn là độc hại, bạn có thể thử để dán giá trị của một gigabyte của một 1623 01:12:47,790 --> 01:12:49,380 bài tiểu luận để điền vào chuỗi này. 1624 01:12:49,380 --> 01:12:52,060 Và nếu máy tính chạy ra khỏi bộ nhớ, nó chỉ ra rằng chúng ta sẽ 1625 01:12:52,060 --> 01:12:54,310 để lấy lại giá trị đặc biệt này được gọi là vô giá trị. 1626 01:12:54,310 --> 01:12:57,550 Vì vậy, bây giờ, chỉ biết rằng có giá trị đặc biệt này được gọi là vô giá trị 1627 01:12:57,550 --> 01:13:01,000 sẽ cho phép chúng tôi kiểm tra khi chúng ta ra khỏi bộ nhớ, trong số những thứ khác. 1628 01:13:01,000 --> 01:13:07,330 >> Nhưng nếu tôi mở ngay bây giờ string2, nhận thấy một sự khác biệt ở đây. 1629 01:13:07,330 --> 01:13:09,760 Nhận thấy một sự khác biệt ở đây với string2. 1630 01:13:09,760 --> 01:13:13,260 Với string2, điều này cho vòng lặp là một chút khác nhau. 1631 01:13:13,260 --> 01:13:16,350 Hãy để tôi xóa các giá trị tương ứng để chúng ta có thể nói về những người một thời điểm khác. 1632 01:13:16,350 --> 01:13:18,460 Nhưng những gì khác nhau về cho vòng lặp thời gian này? 1633 01:13:21,580 --> 01:13:23,160 Và tôi có thể quay trở lại ví dụ trước. 1634 01:13:23,160 --> 01:13:24,800 Vì vậy, đó là phiên bản hai. 1635 01:13:24,800 --> 01:13:27,020 Đây là một phiên bản 1636 01:13:27,020 --> 01:13:31,935 Một, hai, một trong hai. 1637 01:13:35,030 --> 01:13:38,240 Vì vậy, các cuộc gọi strlen là ở đâu? 1638 01:13:38,240 --> 01:13:40,420 Đó là trong phần đầu tiên của vòng lặp for. 1639 01:13:40,420 --> 01:13:43,060 Bất kỳ suy nghĩ như lý do tại sao tôi đang làm điều này? 1640 01:13:43,060 --> 01:13:43,690 Yeah. 1641 01:13:43,690 --> 01:13:46,010 [Không nghe được] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. Malan: Vì vậy, chúng tôi không gọi chức năng mỗi lần duy nhất. 1643 01:13:47,630 --> 01:13:48,040 Chính xác. 1644 01:13:48,040 --> 01:13:50,350 Nhớ lại từ cho các vòng rằng họ là siêu đơn giản một khi bạn sắp xếp 1645 01:13:50,350 --> 01:13:52,180 hiểu rằng đây là việc khởi tạo, 1646 01:13:52,180 --> 01:13:53,330 điều kiện, và cập nhật. 1647 01:13:53,330 --> 01:13:55,430 Vấn đề là điều kiện xảy ra trên tất cả các 1648 01:13:55,430 --> 01:13:56,600 lặp đi lặp lại của vòng lặp. 1649 01:13:56,600 --> 01:13:59,930 Và do đó, trong ví dụ này ở đây, những gì là xấu về thực tế 1650 01:13:59,930 --> 01:14:03,500 rằng đây là tình trạng này? 1651 01:14:03,500 --> 01:14:05,920 Bạn đang gọi điện thoại strlen một lần nữa và một lần nữa và một lần nữa. 1652 01:14:05,920 --> 01:14:08,990 Nhưng một khi tôi đã nhập vào DAVID, chiều dài của chuỗi đó là năm. 1653 01:14:08,990 --> 01:14:11,560 Và nó sẽ không thay đổi trên mỗi lần lặp của vòng lặp vì 1654 01:14:11,560 --> 01:14:15,560 chuỗi vẫn còn D-A-V-I-D. Vì vậy, đây là một gợi ý vào những gì sẽ trở thành một 1655 01:14:15,560 --> 01:14:19,650 ý tưởng ngày càng quan trọng được biết đến như là một quyết định thiết kế, chỉ cần không 1656 01:14:19,650 --> 01:14:21,640 làm cho máy tính làm việc không cần thiết. 1657 01:14:21,640 --> 01:14:25,630 >> Bây giờ chỉ như một sneak xem trước của 2 pset, pset 2 trong phiên bản tiêu chuẩn là 1658 01:14:25,630 --> 01:14:28,850 sẽ thách thức bạn thực sự thực hiện một số số thuật toán mã hóa, một số 1659 01:14:28,850 --> 01:14:32,650 số thuật toán mã hóa, vì vậy mà bạn có thể mã hóa và giải mã 1660 01:14:32,650 --> 01:14:35,530 các tin nhắn bí mật, giống như Ralphie 1 có giải mã. 1661 01:14:35,530 --> 01:14:38,720 Trong phiên bản hacker của pset 2, chúng ta sẽ đi xa hơn một chút. 1662 01:14:38,720 --> 01:14:42,010 Chúng tôi sẽ giao cho bạn một tập tin từ một hệ thống máy tính thực tế có chứa một 1663 01:14:42,010 --> 01:14:45,690 toàn bộ loạt các tên người dùng và mật khẩu được mã hóa thực tế, và thách thức 1664 01:14:45,690 --> 01:14:49,110 cho phiên bản hacker là có được để crack các mật khẩu đó và con số 1665 01:14:49,110 --> 01:14:53,060 ra những mật mã, những gì bí mật được sử dụng để thực sự 1666 01:14:53,060 --> 01:14:55,080 tạo ra những mật khẩu. 1667 01:14:55,080 --> 01:14:58,360 Và chúng tôi sẽ làm điều này bằng cách sử dụng một tính năng mới của C mà tôi sẽ cung cấp cho 1668 01:14:58,360 --> 01:15:02,200 bạn chỉ cần một bản demo của, được gọi là đối số dòng lệnh. 1669 01:15:02,200 --> 01:15:05,930 >> Vì vậy, nó quay ra, như một số bạn có thể đã thấy trong phần hoặc trong sách giáo khoa, 1670 01:15:05,930 --> 01:15:09,850 chính không phải luôn luôn là vô hiệu trong dấu ngoặc đơn. 1671 01:15:09,850 --> 01:15:14,060 Nó chỉ ra rằng chính cũng có thể được viết như thế này, với hai đối số, 1672 01:15:14,060 --> 01:15:19,690 argc và argv, argc là số lượng từ mà bạn gõ sau 1673 01:15:19,690 --> 01:15:21,940 Tên của chương trình trên dòng lệnh của bạn. 1674 01:15:21,940 --> 01:15:24,550 Và argv là những từ. 1675 01:15:24,550 --> 01:15:29,470 Và như các dấu ngoặc vuông có đề nghị, argv rõ ràng là một mảng. 1676 01:15:29,470 --> 01:15:33,720 Nó sẽ là một chuỗi sau khi một chuỗi sau khi một chuỗi trong bộ nhớ. 1677 01:15:33,720 --> 01:15:36,170 Vì vậy, những gì chúng tôi đang đi để có thể làm, bắt đầu với pset 2, được 1678 01:15:36,170 --> 01:15:37,310 một cái gì đó như thế này. 1679 01:15:37,310 --> 01:15:42,450 Nếu tôi làm cho argv1, là một ví dụ chúng tôi sẽ trở lại vào thứ hai, và chạy 1680 01:15:42,450 --> 01:15:45,180 , nhận thấy rằng nó không có vẻ để làm bất cứ điều gì chưa. 1681 01:15:45,180 --> 01:15:47,050 Nó chỉ in ra tên riêng của mình. 1682 01:15:47,050 --> 01:15:53,220 Nhưng nếu tôi nói lời tạm biệt lớp học, thông báo rằng chương trình này dường như lặp lại 1683 01:15:53,220 --> 01:15:57,030 trên mỗi của các từ được gõ tại dấu nhắc. 1684 01:15:57,030 --> 01:16:02,050 Và những phương tiện mà chúng tôi sẽ được truy cập từ mà người dùng có 1685 01:16:02,050 --> 01:16:06,780 gõ tại dấu nhắc là bằng cách thay đổi chính, bắt đầu từ cuối tuần này, từ int 1686 01:16:06,780 --> 01:16:10,710 main (void) int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Và như vậy, sẽ được sinh ra đối số dòng lệnh. 1688 01:16:13,700 --> 01:16:17,210 Và một khi bạn có được thực sự phức tạp này, bạn sẽ có thể viết 1689 01:16:17,210 --> 01:16:21,370 chương trình thực sự trippy, chẳng hạn như này ở đây, mà đi ở trên và vượt ra ngoài 1690 01:16:21,370 --> 01:16:25,520 một số chức năng chúng tôi đã làm vậy, đến nay nhưng khá mạnh mẽ. 1691 01:16:25,520 --> 01:16:27,330 >> Vì vậy, chúng tôi sẽ để lại điều này với điều này trên màn hình. 1692 01:16:27,330 --> 01:16:29,160 Và chúng ta sẽ thấy bạn vào thứ hai.