1 00:00:00,000 --> 00:00:03,944 >> [MUSIC CHƠI] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID Malan: Tất cả các quyền. 4 00:00:11,690 --> 00:00:14,674 Đây là CS50, và điều này là cuối tuần thứ 2. 5 00:00:14,674 --> 00:00:16,840 Tôi rất xin lỗi tôi không thể đó với tất cả các bạn ngày hôm nay, 6 00:00:16,840 --> 00:00:18,300 nhưng bạn đang ở trong tay rất tốt. 7 00:00:18,300 --> 00:00:21,710 Cho phép tôi giới thiệu Riêng Rob Bowden CS50 của. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB Bowden: Và tất nhiên, sau đó chúng ta phải làm cho niềm vui của thực tế 10 00:00:31,730 --> 00:00:36,820 rằng ông đã gửi cho chúng tôi một dọc video và hiển thị này. 11 00:00:36,820 --> 00:00:38,320 >> [VIDEO PLAYBACK] 12 00:00:38,320 --> 00:00:39,820 >> [MUSIC CHƠI] 13 00:00:39,820 --> 00:00:42,350 >> [Chân] 14 00:00:42,350 --> 00:00:44,730 >> Video -Đây không phải tìm cách này. 15 00:00:44,730 --> 00:00:46,570 Nó có thể đã được ngăn chặn. 16 00:00:46,570 --> 00:00:49,070 Nói không với video theo chiều dọc. 17 00:00:49,070 --> 00:00:53,310 >> Video -Vertical xảy ra khi bạn giữ máy ảnh của bạn một cách sai lầm. 18 00:00:53,310 --> 00:00:55,880 Video của bạn sẽ kết thúc lên trông như crap. 19 00:00:55,880 --> 00:00:57,650 >> - [Grunt] 20 00:00:57,650 --> 00:01:02,240 >> -Có Càng nhiều người nghiện để làm video dọc mỗi ngày. 21 00:01:02,240 --> 00:01:06,240 Nó không bị nứt hoặc không có gì, nhưng nó vẫn thực sự xấu. 22 00:01:06,240 --> 00:01:10,410 Có hai loại khác nhau của người đang bị ảnh hưởng với VVS. 23 00:01:10,410 --> 00:01:14,160 Nhóm đầu tiên xử lý các video họ chụp ảnh giống như hình ảnh. 24 00:01:14,160 --> 00:01:15,850 Họ không có ý gây hại. 25 00:01:15,850 --> 00:01:19,180 Họ chỉ không hiểu rằng trong khi bạn có thể biến một bức tranh, 26 00:01:19,180 --> 00:01:20,880 bạn có thể không thực sự quay một video. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [MONKEY SOUNDS] 29 00:01:23,460 --> 00:01:27,540 >> -Các Nhóm khác là những người người không đưa ra một [bleep]. 30 00:01:27,540 --> 00:01:31,090 >> Hội chứng video -Vertical là nguy hiểm. 31 00:01:31,090 --> 00:01:34,120 Hình ảnh chuyển động có luôn luôn ngang. 32 00:01:34,120 --> 00:01:35,990 TV đều nằm ngang. 33 00:01:35,990 --> 00:01:38,380 Màn hình máy tính đều nằm ngang. 34 00:01:38,380 --> 00:01:41,580 Đôi mắt của mọi người đang ngang. 35 00:01:41,580 --> 00:01:45,170 Chúng tôi không được xây dựng để xem video theo chiều dọc. 36 00:01:45,170 --> 00:01:47,600 >> -Tôi Yêu video dọc. 37 00:01:47,600 --> 00:01:50,410 >> -Nobody Quan tâm đến bạn. 38 00:01:50,410 --> 00:01:53,340 >> -Nếu Của vấn đề này không được kiểm soát, bạn quá 39 00:01:53,340 --> 00:01:57,650 sẽ bắt đầu hiển thị bốn video cùng một lúc chỉ để tiết kiệm băng thông. 40 00:01:57,650 --> 00:02:02,400 >> Video dọc -Letterboxed sẽ được kích thước của một con tem bưu chính. 41 00:02:02,400 --> 00:02:04,920 >> -Và Nó sẽ lây lan khắp mọi nơi. 42 00:02:04,920 --> 00:02:07,670 Rạp chiếu phim có luôn luôn ngang. 43 00:02:07,670 --> 00:02:11,200 Nếu video dọc trở thành được chấp nhận, rạp chiếu phim 44 00:02:11,200 --> 00:02:13,930 sẽ phải cao và gầy. 45 00:02:13,930 --> 00:02:17,710 >> -Và Tất cả các rạp chiếu phim sẽ phải bị rách xuống và xây dựng lại. 46 00:02:17,710 --> 00:02:22,090 Và vào thời điểm họ được xây dựng lại, Mila Kunis sẽ già và xấu xí. 47 00:02:22,090 --> 00:02:24,342 >> -Birds Sẽ sụp đổ vào chúng và chết. 48 00:02:24,342 --> 00:02:26,530 >> -We'll Tất cả có được cứng cổ từ nhìn lên. 49 00:02:26,530 --> 00:02:29,800 >> -Và Không có ai sẽ ngồi trong hàng ghế đầu bao giờ trở lại. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas sẽ tái phát hành sao Wars again-- bản gầy. 51 00:02:37,170 --> 00:02:41,860 >> -Tôi Chưa bao giờ thực sự có thể nói câu chuyện mà tôi muốn nói. 52 00:02:41,860 --> 00:02:46,030 Đây là một cơ hội tuyệt vời cho tôi để thử nghiệm với một công nghệ mới. 53 00:02:46,030 --> 00:02:48,150 >> -You're Một jerk. 54 00:02:48,150 --> 00:02:54,430 >> -Every Thời gian một thiết bị di động được sử dụng để ghi lại video, sự cám dỗ là có. 55 00:02:54,430 --> 00:02:56,370 Chỉ cần nói không. 56 00:02:56,370 --> 00:03:00,116 Nói không với George Lucas. 57 00:03:00,116 --> 00:03:04,062 Nói không với Mila Kunis cũ. 58 00:03:04,062 --> 00:03:06,600 Nói không với video theo chiều dọc. 59 00:03:06,600 --> 00:03:12,511 >> -Và Nếu bạn nhìn thấy ai đó làm nó, nói, "bạn không chụp mà giả đúng!" 60 00:03:12,511 --> 00:03:15,433 >> [MUSIC CHƠI] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [END PLAYBACK] 63 00:03:19,830 --> 00:03:23,702 >> [Vỗ tay] 64 00:03:23,702 --> 00:03:27,598 >> [AUDIO OUT] 65 00:03:27,598 --> 00:03:44,041 66 00:03:44,041 --> 00:03:45,790 ROB Bowden: --simple hình thức mật mã, 67 00:03:45,790 --> 00:03:49,500 mà về cơ bản là mã hóa và giải mã các tin nhắn bí mật. 68 00:03:49,500 --> 00:03:52,590 Vì vậy, ở đây chúng ta có một đồ chơi rất đơn giản. 69 00:03:52,590 --> 00:03:56,900 Và ý tưởng là vòng ngoài quay xung quanh vành đai. 70 00:03:56,900 --> 00:04:01,610 Và bạn có thể thấy, có lẽ nếu tôi phóng to trong, that-- thật khó để nhìn thấy. 71 00:04:01,610 --> 00:04:05,090 Nhưng, như thế, số lượng 1-- tốt, mà di chuyển. 72 00:04:05,090 --> 00:04:09,120 >> Số 1 ánh xạ với thư X, số 2 bản đồ để thư 73 00:04:09,120 --> 00:04:11,630 J. Cực khó không để bỏ qua phía trước. 74 00:04:11,630 --> 00:04:16,100 Thư 2 bản đồ để J. Số 3 bản đồ để D. Vì vậy, 75 00:04:16,100 --> 00:04:20,140 với chiếc nhẫn này bạn có thể cho ai đó một tin nhắn 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 Đối với một số lý do bạn muốn nói với họ XJD. 77 00:04:22,624 --> 00:04:24,540 Nhưng bạn có thể cung cấp cho họ một số thông số, 78 00:04:24,540 --> 00:04:28,460 và miễn là họ có chiếc nhẫn này, họ có thể giải mã những gì bạn đang cố gắng để nói. 79 00:04:28,460 --> 00:04:32,510 >> Vì vậy, bạn có thể đã thấy điều này ví dụ cụ thể về mật mã 80 00:04:32,510 --> 00:04:36,640 nếu trước đó, khoảng mùa Giáng sinh bạn đã xem A Christmas Story. 81 00:04:36,640 --> 00:04:38,520 Nếu bạn chưa từng thấy nó trước, sau đó chỉ cần 82 00:04:38,520 --> 00:04:41,060 bật TBS tại nghĩa đen bất kỳ thời gian vào đêm Giáng sinh, 83 00:04:41,060 --> 00:04:44,510 bởi vì họ chỉ thấy nó trở lại trở lại sao sao sao cả ngày. 84 00:04:44,510 --> 00:04:46,744 Và các video có liên quan là điều này. 85 00:04:46,744 --> 00:04:47,410 [VIDEO PLAYBACK] 86 00:04:47,410 --> 00:04:50,020 -Be Nó biết là tất cả và tạp mà Ralph Parker là bãi 87 00:04:50,020 --> 00:04:52,850 bổ nhiệm một thành viên của Little Orphan Annie bí mật mối 88 00:04:52,850 --> 00:04:56,490 và được hưởng tất cả các danh hiệu và lợi ích xảy ra kèm theo. 89 00:04:56,490 --> 00:04:59,010 Ký nhỏ Orphan Annie. 90 00:04:59,010 --> 00:05:03,120 Countersigned Pierre Andre bằng mực! 91 00:05:03,120 --> 00:05:07,460 Danh dự và lợi ích đã ở tuổi chín! 92 00:05:07,460 --> 00:05:12,530 >> [CÓ LA TỪ RADIO] 93 00:05:12,530 --> 00:05:13,030 -Come Trên. 94 00:05:13,030 --> 00:05:14,000 Hãy về với nó. 95 00:05:14,000 --> 00:05:18,274 Tôi không cần tất cả những jazz về buôn lậu và cướp biển. 96 00:05:18,274 --> 00:05:20,440 Tối mai -Listen với cuộc phiêu lưu kết luận 97 00:05:20,440 --> 00:05:22,540 Black Pirate Ship. 98 00:05:22,540 --> 00:05:25,460 Bây giờ, đó là thời gian cho Thông điệp bí mật của Annie 99 00:05:25,460 --> 00:05:28,620 cho bạn thành viên của Secret Circle. 100 00:05:28,620 --> 00:05:32,370 Ghi trẻ em, chỉ có các thành viên Bí mật của các mối Annie 101 00:05:32,370 --> 00:05:34,880 có thể giải mã thông điệp bí mật của Annie. 102 00:05:34,880 --> 00:05:39,100 Hãy nhớ rằng, Annie là tùy thuộc vào bạn. 103 00:05:39,100 --> 00:05:41,660 Đặt chân của bạn để B2. 104 00:05:41,660 --> 00:05:43,960 Dưới đây là thông điệp. 105 00:05:43,960 --> 00:05:44,680 12. 106 00:05:44,680 --> 00:05:45,180 11. 107 00:05:45,180 --> 00:05:45,679 2. 108 00:05:45,679 --> 00:05:48,110 -Tôi Đang trong cuộc họp bí mật đầu tiên của tôi. 109 00:05:48,110 --> 00:05:49,030 >> -25. 110 00:05:49,030 --> 00:05:49,834 14. 111 00:05:49,834 --> 00:05:51,040 11. 112 00:05:51,040 --> 00:05:51,854 18. 113 00:05:51,854 --> 00:05:52,670 16. 114 00:05:52,670 --> 00:05:54,570 >> -Oh, Pierre là trong đêm nay giọng hát tuyệt vời. 115 00:05:54,570 --> 00:05:57,490 Tôi có thể nói rằng tối nay tin là thực sự quan trọng. 116 00:05:57,490 --> 00:05:57,990 -3. 117 00:05:57,990 --> 00:06:00,080 25. 118 00:06:00,080 --> 00:06:01,580 Đó là một tin nhắn từ Annie mình. 119 00:06:01,580 --> 00:06:02,880 Hãy nhớ rằng, không nói cho ai biết. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> -Five Giây sau, tôi đang ở chỉ các phòng trong nhà, nơi một cậu bé chín 122 00:06:11,130 --> 00:06:15,830 có thể ngồi trong sự riêng tư và giải mã. 123 00:06:15,830 --> 00:06:16,620 Aha! 124 00:06:16,620 --> 00:06:17,340 B! 125 00:06:17,340 --> 00:06:20,210 Tôi đã đi đến tiếp theo. 126 00:06:20,210 --> 00:06:23,300 E. Từ đầu tiên là "có". 127 00:06:23,300 --> 00:06:25,880 S. Nó đã đến dễ dàng hơn bây giờ. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Đó là R. 130 00:06:30,528 --> 00:06:31,278 -Come Trên, Ralphie! 131 00:06:31,278 --> 00:06:31,861 Tôi đã gotta đi! 132 00:06:31,861 --> 00:06:33,182 -I'll Là phải xuống, Ma! 133 00:06:33,182 --> 00:06:36,038 Gee rít. 134 00:06:36,038 --> 00:06:42,840 T. O. "Hãy chắc chắn" - bảo đảm là gì? 135 00:06:42,840 --> 00:06:44,770 Ít Orphan là gì Annie cố gắng để nói? 136 00:06:44,770 --> 00:06:46,381 Hãy chắc chắn những gì? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Đã có để đi! 138 00:06:47,825 --> 00:06:48,866 Bạn sẽ vui lòng đi ra? 139 00:06:48,866 --> 00:06:49,783 >> -Tất Cả các quyền, mẹ! 140 00:06:49,783 --> 00:06:51,786 Sẽ ra ngay! 141 00:06:51,786 --> 00:06:53,606 Tôi đã nhận được gần gũi hơn với doanh nghiệp. 142 00:06:53,606 --> 00:06:55,550 Sự căng thẳng là khủng khiếp. 143 00:06:55,550 --> 00:06:57,050 No la cai gi thê? 144 00:06:57,050 --> 00:06:59,905 Số phận của hành tinh có thể treo trong sự cân bằng! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randy đã đi! 146 00:07:01,736 --> 00:07:05,680 >> -I'll Đúng ra, buồn thì thôi! 147 00:07:05,680 --> 00:07:07,170 Hầu hết đó! 148 00:07:07,170 --> 00:07:08,150 Ngón tay của tôi đã bay. 149 00:07:08,150 --> 00:07:09,980 Tâm trí của tôi là một cái bẫy thép. 150 00:07:09,980 --> 00:07:11,496 Mỗi lỗ chân lông rung. 151 00:07:11,496 --> 00:07:13,268 Nó đã gần như rõ ràng! 152 00:07:13,268 --> 00:07:13,767 Vâng. 153 00:07:13,767 --> 00:07:14,609 Vâng. 154 00:07:14,609 --> 00:07:15,108 Vâng. 155 00:07:15,108 --> 00:07:16,449 Vâng. 156 00:07:16,449 --> 00:07:20,240 Hãy chắc chắn để uống Ovaltine của bạn. 157 00:07:20,240 --> 00:07:20,740 Ovaltine? 158 00:07:20,740 --> 00:07:26,687 159 00:07:26,687 --> 00:07:27,520 Một thương mại dể thương? 160 00:07:27,520 --> 00:07:32,040 161 00:07:32,040 --> 00:07:34,920 Con trai của một chó cái. 162 00:07:34,920 --> 00:07:35,890 >> [END PLAYBACK] 163 00:07:35,890 --> 00:07:39,650 >> ROB Bowden: Vậy đó là cách Ovaltine liên quan đến mật mã. 164 00:07:39,650 --> 00:07:42,290 Về cơ bản CS50 chỉ được quảng cáo Ovaltine, vì vậy chúng tôi có thể 165 00:07:42,290 --> 00:07:44,400 là một thương mại dể thương cho Ovaltine. 166 00:07:44,400 --> 00:07:44,900 Được rồi. 167 00:07:44,900 --> 00:07:47,120 Vì vậy, doanh nghiệp khoa học máy tính thực tế. 168 00:07:47,120 --> 00:07:50,670 Ghi vào thứ hai, chúng tôi rời đi lặn sâu hơn vào chuỗi. 169 00:07:50,670 --> 00:07:52,820 Vì vậy, chúng ta đang đối phó với chuỗi "Zamyla." 170 00:07:52,820 --> 00:07:55,130 Và chúng tôi đã được công nhận thực tế là chúng ta có thể điều trị 171 00:07:55,130 --> 00:07:57,510 "Zamyla" như là một chuỗi các ký tự. 172 00:07:57,510 --> 00:07:59,740 Và hãy nhớ rằng chúng ta học các ký hiệu khung. 173 00:07:59,740 --> 00:08:01,995 Vì vậy, nếu điều này đã được lưu trữ trong một chuỗi "s", sau đó 174 00:08:01,995 --> 00:08:05,860 nếu chúng ta nói s khung 0, mà có chỉ ra Z. vốn thư 175 00:08:05,860 --> 00:08:09,790 Và nếu chúng ta nói s khung 1, mà sẽ cho biết đầu tiên thường là một, 176 00:08:09,790 --> 00:08:14,220 và cứ thế tăng lên đến s khung 5, mà sẽ chỉ ra một cuối cùng. 177 00:08:14,220 --> 00:08:17,090 >> Bây giờ hãy nhớ rằng chiều dài của chuỗi này là 6, 178 00:08:17,090 --> 00:08:23,220 nhưng các chỉ số sang chuỗi là 0 đến 5, Z thông qua đó một. 179 00:08:23,220 --> 00:08:28,650 Vì vậy, điều này bây giờ phù hợp với một bức tranh lớn hơn bộ nhớ của máy tính, bộ nhớ RAM của bạn. 180 00:08:28,650 --> 00:08:32,020 Vì vậy, một nơi nào đó chương trình bạn đang chạy máy tính của bạn 181 00:08:32,020 --> 00:08:34,780 cần phải nhớ Zamyla một nơi nào đó trong bộ nhớ. 182 00:08:34,780 --> 00:08:36,029 Vì vậy, tôi có thể có một tình nguyện viên? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Vâng làm ơn. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 Và tên của bạn là gì? 187 00:08:51,500 --> 00:08:52,410 >> DEAN: Dean. 188 00:08:52,410 --> 00:08:53,550 >> ROB Bowden: Dean? 189 00:08:53,550 --> 00:08:54,910 Rất vui được gặp bạn, Dean. 190 00:08:54,910 --> 00:08:58,240 Vì vậy, đến đây, và chúng ta sẽ có bạn vẽ 191 00:08:58,240 --> 00:09:00,740 về cách bố trí tiện lợi đẹp của chúng ta về bộ nhớ. 192 00:09:00,740 --> 00:09:05,950 Bây giờ tôi thích nghĩ về bộ nhớ như một dải dài của byte, 193 00:09:05,950 --> 00:09:11,090 nhưng chỉ cho mục đích hiển thị chúng tôi sẽ chỉ cần trái sang phải, trên xuống dưới. 194 00:09:11,090 --> 00:09:11,590 ĐƯỢC? 195 00:09:11,590 --> 00:09:22,030 >> Vì vậy, tôi sẽ chỉ cho một program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 Và vì vậy tất cả chương trình này là làm là yêu cầu bốn dây 197 00:09:25,760 --> 00:09:28,830 từ người sử dụng với GetString và sau đó in 198 00:09:28,830 --> 00:09:30,950 bất cứ điều gì mà chuỗi đầu tiên bước vào đã. 199 00:09:30,950 --> 00:09:32,840 Chúng ta đang bỏ qua hai đến bốn. 200 00:09:32,840 --> 00:09:33,610 ĐƯỢC. 201 00:09:33,610 --> 00:09:38,210 Vì vậy, ở đây now-- khi Lần đầu tiên tôi yêu cầu s1. 202 00:09:38,210 --> 00:09:39,740 Vì vậy, bạn là máy tính. 203 00:09:39,740 --> 00:09:41,680 Và bạn đang thực hiện GetString. 204 00:09:41,680 --> 00:09:46,710 Vì vậy, bạn yêu cầu một chuỗi từ tôi, và tôi nói, OK, Dean. 205 00:09:46,710 --> 00:09:47,900 Cung cấp cho chuỗi "Dean." 206 00:09:47,900 --> 00:09:50,300 >> Vì vậy, ở đâu đó trong bộ nhớ bạn cần nhớ "Dean." 207 00:09:50,300 --> 00:09:52,160 Vì vậy, viết nó vào bộ nhớ ở đâu đó. 208 00:09:52,160 --> 00:09:58,270 209 00:09:58,270 --> 00:09:59,210 Perfect. 210 00:09:59,210 --> 00:09:59,880 ĐƯỢC. 211 00:09:59,880 --> 00:10:01,740 Vì vậy, bây giờ chúng tôi đã s2. 212 00:10:01,740 --> 00:10:03,869 Và s2 là có được một yêu cầu để GetString. 213 00:10:03,869 --> 00:10:05,160 Vì vậy, tôi sẽ nhập vào một chuỗi. 214 00:10:05,160 --> 00:10:08,720 Tôi sẽ nhập "Hannah." 215 00:10:08,720 --> 00:10:10,586 Vì vậy, nhập "Hannah" một nơi nào đó vào bộ nhớ. 216 00:10:10,586 --> 00:10:18,860 217 00:10:18,860 --> 00:10:19,360 Yeah. 218 00:10:19,360 --> 00:10:23,000 A-H. 219 00:10:23,000 --> 00:10:25,550 >> OK, vì vậy bây giờ s3. 220 00:10:25,550 --> 00:10:28,380 Và nó sẽ là một yêu cầu để GetString. 221 00:10:28,380 --> 00:10:37,020 Và vì vậy bây giờ nhập "Maria." 222 00:10:37,020 --> 00:10:37,520 Được rồi. 223 00:10:37,520 --> 00:10:40,980 Và sau đó là người cuối cùng yêu cầu để GetString, s4. 224 00:10:40,980 --> 00:10:42,580 Vì vậy, tôi không biết. 225 00:10:42,580 --> 00:10:45,640 Làm thế nào về chúng tôi đi với antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Vì vậy, nhập đó vào bộ nhớ. 227 00:10:49,460 --> 00:10:50,400 Yeah. 228 00:10:50,400 --> 00:10:53,970 Vì vậy, chỉ cần làm "Rob." 229 00:10:53,970 --> 00:10:54,560 >> ĐƯỢC. 230 00:10:54,560 --> 00:10:58,410 Vì vậy bây giờ explain-- tại sao bạn để lại những khoảng trống? 231 00:10:58,410 --> 00:11:01,340 Tại sao bạn phải trống này không gian ở đây, ở đây và ở đây? 232 00:11:01,340 --> 00:11:05,170 233 00:11:05,170 --> 00:11:05,670 Vâng. 234 00:11:05,670 --> 00:11:09,450 Vì vậy, nhận thấy khi tôi đi in s1-- vì vậy nếu chúng tôi 235 00:11:09,450 --> 00:11:11,890 đã "Hannah" chạy phải lên bên cạnh "Dean" 236 00:11:11,890 --> 00:11:14,360 làm thế nào để chúng ta biết khi nào chuỗi "Dean" kết thúc? 237 00:11:14,360 --> 00:11:19,470 Vì vậy, in chuỗi s1 có thể có chỉ in "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 nếu nó không có bất kỳ mối khi "Dean" thực sự kết thúc. 239 00:11:22,720 --> 00:11:23,240 >> Được rồi. 240 00:11:23,240 --> 00:11:27,650 Vì vậy, trong bộ nhớ theo cách chúng ta thực sự đại diện này kết thúc một chuỗi 241 00:11:27,650 --> 00:11:29,940 là với dấu gạch chéo ngược zero. 242 00:11:29,940 --> 00:11:32,620 Vì vậy, không gian này là chính xác những gì chúng tôi muốn. 243 00:11:32,620 --> 00:11:34,040 Nó phải là một dấu gạch chéo ngược zero. 244 00:11:34,040 --> 00:11:37,690 Đây sẽ là một dấu gạch chéo ngược bằng không, và điều này sẽ là một dấu gạch chéo ngược zero. 245 00:11:37,690 --> 00:11:41,585 Và bạn có thể có một giải thưởng tuyệt vời vì là một tình nguyện viên hoàn hảo. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Đi một quả bóng căng thẳng! 248 00:11:45,860 --> 00:11:49,040 249 00:11:49,040 --> 00:11:49,700 >> ĐƯỢC. 250 00:11:49,700 --> 00:11:54,420 Vì vậy, nhân vật này không có dấu gạch chéo ngược làm thế nào chúng ta biết kết thúc của một chuỗi. 251 00:11:54,420 --> 00:11:57,120 Đó là cách mà khi bất kỳ chương trình nào đó muốn in một chuỗi, 252 00:11:57,120 --> 00:11:59,760 nó how-- nhớ chúng tôi đã học hàm strlen tuần trước? 253 00:11:59,760 --> 00:12:00,940 Chuỗi dài? 254 00:12:00,940 --> 00:12:03,770 Đó là cách mà chiều dài chuỗi là thể xác định một chuỗi là bao lâu. 255 00:12:03,770 --> 00:12:05,810 Nó chỉ cần giữ lặp qua các nhân vật 256 00:12:05,810 --> 00:12:08,217 cho đến khi nó tìm thấy dấu gạch chéo ngược zero nhân vật. 257 00:12:08,217 --> 00:12:11,050 Vì vậy, điều quan trọng để nhận về nhân vật backslash zero 258 00:12:11,050 --> 00:12:14,950 là nó được trình bày bởi tất cả các số trong bit. 259 00:12:14,950 --> 00:12:18,980 Vì vậy, nhận thấy rằng đây là khác biệt từ các nhân vật bằng không. 260 00:12:18,980 --> 00:12:23,010 Vì vậy, các nhân vật không, nếu bạn nhớ trong ví dụ mà ông đã đưa ra ở cuối 261 00:12:23,010 --> 00:12:27,360 các bài giảng mà nhân vật map với: như bản đồ vốn A đến 65. 262 00:12:27,360 --> 00:12:29,130 Chữ thường một bản đồ đến 97. 263 00:12:29,130 --> 00:12:30,890 Chữ thường b sẽ là 98. 264 00:12:30,890 --> 00:12:35,220 Vì vậy, các bản đồ số 0 với: Tôi không biết ra khỏi đỉnh đầu của tôi. 265 00:12:35,220 --> 00:12:36,400 44 hoặc 45. 266 00:12:36,400 --> 00:12:37,890 Một nơi nào đó trong khu vực đó. 267 00:12:37,890 --> 00:12:40,850 >> Vì vậy, các nhân vật 0 là một số thực tế. 268 00:12:40,850 --> 00:12:44,350 Nhưng không dấu gạch chéo ngược bản đồ cho tất cả các số không bit. 269 00:12:44,350 --> 00:12:46,380 Vì vậy, có một sự phân biệt giữa dấu gạch chéo ngược bằng không, 270 00:12:46,380 --> 00:12:48,450 mà chúng ta sẽ gọi là terminator null. 271 00:12:48,450 --> 00:12:53,210 Có một sự khác biệt giữa backslash zero và các nhân vật bằng không. 272 00:12:53,210 --> 00:12:54,350 >> Được rồi. 273 00:12:54,350 --> 00:12:57,520 Vì vậy, nói thêm một chút về dây. 274 00:12:57,520 --> 00:13:01,470 Vì vậy, sau đó chúng ta thấy ở đây là làm thế nào nó sẽ được đặt ra trong bộ nhớ. 275 00:13:01,470 --> 00:13:07,940 Vì vậy, ý tưởng này của chuỗi như là một chuỗi của characters-- vì vậy các máy tính chính thức 276 00:13:07,940 --> 00:13:10,750 sciency hạn cho trình tự là một mảng. 277 00:13:10,750 --> 00:13:13,790 Vì vậy, chúng tôi sẽ gọi một chuỗi một mảng ký tự. 278 00:13:13,790 --> 00:13:17,770 Và thực sự có dữ liệu khác loại mà chúng ta có thể làm cho các mảng ra khỏi. 279 00:13:17,770 --> 00:13:19,975 >> Vì vậy, để tạo động lực này, nhìn vào một ví dụ. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Chúng tôi sẽ gọi nó là ages0.c tôi sẽ sao chép và dán mẫu của chúng tôi. 282 00:13:29,812 --> 00:13:32,470 283 00:13:32,470 --> 00:13:33,410 ĐƯỢC. 284 00:13:33,410 --> 00:13:39,378 Vì vậy, trong chương trình này những gì chúng tôi muốn làm là lấy tuổi 285 00:13:39,378 --> 00:13:45,160 của ba sinh viên trong khóa học. 286 00:13:45,160 --> 00:13:49,240 Vì vậy, chúng ta biết được int age-- và bây giờ tôi sẽ nói 0. 287 00:13:49,240 --> 00:13:53,140 Vì vậy, bạn có thể muốn nói age1, nhưng cho mục đích chúng ta sẽ thấy rất lâu, 288 00:13:53,140 --> 00:13:57,187 Tôi sẽ nói int age0 bằng getInt. 289 00:13:57,187 --> 00:13:59,270 Vì vậy, cùng một cuộc gọi để getInt mà chúng ta đã sử dụng tôi 290 00:13:59,270 --> 00:14:01,561 không xảy ra để được nhắc nói, "cho tôi tuổi." 291 00:14:01,561 --> 00:14:03,120 Nhưng chỉ yêu cầu nó. 292 00:14:03,120 --> 00:14:06,510 >> Và age1 bằng getInt. 293 00:14:06,510 --> 00:14:09,600 Và int age2 bằng getInt. 294 00:14:09,600 --> 00:14:14,070 Vì vậy, một lần nữa, ba sinh viên, nhưng cuối cùng các chỉ số biến 295 00:14:14,070 --> 00:14:16,890 là age0 qua age2. 296 00:14:16,890 --> 00:14:17,550 ĐƯỢC. 297 00:14:17,550 --> 00:14:23,960 Vì vậy, chương trình này sẽ làm bất cứ điều gì chúng tôi muốn với age0, age1, và age2, 298 00:14:23,960 --> 00:14:27,670 nhưng chương trình này cuối cùng làm việc cho ba sinh viên. 299 00:14:27,670 --> 00:14:28,380 >> ĐƯỢC. 300 00:14:28,380 --> 00:14:32,110 Vì vậy, bây giờ những gì nếu tôi muốn bốn sinh viên? 301 00:14:32,110 --> 00:14:36,000 Vâng, tôi sẽ phải quay trở lại vào mã của tôi, thay đổi những nhận xét, 302 00:14:36,000 --> 00:14:39,840 và bây giờ chúng ta có một int age3 bằng getInt. 303 00:14:39,840 --> 00:14:40,610 ĐƯỢC. 304 00:14:40,610 --> 00:14:43,660 Vì vậy, những người nhìn thấy vấn đề ở đây? 305 00:14:43,660 --> 00:14:47,310 Vấn đề là gì với loại này thiết lập? 306 00:14:47,310 --> 00:14:47,810 Yeah. 307 00:14:47,810 --> 00:14:53,110 308 00:14:53,110 --> 00:14:53,610 Yeah. 309 00:14:53,610 --> 00:14:56,360 Vì vậy, chúng tôi đang tạo ra một biến cho mỗi học sinh. 310 00:14:56,360 --> 00:15:00,140 Bây giờ mà làm việc, nhưng cuối cùng những gì nếu bây giờ tôi 311 00:15:00,140 --> 00:15:06,500 nói, "Tôi muốn lấy tuổi tám học sinh hoặc sinh viên 16 312 00:15:06,500 --> 00:15:11,340 hoặc tuy nhiên nhiều học sinh của hàng trăm sinh viên trong CS50 313 00:15:11,340 --> 00:15:16,750 hoặc hàng ngàn sinh viên trong khuôn viên trường hoặc hàng tỷ người trên thế giới? 314 00:15:16,750 --> 00:15:19,130 Vì vậy, cuối cùng này là không bền vững. 315 00:15:19,130 --> 00:15:21,990 Bất cứ lúc nào bạn thấy mình sao chép và dán mã như thế này, 316 00:15:21,990 --> 00:15:25,050 nói chung bạn nên cảm thấy rằng có một cách tốt hơn. 317 00:15:25,050 --> 00:15:31,290 >> Vì vậy, đây là nơi mà chúng tôi giới thiệu một khai báo mảng. 318 00:15:31,290 --> 00:15:34,564 Vì vậy, khi bạn khai báo một mảng, đây là những gì các định dạng chung 319 00:15:34,564 --> 00:15:35,480 sẽ trông như thế nào. 320 00:15:35,480 --> 00:15:36,664 Chúng ta sẽ nói loại. 321 00:15:36,664 --> 00:15:38,830 và sau đó chúng ta sẽ cho tên của mảng đó, 322 00:15:38,830 --> 00:15:41,150 cũng như chúng ta xác định bất kỳ biến nhất định. 323 00:15:41,150 --> 00:15:43,980 Và cuối cùng, chúng tôi đang sử dụng ký hiệu khung này một lần nữa 324 00:15:43,980 --> 00:15:47,480 nhưng trong một bối cảnh khác nhau từ làm thế nào chúng tôi đã sử dụng nó trước đó. 325 00:15:47,480 --> 00:15:51,860 >> Vì vậy, ở đây này trông giống như một bình thường khai báo biến mà chúng tôi đã nhìn thấy. 326 00:15:51,860 --> 00:15:54,890 Vì vậy, chúng tôi đã nhìn thấy int x dấu chấm phẩy trước. 327 00:15:54,890 --> 00:16:00,020 Vâng bây giờ chúng ta có thể nhìn thấy một cái gì đó như int x ngoặc 5. 328 00:16:00,020 --> 00:16:04,020 Và đưa ý tưởng này vào Chương trình getInt rằng chúng tôi have-- 329 00:16:04,020 --> 00:16:08,850 vì vậy chúng tôi có thể thực hiện này trong cùng một cách. 330 00:16:08,850 --> 00:16:13,630 >> Hãy nói rằng trong CS chúng ta có xu hướng sử dụng n là số lượng của một cái gì đó. 331 00:16:13,630 --> 00:16:16,150 Vì vậy, ở đây chúng ta sẽ lưu trữ bốn sinh viên. 332 00:16:16,150 --> 00:16:25,960 Và bây giờ chúng ta có thể nói int tuổi khung n-- không hoàn toàn nhận được nó yet-- 333 00:16:25,960 --> 00:16:32,210 để khai báo một mảng của bốn học sinh. 334 00:16:32,210 --> 00:16:38,050 Vậy làm thế nào điều này sẽ tìm trong bộ nhớ sẽ được tương tự như này. 335 00:16:38,050 --> 00:16:39,570 Rõ ràng điều này. 336 00:16:39,570 --> 00:16:46,606 Và chúng ta sẽ có một nơi nào đó trong memory-- tôi sẽ đặt này lên đó. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Vì vậy, một nơi nào đó trong bộ nhớ. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 Một hai ba bốn. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Chúng ta có bốn số nguyên liên tiếp cho mảng này của bốn số nguyên. 343 00:17:09,849 --> 00:17:13,820 Vì vậy, hiện nay, là những gì kích thước của một trong những hộp? 344 00:17:13,820 --> 00:17:17,190 345 00:17:17,190 --> 00:17:17,690 Yeah. 346 00:17:17,690 --> 00:17:18,390 Đó là bốn byte. 347 00:17:18,390 --> 00:17:19,690 Đó là 32 bit. 348 00:17:19,690 --> 00:17:22,310 Vì vậy, bây giờ điều này là khác nhau từ mảng mà chúng ta 349 00:17:22,310 --> 00:17:24,020 đã thấy trước đó, các mảng kí tự. 350 00:17:24,020 --> 00:17:28,540 Trong một chuỗi mỗi hộp chỉ có một byte, bởi vì một nhân vật chỉ là một byte. 351 00:17:28,540 --> 00:17:32,170 Nhưng với một mảng các số nguyên, mỗi hộp có là bốn byte để 352 00:17:32,170 --> 00:17:34,060 để phù hợp với toàn bộ một số nguyên. 353 00:17:34,060 --> 00:17:37,197 Vì vậy, đây là những gì một mảng của bốn ints sẽ như thế nào. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> Và sau đó trở lại mã. 356 00:17:43,870 --> 00:17:47,460 Bây giờ chúng tôi muốn thực sự cửa hàng số nguyên vào mảng đó. 357 00:17:47,460 --> 00:17:53,470 Vì vậy, bây giờ điều này là rất, rất, rất phổ biến mô hình đó sẽ tại một số điểm 358 00:17:53,470 --> 00:17:54,680 trở thành bộ nhớ cơ bắp. 359 00:17:54,680 --> 00:17:56,710 Vì vậy, int i bằng 0. 360 00:17:56,710 --> 00:17:57,940 i nhỏ hơn n. 361 00:17:57,940 --> 00:18:01,850 i cộng với cộng với. 362 00:18:01,850 --> 00:18:05,790 Độ tuổi tôi bằng getInt. 363 00:18:05,790 --> 00:18:15,100 >> Vì vậy, điều này cho vòng lặp, định dạng này, bạn sẽ nhận được rất được sử dụng để. 364 00:18:15,100 --> 00:18:20,010 Vì vậy, điều này nói chung là làm thế nào chúng ta sẽ lặp qua mảng gần như bất kỳ. 365 00:18:20,010 --> 00:18:23,690 Bây giờ thấy loại này giải thích tại sao ngay từ đầu 366 00:18:23,690 --> 00:18:29,870 chúng tôi không có cho vòng đi cho int i bằng 1, i nhỏ hơn hoặc bằng 10. 367 00:18:29,870 --> 00:18:34,200 Lý do được rằng bắt đầu từ không làm cho công việc này cũng với mảng. 368 00:18:34,200 --> 00:18:36,270 Vì vậy, mảng là không được lập chỉ mục. 369 00:18:36,270 --> 00:18:40,360 Nếu mảng này có chiều dài 4, các chỉ số là 0 đến 3. 370 00:18:40,360 --> 00:18:42,880 >> Vì vậy, thông qua việc đầu tiên lặp đi lặp lại điều này cho vòng lặp 371 00:18:42,880 --> 00:18:49,930 chúng ta sẽ được thiết lập độ tuổi khung 0 bằng một cuộc gọi đến getInt. 372 00:18:49,930 --> 00:18:52,440 Vì vậy, bất cứ điều gì tôi đã xảy ra nhập vào bàn phím. 373 00:18:52,440 --> 00:18:56,970 Trong qua thứ hai, chúng tôi thiết age1 bằng getInt. 374 00:18:56,970 --> 00:18:58,230 Vượt qua thứ ba, age2. 375 00:18:58,230 --> 00:18:59,880 Thức vượt qua age3. 376 00:18:59,880 --> 00:19:05,750 Vì vậy, nếu trong vượt qua đầu tiên của vòng lặp Tôi nhập số 4 vào bàn phím, 377 00:19:05,750 --> 00:19:07,740 sau đó chúng ta sẽ chèn một 4 ở đây. 378 00:19:07,740 --> 00:19:11,470 Nếu trên đèo thứ hai tôi nhập 50, chúng tôi sẽ đặt một 50 ở đây. 379 00:19:11,470 --> 00:19:15,180 Trên đèo thứ ba tôi có thể nhập âm 1, âm 1, 380 00:19:15,180 --> 00:19:21,810 và rồi cuối cùng nếu tôi nhập 0-- và bây giờ nhớ rằng đây là mục ba. 381 00:19:21,810 --> 00:19:25,350 >> Sau khi chúng ta lặp lại, tôi là sẽ được tăng lên đến 4. 382 00:19:25,350 --> 00:19:27,770 i là không còn nhỏ hơn n, đó là 4. 383 00:19:27,770 --> 00:19:29,840 Và chúng ta thoát ra khỏi vòng lặp. 384 00:19:29,840 --> 00:19:32,578 Vì vậy, những gì sẽ là sai với điều này? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [Không nghe thấy]? 387 00:19:38,729 --> 00:19:39,604 Đung [Không nghe thấy] 388 00:19:39,604 --> 00:19:45,880 389 00:19:45,880 --> 00:19:46,400 >> Vâng. 390 00:19:46,400 --> 00:19:51,550 Vì vậy, các mảng chỉ có bốn địa điểm, điều đó có nghĩa là chỉ số từ 0 đến 3. 391 00:19:51,550 --> 00:19:55,630 Vì vậy, nếu điều này là trường hợp, tôi sẽ đưa vào các giá trị 4 tại một số điểm. 392 00:19:55,630 --> 00:20:00,910 độ tuổi 4 sẽ được thiết lập bất cứ điều gì sẽ xảy ra là ở đây 393 00:20:00,910 --> 00:20:02,920 với những gì tôi có thể nói, nhập 6. 394 00:20:02,920 --> 00:20:05,010 Điều đó sẽ được thiết lập này để 6. 395 00:20:05,010 --> 00:20:06,560 >> Nhưng chúng ta không biết những gì trên đây. 396 00:20:06,560 --> 00:20:08,836 Đây không phải là bộ nhớ rằng chúng tôi đã có thể truy cập. 397 00:20:08,836 --> 00:20:10,710 Vì vậy, nếu bạn nhớ từ các bài giảng trước, 398 00:20:10,710 --> 00:20:14,350 ông được in ra giá trị của Zamyla và tại một số điểm ông nhấn phân khúc này 399 00:20:14,350 --> 00:20:17,990 lỗi. Vì vậy, bạn sẽ có thể được nhìn thấy nhiều lỗi segmentation như bạn 400 00:20:17,990 --> 00:20:20,530 thực hiện một số bài tập. 401 00:20:20,530 --> 00:20:24,950 Nhưng đây là một trong những cách thức mà bạn có thể gặp phải một phân khúc 402 00:20:24,950 --> 00:20:28,540 lỗi, khi bạn bắt đầu truy cập bộ nhớ trong những cách mà bạn không nên. 403 00:20:28,540 --> 00:20:34,117 Vì vậy, chúng tôi không có quyền truy cập vào vị trí này và đây là một lỗi. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Vì vậy, đây là tốt hơn. 406 00:20:40,190 --> 00:20:45,820 Bây giờ vẫn còn là một nhỏ vấn đề với mã này. 407 00:20:45,820 --> 00:20:50,720 Và đó là cơ bản mà chúng tôi vẫn còn bị mắc kẹt tại bốn sinh viên. 408 00:20:50,720 --> 00:20:52,940 Bây giờ nếu tôi muốn sử dụng tám học sinh, OK. 409 00:20:52,940 --> 00:20:54,350 Nó không phải là một vấn đề lớn. 410 00:20:54,350 --> 00:20:58,120 Tôi có thể đi vào, thay đổi bình luận, và thay đổi n. 411 00:20:58,120 --> 00:20:59,760 Bây giờ điều này sẽ làm việc với tám học sinh. 412 00:20:59,760 --> 00:21:02,190 Nếu tôi biên dịch này và chạy này, nó sẽ hiển thị me-- 413 00:21:02,190 --> 00:21:07,870 nó sẽ yêu cầu số nguyên cho tám sinh viên và nó sẽ chỉ làm việc. 414 00:21:07,870 --> 00:21:11,850 Nhưng nó ít hơn lý tưởng để cần biên dịch lại chương trình mỗi lần duy nhất 415 00:21:11,850 --> 00:21:15,960 Tôi muốn thay đổi số lượng sinh viên mà tôi muốn vào các lứa tuổi cho. 416 00:21:15,960 --> 00:21:22,990 >> Vì vậy, những cải tiến cuối cùng về này, như chúng ta sẽ thấy here-- chúng tôi 417 00:21:22,990 --> 00:21:26,177 sẽ yêu cầu số lượng người. 418 00:21:26,177 --> 00:21:28,010 Ở đây chúng ta có một số của người dân trong phòng 419 00:21:28,010 --> 00:21:29,880 hoặc bất kỳ lứa tuổi của người trong phòng. 420 00:21:29,880 --> 00:21:33,300 Nhưng chúng tôi sẽ yêu cầu số lượng của mọi người trong phòng từ người sử dụng. 421 00:21:33,300 --> 00:21:36,171 Vì vậy, đây là chính xác cùng một do-while vòng mà chúng tôi đã nhìn thấy trước. 422 00:21:36,171 --> 00:21:37,920 Đó là chính xác giống nhau do-while loop mà bạn 423 00:21:37,920 --> 00:21:40,050 có thể được thực hiện trên các thiết lập vấn đề. 424 00:21:40,050 --> 00:21:43,102 Vì vậy, miễn là chúng bước vào một n nhỏ hơn 1, 425 00:21:43,102 --> 00:21:45,310 do đó đã nhận được tại ít nhất một người trong phòng. 426 00:21:45,310 --> 00:21:47,407 Miễn là chúng bước vào một n nhỏ hơn 1, 427 00:21:47,407 --> 00:21:48,990 sau đó chúng ta sẽ tiếp tục yêu cầu một lần nữa. 428 00:21:48,990 --> 00:21:50,906 Vui lòng nhập số lượng của người trong phòng. 429 00:21:50,906 --> 00:21:53,550 Bây giờ, khi chúng tôi có số lượng của người dân ở các room-- 430 00:21:53,550 --> 00:21:58,020 vì vậy tôi có thể nhập vào đó có 200 người trong căn phòng này. 431 00:21:58,020 --> 00:22:05,480 Sau đó xuống đây chúng ta sẽ đi và khai báo một mảng có kích thước 200. 432 00:22:05,480 --> 00:22:10,220 Chúng tôi đang khai báo mảng đó đủ lớn để chứa 200 tuổi. 433 00:22:10,220 --> 00:22:15,370 Đi xuống, đó là cho vòng lặp rằng bạn sẽ nhận được rất được sử dụng để. 434 00:22:15,370 --> 00:22:19,490 Vì vậy, lặp qua mảng này, ấn định cho mỗi vị trí 435 00:22:19,490 --> 00:22:23,020 trong mảng đó một số nguyên, và sau đó cuối cùng ở đây chúng tôi 436 00:22:23,020 --> 00:22:28,340 chỉ nhận được một ví dụ về lặp trên mảng đó, không phải để gán giá trị, 437 00:22:28,340 --> 00:22:30,150 nhưng để truy cập các giá trị. 438 00:22:30,150 --> 00:22:33,810 >> Vì vậy, ở đây chúng ta thấy rằng chúng ta đang nói, một năm kể từ bây giờ, 439 00:22:33,810 --> 00:22:40,470 người% i sẽ được% i tuổi, nơi đầu tiên% i là i + 1. 440 00:22:40,470 --> 00:22:43,010 Vì vậy, tôi có thể thay đổi chỉ số này. 441 00:22:43,010 --> 00:22:49,420 Và% i thứ hai là có được sự giá trị được lưu trữ trong các lứa tuổi mảng cộng thêm 1. 442 00:22:49,420 --> 00:22:54,217 Vì vậy, cộng với 1 này chỉ là vì chúng tôi saying-- cộng 1 này, lứa tuổi tôi cộng thêm 1. 443 00:22:54,217 --> 00:22:57,050 Cộng với 1 này chỉ là vì chúng tôi nói, một năm kể từ bây giờ người 444 00:22:57,050 --> 00:22:58,280 sẽ là cũ này. 445 00:22:58,280 --> 00:23:01,080 >> Vì vậy, tại sao lại là tôi này cộng với 1? 446 00:23:01,080 --> 00:23:04,064 Tại sao chúng ta có một cộng 1 có? 447 00:23:04,064 --> 00:23:04,564 Yeah. 448 00:23:04,564 --> 00:23:07,410 449 00:23:07,410 --> 00:23:07,930 Vâng. 450 00:23:07,930 --> 00:23:10,510 Vì vậy, hãy nhớ mảng được lập chỉ mục zero. 451 00:23:10,510 --> 00:23:14,840 Vì vậy, nếu chúng ta đang in này ra cho một người nào đó chỉ cần đọc các đầu ra, 452 00:23:14,840 --> 00:23:19,380 sau đó có lẽ họ muốn xem một cái gì đó như người một, người số một, 453 00:23:19,380 --> 00:23:21,160 sẽ là 20 tuổi. 454 00:23:21,160 --> 00:23:23,570 Người thứ hai sẽ được 15 tuổi. 455 00:23:23,570 --> 00:23:27,420 Họ không muốn nhìn thấy người số zero là 15 tuổi. 456 00:23:27,420 --> 00:23:36,460 >> Vì vậy, biên dịch này và chỉ nhìn thấy những gì nó trông like-- Tạo một số không gian. 457 00:23:36,460 --> 00:23:43,560 Hãy lứa tuổi biên dịch. 458 00:23:43,560 --> 00:23:45,080 Chạy lứa tuổi. 459 00:23:45,080 --> 00:23:46,580 Chúng tôi nhìn thấy số lượng người trong phòng. 460 00:23:46,580 --> 00:23:48,850 Vì vậy, tôi sẽ nói có ba người trong phòng. 461 00:23:48,850 --> 00:23:54,000 Tuổi của người số một, chúng ta hãy nói 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 Và bây giờ tôi sẽ nói một năm từ bây giờ họ sẽ là 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 Hãy thấy rằng công trình này với một n đó không phải là bằng 3. 464 00:24:02,900 --> 00:24:07,940 Vì vậy, nếu tôi nói số người là 5, một trong những, hai, ba, hai, một, một năm kể từ bây giờ 465 00:24:07,940 --> 00:24:11,170 họ sẽ có hai, ba, bốn, ba, hai tuổi. 466 00:24:11,170 --> 00:24:16,500 Vì vậy, tôi có thể chỉ là dễ dàng đã n là 10.000. 467 00:24:16,500 --> 00:24:21,270 Bây giờ tôi sẽ ngồi ở đây cho khá một khi bước vào lứa tuổi, nhưng công trình này. 468 00:24:21,270 --> 00:24:26,000 >> Vì vậy, bây giờ trong bộ nhớ ở đâu đó chúng tôi có một mảng có kích thước 10.000, 469 00:24:26,000 --> 00:24:28,830 vậy cuối cùng là 40.000 byte, vì có 470 00:24:28,830 --> 00:24:31,222 bốn byte cho mỗi của những số nguyên. 471 00:24:31,222 --> 00:24:33,180 Vì vậy, có một mảng của kích thước 10,000 nơi chúng ta có thể 472 00:24:33,180 --> 00:24:36,201 lưu trữ các lứa tuổi của những người 10.000 người. 473 00:24:36,201 --> 00:24:36,700 Được rồi. 474 00:24:36,700 --> 00:24:40,070 Các câu hỏi về những điều này? 475 00:24:40,070 --> 00:24:41,892 Yeah. 476 00:24:41,892 --> 00:24:43,350 Điều gì nếu bạn đã đưa ra một số tiêu cực? 477 00:24:43,350 --> 00:24:44,870 Hãy xem những gì sẽ xảy ra. 478 00:24:44,870 --> 00:24:49,320 Vì vậy, trong số case-- đặc biệt này của mọi người trong phòng, một trong những tiêu cực. 479 00:24:49,320 --> 00:24:52,580 Nó từ chối cho rằng, vì ở đây chúng tôi xảy ra 480 00:24:52,580 --> 00:24:57,180 để được xử lý một thực tế rằng nếu n là ít hơn một chúng ta sẽ hỏi một lần nữa. 481 00:24:57,180 --> 00:25:01,780 Nếu bạn cố gắng để khai báo một mảng có kích thước tiêu cực, 482 00:25:01,780 --> 00:25:03,950 nó thường không làm việc. 483 00:25:03,950 --> 00:25:05,570 >> Vì vậy, hãy cố gắng. 484 00:25:05,570 --> 00:25:08,000 Hãy bỏ qua bất cứ điều gì giá trị mà họ đầu vào cho n 485 00:25:08,000 --> 00:25:10,571 và chỉ nói int lứa tuổi trong những tiêu cực. 486 00:25:10,571 --> 00:25:12,410 Hãy xem nếu nó thậm chí biên dịch. 487 00:25:12,410 --> 00:25:14,100 Tôi không chắc. 488 00:25:14,100 --> 00:25:14,920 Không. 489 00:25:14,920 --> 00:25:18,280 Vì vậy, lứa tuổi được khai báo là một mảng với kích thước tiêu cực. 490 00:25:18,280 --> 00:25:22,540 Vì vậy, trả trước nó nhận ra một mảng có thể không có kích cỡ âm và bác bỏ nó. 491 00:25:22,540 --> 00:25:26,840 Bây giờ, nếu chúng ta không xử lý này vòng lặp do-while một cách chính xác, 492 00:25:26,840 --> 00:25:28,810 nếu chúng ta không kiểm tra nếu n là ít hơn 1-- 493 00:25:28,810 --> 00:25:32,690 hãy nói chúng tôi chỉ không có này ở tất cả các 494 00:25:32,690 --> 00:25:35,940 và thay vào đó chúng ta chỉ cần lấy một số nguyên. 495 00:25:35,940 --> 00:25:40,710 Không có vấn đề gì đó là số nguyên, chúng ta khai báo một mảng có kích thước đó. 496 00:25:40,710 --> 00:25:44,250 >> Vì vậy, các trình biên dịch có thể không có thể phàn nàn bây giờ. 497 00:25:44,250 --> 00:25:48,780 Nếu tôi biên dịch this-- do đó, nó không thể phàn nàn, 498 00:25:48,780 --> 00:25:51,480 bởi vì nó không thể biết rằng tôi sẽ nhập một số âm, 499 00:25:51,480 --> 00:25:52,550 mà có thể là không hợp lệ. 500 00:25:52,550 --> 00:25:54,633 Đối với tất cả nó biết, tôi có thể nhập một số dương, 501 00:25:54,633 --> 00:25:56,000 đó là hoàn toàn hợp lệ. 502 00:25:56,000 --> 00:26:01,090 Vì vậy, tôi tưởng tượng nếu tôi nhập âm 1 người trong phòng, Segmentation Fault. 503 00:26:01,090 --> 00:26:06,040 >> Vì vậy, OK. 504 00:26:06,040 --> 00:26:13,160 Vì vậy, hãy thêm điều này lại chỉ giữ cho nó những gì nó ban đầu là. 505 00:26:13,160 --> 00:26:15,640 Vì vậy, làm cho các lứa tuổi. 506 00:26:15,640 --> 00:26:18,120 Bây giờ nếu tôi muốn thử một tiêu cực age-- vì vậy chúng ta 507 00:26:18,120 --> 00:26:19,710 nói có năm người trong phòng. 508 00:26:19,710 --> 00:26:23,180 Tuổi của người số một là tiêu cực 4, người ba 509 00:26:23,180 --> 00:26:26,500 là số không, người three-- OK. 510 00:26:26,500 --> 00:26:29,850 Vì vậy, ở đây, một năm kể từ bây giờ, số người ai sẽ là âm 3 tuổi. 511 00:26:29,850 --> 00:26:32,830 Vì vậy, có lẽ không có ý nghĩa. 512 00:26:32,830 --> 00:26:37,220 Nhưng đó chỉ là vì tìm kiếm vào mã tất cả chúng ta đang làm 513 00:26:37,220 --> 00:26:40,260 được yêu cầu getInt. 514 00:26:40,260 --> 00:26:44,110 >> Bây giờ, nếu chúng ta đã có GetPositiveInt chức năng 515 00:26:44,110 --> 00:26:49,690 hoặc chúng tôi đã chỉ đơn giản là làm điều này loại cùng một vòng lặp trong khi xuống đó, 516 00:26:49,690 --> 00:26:52,340 sau đó điều này sẽ làm việc hoàn toàn tốt đẹp. 517 00:26:52,340 --> 00:26:54,200 Nhưng đặc biệt này trường hợp, chúng ta chỉ cần không 518 00:26:54,200 --> 00:26:57,772 xảy ra được xử lý giá trị âm. 519 00:26:57,772 --> 00:26:59,147 Bất kỳ câu hỏi khác về mảng? 520 00:26:59,147 --> 00:27:02,290 521 00:27:02,290 --> 00:27:03,250 ĐƯỢC. 522 00:27:03,250 --> 00:27:09,380 >> Vì vậy, bây giờ chúng tôi đã nhìn thấy mảng. 523 00:27:09,380 --> 00:27:12,500 Và chúng ta sẽ cần phải sử dụng này cho các đối số dòng lệnh. 524 00:27:12,500 --> 00:27:14,680 Vì vậy, trong vấn đề thiết two-- Tôi biết nhiều bạn 525 00:27:14,680 --> 00:27:18,040 vẫn có thể được làm việc về vấn đề tập hợp một, nhưng vấn đề đặt hai là đến. 526 00:27:18,040 --> 00:27:22,260 Trong vấn đề đặt hai, bạn sẽ cần phải được xử lý xâu, mảng, 527 00:27:22,260 --> 00:27:23,950 và đối số dòng lệnh. 528 00:27:23,950 --> 00:27:26,270 >> Đối số dòng lệnh như vậy là gì? 529 00:27:26,270 --> 00:27:29,570 Bây giờ, bạn có thể nhìn thấy xuống đây một ít teaser cho chính xác những gì 530 00:27:29,570 --> 00:27:30,950 sẽ xảy ra. 531 00:27:30,950 --> 00:27:32,950 Chúng ta thấy int main, argc inc, ngoặc chuỗi argv. 532 00:27:32,950 --> 00:27:34,560 533 00:27:34,560 --> 00:27:38,130 Vì vậy, đầu tiên chúng ta hãy cố gắng để giải thích gì đó là cố gắng để nói. 534 00:27:38,130 --> 00:27:40,800 Bây giờ, OK. 535 00:27:40,800 --> 00:27:44,637 >> Vì vậy, tại các dòng lệnh, bạn nên có làm quen với một số lệnh này 536 00:27:44,637 --> 00:27:48,580 bây giờ, và bạn đã có thể chạy cd tại nhà ga trước. 537 00:27:48,580 --> 00:27:52,100 Vì vậy, nếu chúng ta nói cd pset1, Bạn có biết rằng rằng nên 538 00:27:52,100 --> 00:27:55,050 được thay đổi vào thư mục pset1. 539 00:27:55,050 --> 00:27:59,120 >> Bây giờ nhận thấy rằng bạn đã không bao giờ viết một chương trình như thế này trước đây. 540 00:27:59,120 --> 00:28:03,120 Mỗi chương trình mà bạn đã viết, bạn sẽ chạy, nói, chấm giảm Mario, 541 00:28:03,120 --> 00:28:06,779 dot giảm tham lam, và sau đó nó có thể nhắc bạn cho đầu vào. 542 00:28:06,779 --> 00:28:08,570 Bây giờ, đó không phải là những gì thay đổi thư mục nào. 543 00:28:08,570 --> 00:28:12,770 Khi bạn chạy cd, không thì nói, mà thư mục nào bạn muốn vào cd? 544 00:28:12,770 --> 00:28:17,200 Thay vào đó, bạn chỉ cần nói, cd pset1, và nó chỉ đi vào thư mục pset1. 545 00:28:17,200 --> 00:28:20,430 >> Vì vậy, tương tự như vậy, chúng tôi có những ví dụ khác. 546 00:28:20,430 --> 00:28:21,540 làm hello. 547 00:28:21,540 --> 00:28:25,760 Khi bạn chạy làm, không thì nói, mà chương trình bạn muốn thực hiện? 548 00:28:25,760 --> 00:28:29,620 Bạn chỉ cần nói, tại dòng lệnh làm hello. 549 00:28:29,620 --> 00:28:31,060 >> Động thái này là một ví dụ khác. 550 00:28:31,060 --> 00:28:34,840 Điều này chúng ta đang di chuyển mario.c nộp lên một thư mục. 551 00:28:34,840 --> 00:28:38,060 Vì vậy, bây giờ chúng ta biết với ví dụ này chúng tôi đang thực sự đi qua hai đối số. 552 00:28:38,060 --> 00:28:42,090 Có mario.c như là đối số đầu tiên, và chấm chấm là số thứ hai. 553 00:28:42,090 --> 00:28:46,140 Và sau đó khi bạn chạy thực hiện, bạn thấy rằng yêu thực sự dài line-- 554 00:28:46,140 --> 00:28:50,580 lệnh này thực sự lâu dài in tại dòng lệnh. 555 00:28:50,580 --> 00:28:53,590 Vì vậy mà lâu command-- này chỉ là một phần ngắn của nó, 556 00:28:53,590 --> 00:28:56,090 nhưng bây giờ chúng tôi có ba đối số dòng lệnh. 557 00:28:56,090 --> 00:28:59,750 Dot gạch ngang bằng không, xin chào, và hello.c. 558 00:28:59,750 --> 00:29:03,497 >> Vì vậy, đây là những dòng lệnh lập luận, tranh luận 559 00:29:03,497 --> 00:29:05,580 rằng bạn đang đi qua tại dòng lệnh để nó 560 00:29:05,580 --> 00:29:08,680 không phải được nhắc nhở khi bạn chạy chương trình. 561 00:29:08,680 --> 00:29:13,090 Nó sẽ là bực bội nếu khi bạn chạy kêu nó nói, "OK, 562 00:29:13,090 --> 00:29:15,630 mà program-- mà tập tin được bạn biên dịch? 563 00:29:15,630 --> 00:29:17,010 Hello.c. 564 00:29:17,010 --> 00:29:19,440 Có gì cờ phải không muốn nhập? dash o. 565 00:29:19,440 --> 00:29:21,190 Bạn muốn gì các tập tin được gọi là? 566 00:29:21,190 --> 00:29:21,690 hello. 567 00:29:21,690 --> 00:29:25,290 Không, bạn chỉ cần chạy kêu vang dash o chào hello.c. 568 00:29:25,290 --> 00:29:28,820 >> Vì vậy, nhìn lại này. 569 00:29:28,820 --> 00:29:32,920 Bây giờ argc argc-- là tội đối số. 570 00:29:32,920 --> 00:29:36,620 Đó là số của dòng lệnh đối số được nhập vào dòng lệnh. 571 00:29:36,620 --> 00:29:39,720 Vâng, argv-- kỹ thuật v là viết tắt của vector, 572 00:29:39,720 --> 00:29:41,460 mà về cơ bản có nghĩa là mảng. 573 00:29:41,460 --> 00:29:42,680 Nhưng bạn có thể bỏ qua điều đó. 574 00:29:42,680 --> 00:29:47,540 Argv-- chúng ta có chuỗi argv, vì vậy ngoặc chuỗi argv. 575 00:29:47,540 --> 00:29:50,150 Vì vậy, đây là một hình thức ngoặc bạn chưa từng thấy trước đây. 576 00:29:50,150 --> 00:29:52,300 Vì vậy, chúng tôi đã nhìn thấy khung ký hiệu khi chúng tôi đã nói, 577 00:29:52,300 --> 00:29:53,970 như, chuỗi s bằng Zamyla. 578 00:29:53,970 --> 00:29:56,910 s khung 0 truy cập các ký tự Z. 579 00:29:56,910 --> 00:30:00,720 >> Chúng tôi cũng đã nhìn thấy dấu ngoặc cùng chúng tôi đã nói int tuổi khung 5. 580 00:30:00,720 --> 00:30:03,160 Đó là tuyên bố một mảng có kích thước 5. 581 00:30:03,160 --> 00:30:06,280 Vì vậy, đây là một phiên bản của ngoặc, chúng tôi đã không nhìn thấy trước. 582 00:30:06,280 --> 00:30:09,630 Vì vậy, loại này của chuỗi argv mà sẽ hoàn toàn quen thuộc 583 00:30:09,630 --> 00:30:12,050 rằng nó sẽ chỉ là một chuỗi. 584 00:30:12,050 --> 00:30:14,520 Bây giờ các dấu ngoặc chỉ ra rằng đây là một mảng. 585 00:30:14,520 --> 00:30:19,920 Vì vậy, khung chuỗi argv phương tiện argv đó là một mảng của chuỗi. 586 00:30:19,920 --> 00:30:22,540 Bây giờ kỹ thuật một chuỗi là một mảng ký tự. 587 00:30:22,540 --> 00:30:26,400 Vì vậy, điều này bây giờ là một mảng của một mảng ký tự. 588 00:30:26,400 --> 00:30:31,490 Nhưng nó dễ dàng hơn nhiều để suy nghĩ về đây là chỉ là một mảng của chuỗi. 589 00:30:31,490 --> 00:30:34,900 >> Vậy tại sao các dấu ngoặc đơn có thể là sản phẩm nào? 590 00:30:34,900 --> 00:30:38,170 Giống như, tại sao chúng ta không thể nói, khung 5, khung n? 591 00:30:38,170 --> 00:30:40,700 592 00:30:40,700 --> 00:30:41,200 Yeah. 593 00:30:41,200 --> 00:30:43,731 594 00:30:43,731 --> 00:30:44,230 Yeah. 595 00:30:44,230 --> 00:30:46,396 Chúng tôi không biết có bao nhiêu đầu vào có đang có được. 596 00:30:46,396 --> 00:30:53,560 Vì vậy, nếu chúng ta nhìn vào ví dụ kêu vang, chúng ta nói Clang dash o chào hello.c. 597 00:30:53,560 --> 00:30:56,710 Trong trường hợp cụ thể này, có xảy ra có ba đối số dòng lệnh. 598 00:30:56,710 --> 00:31:00,522 Và do đó, chúng ta sẽ thấy brackets-- trong một giây nó sẽ không có ba. 599 00:31:00,522 --> 00:31:01,730 Kỹ thuật nó sẽ là bốn. 600 00:31:01,730 --> 00:31:04,030 Nhưng các dấu ngoặc đơn, chúng tôi sẽ nói rằng, có ba. 601 00:31:04,030 --> 00:31:08,220 Nhưng bây giờ nếu chúng ta nhìn vào động thái mario.c dot dot, các dấu ngoặc 602 00:31:08,220 --> 00:31:09,760 chúng tôi muốn đưa hai trong họ. 603 00:31:09,760 --> 00:31:12,884 >> Và có rất nhiều các lệnh có một số biến của các dòng lệnh 604 00:31:12,884 --> 00:31:13,620 đối số. 605 00:31:13,620 --> 00:31:17,430 Vì vậy, những phiên bản này của ký hiệu khung chỉ 606 00:31:17,430 --> 00:31:20,820 là argv là một mảng của chuỗi. 607 00:31:20,820 --> 00:31:24,360 Nhưng chúng tôi không biết có bao nhiêu dây là trong mảng đó. 608 00:31:24,360 --> 00:31:27,090 Và làm thế nào để chúng ta có biết làm thế nào nhiều chuỗi trong mảng? 609 00:31:27,090 --> 00:31:28,870 Đó là điểm toàn argc. 610 00:31:28,870 --> 00:31:32,300 argc cho chúng ta biết bao lâu argv là. 611 00:31:32,300 --> 00:31:36,500 >> Vì vậy, điều cuối cùng để giữ nhớ là, về mặt kỹ thuật, 612 00:31:36,500 --> 00:31:40,820 lệnh của chính nó tính là một của các đối số dòng lệnh. 613 00:31:40,820 --> 00:31:45,330 Vì vậy, cd pset1, có hai đối số dòng lệnh. 614 00:31:45,330 --> 00:31:50,260 Các chương trình của riêng mình, cd, và sau đó phần tranh luận thực tế của nó, pset1. 615 00:31:50,260 --> 00:31:54,490 Bất kỳ chương trình mà bạn đã viết vậy, đến nay đã có một dòng lệnh argument-- dot 616 00:31:54,490 --> 00:31:55,320 giảm Mario. 617 00:31:55,320 --> 00:31:57,350 Đó là các đối số dòng lệnh chỉ. 618 00:31:57,350 --> 00:32:00,900 >> Vì vậy, bây giờ nhìn clang dash o chào hello.c. 619 00:32:00,900 --> 00:32:01,905 Vì vậy, argc là gì? 620 00:32:01,905 --> 00:32:05,260 621 00:32:05,260 --> 00:32:06,080 4. 622 00:32:06,080 --> 00:32:08,140 Vì vậy, argc là 4. 623 00:32:08,140 --> 00:32:12,140 Clang, vì vậy argv khung 0 là kêu vang. 624 00:32:12,140 --> 00:32:15,630 argv khung 1 là dash 0. 625 00:32:15,630 --> 00:32:21,870 argv khung 2 là hello, và argv khung 3 là hello.c. 626 00:32:21,870 --> 00:32:26,813 OK, vì vậy câu hỏi về điều này, và sau đó chúng tôi sẽ xem xét một số ví dụ về chương trình. 627 00:32:26,813 --> 00:32:29,460 628 00:32:29,460 --> 00:32:30,480 >> ĐƯỢC. 629 00:32:30,480 --> 00:32:36,260 Vì vậy, chúng ta sẽ có một cái nhìn tại hello3.c. 630 00:32:36,260 --> 00:32:41,890 Vì vậy, đây nên quen thuộc từ một trong những ví dụ đầu tiên c 631 00:32:41,890 --> 00:32:45,800 chúng tôi đã có nơi, chúng tôi sẽ chỉ nói, hello thế giới, nhưng bây giờ điều này là tổng quát hơn. 632 00:32:45,800 --> 00:32:52,300 Vì vậy, ở đây chúng ta đang nói xin chào khung argv backslash n% s 1. 633 00:32:52,300 --> 00:32:57,440 Notice-- vậy cho đến thời điểm này, đây là những tập tin mẫu của tôi đã như thế nào. 634 00:32:57,440 --> 00:33:01,800 Tôi đã có int main (void), và sau đó tôi sẽ làm một cái gì đó trong các chức năng chính. 635 00:33:01,800 --> 00:33:05,100 Bây giờ thay vào đó, một khi chúng ta bắt đầu giao dịch với các đối số dòng lệnh, 636 00:33:05,100 --> 00:33:07,890 chúng ta cần phải nêu một hình thức khác nhau của chính. 637 00:33:07,890 --> 00:33:11,930 >> Vì vậy, nhìn vào hello3 một lần nữa, chính là có 638 00:33:11,930 --> 00:33:15,990 để mất hai đối số now-- int argc, số lượng các đối số dòng lệnh, 639 00:33:15,990 --> 00:33:20,970 và chuỗi argv ngoặc, thực tế chuỗi nhập vào dòng lệnh. 640 00:33:20,970 --> 00:33:26,560 Vì vậy, tôi sẽ thay đổi điều đó mẫu để phản ánh thực tế đó. 641 00:33:26,560 --> 00:33:29,060 Bây giờ mỗi khi bạn viết một chương trình, nếu bạn không 642 00:33:29,060 --> 00:33:33,720 cần phải thực hiện bất kỳ dòng lệnh đối số, sau đó chỉ cần sử dụng int main (void). 643 00:33:33,720 --> 00:33:37,070 Nhưng bây giờ khi bạn đang viết chương trình đối số dòng lệnh, mà 644 00:33:37,070 --> 00:33:40,350 bạn đang đi để được làm cho vấn đề thiết two-- vì vậy bây giờ rằng bạn đang chạy 645 00:33:40,350 --> 00:33:42,630 chương trình đó cần phải thực hiện đối số dòng lệnh, 646 00:33:42,630 --> 00:33:45,250 bạn cần phải có chính của hình thức này. 647 00:33:45,250 --> 00:33:51,290 >> Vì vậy here-- này là việc sử dụng lớn của các đối số dòng lệnh. 648 00:33:51,290 --> 00:33:54,100 Vì vậy, in argv 1. 649 00:33:54,100 --> 00:33:59,180 OK vậy hãy biên dịch và chạy chương trình này. 650 00:33:59,180 --> 00:34:02,440 Hãy hello3. 651 00:34:02,440 --> 00:34:03,570 Biên dịch. 652 00:34:03,570 --> 00:34:06,870 Dot giảm hello3. 653 00:34:06,870 --> 00:34:08,920 Và hãy nói, "Rob." 654 00:34:08,920 --> 00:34:10,760 Xin chào Rob. 655 00:34:10,760 --> 00:34:14,940 Nếu tôi nói, "hello Maria," hello Maria. 656 00:34:14,940 --> 00:34:15,719 Xin chào Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah vẫn nói: "hello Maria, "vì tôi không 658 00:34:18,639 --> 00:34:21,340 làm bất cứ điều gì với argv của chúng tôi 2. 659 00:34:21,340 --> 00:34:22,590 Argv 2 bây giờ sẽ là "Hannah." 660 00:34:22,590 --> 00:34:25,030 Argc sẽ là 3. 661 00:34:25,030 --> 00:34:27,735 Nếu tôi đã làm điều này? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Vì vậy, xin chào null. 664 00:34:34,679 --> 00:34:38,760 >> Ông nhanh chóng chạm vào thực tế rằng, về mặt kỹ thuật, GetString 665 00:34:38,760 --> 00:34:42,429 có thể trả về null, nhưng chúng tôi sẽ có được một nhiều hơn vào những gì thực sự là rỗng. 666 00:34:42,429 --> 00:34:47,449 Nhưng lấy nó như là một vấn đề thực tế là không có nói chung là xấu. 667 00:34:47,449 --> 00:34:50,179 Chúng tôi đã làm điều gì sai nếu nó in "hello null." 668 00:34:50,179 --> 00:34:52,179 Và lý do chúng tôi đã làm một cái gì đó sai is-- tốt, 669 00:34:52,179 --> 00:34:56,179 khi tôi chạy dot slash hello3, argc là 1. 670 00:34:56,179 --> 00:34:59,680 Vậy có nghĩa là chiều dài của argv là 1. 671 00:34:59,680 --> 00:35:05,110 Nếu một mảng có chiều dài 1, các chỉ số chỉ có giá trị là số không. 672 00:35:05,110 --> 00:35:08,550 Và do đó, đây là 1 argv ngoài phạm vi của mảng này. 673 00:35:08,550 --> 00:35:13,410 Nó tương tự như trước khi tôi đã cố gắng để lưu trữ 6 bên ngoài vào cuối mảng. 674 00:35:13,410 --> 00:35:18,100 Vì vậy, tôi đang cố gắng để truy cập vào một cái gì đó bên ngoài của tội argv, 675 00:35:18,100 --> 00:35:21,340 và chúng tôi đang nhận được null. 676 00:35:21,340 --> 00:35:24,360 >> Vì vậy, một phiên bản tốt hơn này, một sự cải tiến, 677 00:35:24,360 --> 00:35:27,010 được kiểm tra một cách rõ ràng argc. 678 00:35:27,010 --> 00:35:33,580 Vì vậy, nếu argc bằng 2, có nghĩa là chúng tôi chạy một cái gì đó giống như dấu chấm dấu gạch chéo hello3 Rob. 679 00:35:33,580 --> 00:35:36,840 Và nó sẽ in "hello Rob." 680 00:35:36,840 --> 00:35:39,850 Nếu argc không bằng 2, sau đó nó chỉ cần đi 681 00:35:39,850 --> 00:35:42,560 để bỏ qua bất cứ điều gì bạn đặt tại các đối số dòng lệnh 682 00:35:42,560 --> 00:35:43,960 như các đối số dòng lệnh. 683 00:35:43,960 --> 00:35:47,168 Hoặc nếu bạn không đặt bất kỳ ở tất cả, nó là chỉ cần đi để bỏ qua điều đó và chỉ nói, 684 00:35:47,168 --> 00:35:47,960 "chào bạn." 685 00:35:47,960 --> 00:35:51,490 >> Vì vậy, biên dịch này. 686 00:35:51,490 --> 00:35:54,500 Hãy hello4. 687 00:35:54,500 --> 00:35:56,790 Và chạy hello4. 688 00:35:56,790 --> 00:36:00,010 Chạy nó theo cách này, những gì sẽ được in? 689 00:36:00,010 --> 00:36:01,330 "Chào bạn." 690 00:36:01,330 --> 00:36:02,810 Chào bạn. 691 00:36:02,810 --> 00:36:05,870 Những gì về hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Xin chào Rob." 693 00:36:06,950 --> 00:36:10,580 Và cuối cùng, xin chào Rob Maria chỉ là "hello Bạn" một lần nữa, 694 00:36:10,580 --> 00:36:13,677 bởi vì bạn đã không thực sự nhập cái gì mà nó mong đợi. 695 00:36:13,677 --> 00:36:15,510 Bạn đã nhập tên hơn hơn nó có thể xử lý, 696 00:36:15,510 --> 00:36:19,500 vì vậy nó chỉ mặc định để hello bạn hành vi. 697 00:36:19,500 --> 00:36:23,040 Vì vậy, câu hỏi về điều này? 698 00:36:23,040 --> 00:36:26,290 Hoặc đối số dòng lệnh? 699 00:36:26,290 --> 00:36:28,690 >> OK, vì vậy dùng một cái nhìn tại một thêm vài ví dụ về cách sử dụng 700 00:36:28,690 --> 00:36:34,230 dòng lệnh arguments-- đầu tiên chúng tôi đã argv dash 1 dot c. 701 00:36:34,230 --> 00:36:38,510 Vì vậy, các ý kiến ​​cho đi những gì chương trình này nên được thực hiện. 702 00:36:38,510 --> 00:36:42,460 Nhưng chú ý now-- này cho vòng lặp, này phù hợp với mô hình chính xác 703 00:36:42,460 --> 00:36:43,390 Tôi đã nói trước. 704 00:36:43,390 --> 00:36:46,240 Chúng tôi chỉ xảy ra được sử dụng argc thay vì n. 705 00:36:46,240 --> 00:36:48,880 Bây giờ argc thực sự là n. 706 00:36:48,880 --> 00:36:51,260 Đó là chiều dài của mảng argv. 707 00:36:51,260 --> 00:36:59,600 Vì vậy, được lặp trong argv mảng printf-ing mỗi giá trị argv. 708 00:36:59,600 --> 00:37:04,730 >> Vì vậy, nếu tôi thực hiện điều này. 709 00:37:04,730 --> 00:37:08,232 Hãy argv 1. 710 00:37:08,232 --> 00:37:09,940 Nó biên dịch. 711 00:37:09,940 --> 00:37:11,620 Dot giảm argv 1. 712 00:37:11,620 --> 00:37:15,530 Chỉ cần chạy này, nó in chấm slash argv 1 713 00:37:15,530 --> 00:37:18,500 vì đó là chỉ dòng lệnh argument-- tên chương trình. 714 00:37:18,500 --> 00:37:22,080 Sẽ luôn có tại least-- argc không thể ít hơn một, 715 00:37:22,080 --> 00:37:25,910 vì luôn có sẽ ít nhất là tên chương trình để chạy. 716 00:37:25,910 --> 00:37:32,040 Vì vậy, argv 1 Rob sẽ in argv 1 và sau đó trên các dòng mới "Rob." 717 00:37:32,040 --> 00:37:36,350 >> Vì vậy, trong phiên đầu tiên của vòng lặp này, tôi là 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 là tên chương trình. 719 00:37:39,090 --> 00:37:40,010 Dot giảm argv 1. 720 00:37:40,010 --> 00:37:43,770 Và sau đó argv 1 là đầu tiên của tôi đối số dòng lệnh, đó là Rob. 721 00:37:43,770 --> 00:37:45,920 Tại thời điểm này, chúng ta đều bình đẳng để argc. 722 00:37:45,920 --> 00:37:48,210 Chúng tôi thoát ra khỏi vòng lặp và chúng tôi đang thực hiện. 723 00:37:48,210 --> 00:37:53,940 Vì vậy, điều này sẽ làm việc cho một tùy ý số lượng các đối số dòng lệnh. 724 00:37:53,940 --> 00:37:58,550 Chú ý nó in argv 0, argv 1, argv 2, argv 3, argv 4. 725 00:37:58,550 --> 00:38:00,150 Và không có argv 5. 726 00:38:00,150 --> 00:38:01,460 argc là bằng 5. 727 00:38:01,460 --> 00:38:06,960 Vì vậy, tại argc-- tại i = 5, chúng ta thoát ra khỏi vòng lặp. 728 00:38:06,960 --> 00:38:07,950 ĐƯỢC. 729 00:38:07,950 --> 00:38:11,315 Vì vậy, câu hỏi về điều đó trước khi chúng tôi xem xét một ví dụ phức tạp hơn? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Vì vậy, argv 2. 732 00:38:16,860 --> 00:38:17,830 Được rồi. 733 00:38:17,830 --> 00:38:20,610 Vì vậy, chúng tôi vẫn đang in các đối số dòng lệnh. 734 00:38:20,610 --> 00:38:23,170 Nhưng bây giờ, chúng tôi nhận thấy có một lồng nhau cho vòng lặp. 735 00:38:23,170 --> 00:38:24,670 Vì vậy, những gì là điều này đang làm gì? 736 00:38:24,670 --> 00:38:28,430 Vì vậy, các vòng lặp đầu tiên được làm chính xác những gì nó đã làm trước. 737 00:38:28,430 --> 00:38:30,950 Chúng tôi vẫn đang Looping trên mỗi đối số dòng lệnh, 738 00:38:30,950 --> 00:38:34,260 nhưng bây giờ loop-- thứ hai này, chúng tôi đã cũng nhìn thấy một cái gì đó như thế này trước đây. 739 00:38:34,260 --> 00:38:38,600 Khi ông được lặp qua Zamyla in ra Z-A-M-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Vì vậy vòng lặp thứ hai này cho int j bằng 0, n bằng strlen của khung argv i. 741 00:38:44,816 --> 00:38:49,170 >> Vì vậy, trước tiên hãy suy nghĩ cho the-- hãy đi bộ qua. 742 00:38:49,170 --> 00:38:53,560 Hãy suy nghĩ những gì máy tính sẽ làm gì nếu tôi chạy chương trình này là chỉ chấm 743 00:38:53,560 --> 00:38:56,030 giảm argv dash 2. 744 00:38:56,030 --> 00:39:03,590 Vì vậy, nếu tôi chạy mã này, sau đó argc là có được bằng 1. 745 00:39:03,590 --> 00:39:07,050 Và chuỗi argv-- có chỉ sẽ là một chỉ số trong argv, 746 00:39:07,050 --> 00:39:12,370 và đó sẽ là bằng nhau để chấm giảm argv 2-- tên chương trình. 747 00:39:12,370 --> 00:39:19,170 >> OK, vậy bây giờ tôi có bằng 0, i ít hơn 1, i cộng với cộng với int j bằng 0, 748 00:39:19,170 --> 00:39:23,880 n bằng strlen của khung argv 0, vì vậy trong phiên đầu tiên của vòng lặp này. argv 749 00:39:23,880 --> 00:39:27,250 khung 0 là dấu chấm dấu gạch chéo argv 2. 750 00:39:27,250 --> 00:39:29,320 Vì vậy, chiều dài của chuỗi đó là gì? 751 00:39:29,320 --> 00:39:32,480 Vâng, chấm slash A-R-G-V dash 2. 752 00:39:32,480 --> 00:39:35,020 Vì vậy, strlen đó sẽ là 8. 753 00:39:35,020 --> 00:39:37,500 Vì vậy, j bằng 0, n bằng 8. 754 00:39:37,500 --> 00:39:39,530 Miễn là j là ít hơn 8, j ++. 755 00:39:39,530 --> 00:39:44,080 Và với điều đó, chúng ta sẽ được in một nhân vật duy nhất, mà 756 00:39:44,080 --> 00:39:47,350 là argv khung khung I j. 757 00:39:47,350 --> 00:39:49,826 >> Vì vậy, tôi chỉ là số không. 758 00:39:49,826 --> 00:39:51,700 Chúng tôi vẫn chỉ có một đối số dòng lệnh. 759 00:39:51,700 --> 00:39:53,890 Trong phiên đầu tiên của vòng lặp, chúng tôi 760 00:39:53,890 --> 00:39:56,950 sẽ được in ấn argv khung khung 0 0. 761 00:39:56,950 --> 00:39:58,325 Và sau đó j là sẽ tăng. 762 00:39:58,325 --> 00:40:01,650 Và chúng ta sẽ in argv khung 0 1 khung. 763 00:40:01,650 --> 00:40:04,150 Và sau đó argv khung khung 0 2. 764 00:40:04,150 --> 00:40:09,030 >> Vì vậy, đây là cuộc gặp gỡ đầu tiên của chúng tôi của mảng đa chiều. 765 00:40:09,030 --> 00:40:12,770 Ghi trước đó rằng tôi nói argv đó là về mặt kỹ thuật 766 00:40:12,770 --> 00:40:15,950 một mảng của mảng ký tự. 767 00:40:15,950 --> 00:40:24,360 Vì vậy, ở đây nếu tôi nói điều gì đó như chuỗi s bằng khung argv i, 768 00:40:24,360 --> 00:40:29,590 và sau đó tôi đã nói, s khung j, điều này sẽ hoàn thành những điều tương tự. 769 00:40:29,590 --> 00:40:31,960 Bây giờ, bạn đã thấy s khung j trước. 770 00:40:31,960 --> 00:40:36,680 Đó chỉ là truy cập j-th nhân vật của chuỗi này. 771 00:40:36,680 --> 00:40:48,010 Vì vậy, với điều này, chúng tôi đang nhận được sự j-th nhân vật của i-th argv. 772 00:40:48,010 --> 00:40:51,450 >> Vì vậy, những gì nên điều này cuối cùng đầu ra? 773 00:40:51,450 --> 00:40:53,210 Hãy argv 2. 774 00:40:53,210 --> 00:40:54,730 Nó biên dịch. 775 00:40:54,730 --> 00:40:56,340 Dot giảm argv 2. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah," và cung cấp cho chúng tôi một số phòng. 777 00:41:03,790 --> 00:41:07,050 Vì vậy, chúng ta thấy rằng điều này là xuất dot trên đường dây và dấu gạch chéo của riêng mình 778 00:41:07,050 --> 00:41:08,920 trên đường dây riêng của mình và trên một dòng riêng. 779 00:41:08,920 --> 00:41:11,260 Nó in ra mỗi nhân vật cá nhân 780 00:41:11,260 --> 00:41:12,950 của từng đối số dòng lệnh. 781 00:41:12,950 --> 00:41:15,960 Và sau đó ở giữa chúng, vì dòng này mới 782 00:41:15,960 --> 00:41:19,380 chúng tôi đang in xuống đây, trong giữa chúng nó sẽ in một dòng mới. 783 00:41:19,380 --> 00:41:24,540 >> Vì vậy, đây là tương tự như các dấu gạch ngang argv trước 1, 784 00:41:24,540 --> 00:41:26,459 mà in mỗi đối số dòng lệnh, 785 00:41:26,459 --> 00:41:28,500 nhưng bây giờ chúng tôi đang in các đối số dòng lệnh 786 00:41:28,500 --> 00:41:31,950 và sau đó lặp qua mỗi nhân vật của từng đối số dòng lệnh 787 00:41:31,950 --> 00:41:35,400 để có được kết quả này. 788 00:41:35,400 --> 00:41:36,870 ĐƯỢC? 789 00:41:36,870 --> 00:41:40,570 Vì vậy, câu hỏi về điều này? 790 00:41:40,570 --> 00:41:45,130 >> Một điều cần lưu ý là dòng lệnh arguments-- 791 00:41:45,130 --> 00:41:49,990 vì vậy chúng được phân cách bằng dấu như bạn sẽ tự nhiên mong họ được. 792 00:41:49,990 --> 00:41:53,050 Vì vậy, một chuỗi có thể có các khoảng trống trong đó. 793 00:41:53,050 --> 00:41:57,380 Đó không phải là siêu quan trọng, nhưng nếu tôi muốn các đối số dòng lệnh thứ ba 794 00:41:57,380 --> 00:42:01,226 để có một không gian trong nó, sau đó tôi có thể nói một cái gì đó như thế này. 795 00:42:01,226 --> 00:42:04,470 796 00:42:04,470 --> 00:42:05,550 ĐƯỢC? 797 00:42:05,550 --> 00:42:12,190 Vì vậy, điều này bây giờ vẫn chỉ có ba dòng lệnh arguments-- cũng 4. 798 00:42:12,190 --> 00:42:17,620 Dot giảm argv dash 2, Rob, Maria, và Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 ĐƯỢC. 800 00:42:18,320 --> 00:42:19,310 Các câu hỏi về điều này? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> Có gì đặc biệt về các nhân vật không gian. 803 00:42:24,894 --> 00:42:27,810 Nó chỉ xảy ra được rằng dòng lệnh đối xử với các nhân vật không gian 804 00:42:27,810 --> 00:42:29,226 như thế nào bạn tách từng đối số. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Được rồi. 807 00:42:33,000 --> 00:42:39,950 Vì vậy, sau đó vấn đề đặt two-- bạn sẽ được 808 00:42:39,950 --> 00:42:43,240 nhìn vào mật mã bí mật-key. 809 00:42:43,240 --> 00:42:47,700 Vì vậy, tương tự như ví dụ mà chúng ta đã thấy từ A Christmas Story, 810 00:42:47,700 --> 00:42:52,840 bạn sẽ được thực hiện một số các thuật toán đó, đưa ra một thông điệp, 811 00:42:52,840 --> 00:42:55,560 bạn đang đi để có thể để mã hóa thông điệp rằng 812 00:42:55,560 --> 00:42:58,730 mà chỉ có một người có bí mật mà quan trọng, với chiếc nhẫn giải mã, 813 00:42:58,730 --> 00:43:01,090 nên có thể giải mã. 814 00:43:01,090 --> 00:43:04,839 >> Vì vậy, đó là phiên bản tiêu chuẩn. 815 00:43:04,839 --> 00:43:07,130 Bạn sẽ được thực hiện hai phiên bản khác nhau. 816 00:43:07,130 --> 00:43:09,620 Nếu bạn xảy ra để có một cái nhìn tại các hacker Edition bây giờ, 817 00:43:09,620 --> 00:43:12,600 chúng tôi sẽ cung cấp cho bạn một chuỗi như thế này, 818 00:43:12,600 --> 00:43:15,240 đại diện cho một mật khẩu được mã hóa. 819 00:43:15,240 --> 00:43:19,990 Vì vậy, mục tiêu của bạn là để tìm ra những gì các mật khẩu giải mã được. 820 00:43:19,990 --> 00:43:26,950 Bây giờ điều này là thực sự như thế nào mật khẩu được lưu trữ trong rất nhiều máy tính, 821 00:43:26,950 --> 00:43:31,290 và nó chỉ lưu này chuỗi ngẫu nhiên của các nhân vật. 822 00:43:31,290 --> 00:43:34,440 Bạn phải tìm ra cách để có được từ chuỗi ngẫu nhiên này của nhân vật 823 00:43:34,440 --> 00:43:36,140 với những gì các mật khẩu ban đầu là. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> Và cuối cùng, sau này Vấn đề đặt, bạn nên 826 00:43:43,290 --> 00:43:46,100 có thể hiểu được ý nghĩa gì. 827 00:43:46,100 --> 00:43:51,650 Vì vậy, bạn sẽ tìm hiểu làm thế nào để giải mã sắp xếp của chuỗi ngẫu nhiên. 828 00:43:51,650 --> 00:43:56,390 Tương tự như vậy, nếu bạn nhớ từ tuần 0, bạn có thể đã thấy URL này. 829 00:43:56,390 --> 00:44:00,210 Và bạn sẽ có thể giải mã này cuối cùng. 830 00:44:00,210 --> 00:44:04,810 Bạn có thể không được hạnh phúc khi bạn giải mã nó và nhấp vào liên kết. 831 00:44:04,810 --> 00:44:05,700 Được rồi. 832 00:44:05,700 --> 00:44:06,591 Đó là nó cho ngày hôm nay. 833 00:44:06,591 --> 00:44:12,095 Vì vậy, nhìn thấy bạn trong tuần tới! 834 00:44:12,095 --> 00:44:18,315 >> [ELECTRONIC MUSIC CHƠI] 835 00:44:18,315 --> 00:47:15,619