1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [MUSIC CHƠI] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> Davin: Tất cả các bên phải, guys. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Vì vậy, đây là việc xem xét cho các bài kiểm tra đầu tiên. 7 00:00:15,350 --> 00:00:17,751 Là tất cả mọi người đã sẵn sàng cho các bài kiểm tra vào ngày thứ tư? 8 00:00:17,751 --> 00:00:18,292 ALLISON: Woo! 9 00:00:18,292 --> 00:00:18,743 HỌC SINH: Woo! 10 00:00:18,743 --> 00:00:19,242 Davin: Yeah. 11 00:00:19,242 --> 00:00:19,920 ALLISON: Yeah! 12 00:00:19,920 --> 00:00:20,920 Davin: Đó là của anh chàng sẵn sàng. 13 00:00:20,920 --> 00:00:22,200 Anh chàng, hai tay, tốt đẹp. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Vì vậy, xem xét bài kiểm tra ngày hôm nay, nó sẽ là khoảng một giờ rưỡi. 16 00:00:25,900 --> 00:00:27,940 Chúng tôi sẽ đi qua tất cả các chính khái niệm bạn nên biết cho các bài kiểm tra. 17 00:00:27,940 --> 00:00:31,434 Chúng ta sẽ đi qua một số mã hóa bằng ví dụ tay, đó là trên tất cả các bài kiểm tra. 18 00:00:31,434 --> 00:00:34,350 Và nếu bạn có câu hỏi, cảm thấy tự do để nâng cao tay của bạn và tất cả mọi thứ 19 00:00:34,350 --> 00:00:34,945 như thế. 20 00:00:34,945 --> 00:00:36,695 Vâng, hậu cần về các bài kiểm tra đang online. 21 00:00:36,695 --> 00:00:38,450 Vì vậy, chúng ta sẽ chia người lên vào các phòng khác nhau. 22 00:00:38,450 --> 00:00:39,491 Nó dựa trên tên của họ. 23 00:00:39,491 --> 00:00:43,630 Vì vậy, nếu bạn có bất kỳ câu hỏi về nơi để đi hoặc về những gì là vật chất, giống như, 24 00:00:43,630 --> 00:00:46,810 từ chính thức về những gì đang xảy để được vào các bài kiểm tra, kiểm tra trực tuyến. 25 00:00:46,810 --> 00:00:48,420 Và đó là tất cả đến nay. 26 00:00:48,420 --> 00:00:51,280 Vì vậy, nếu không có các câu hỏi để bắt đầu, chúng ta sẽ bắt đầu. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 Và đây là Allison. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [Vỗ tay] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK, cảm ơn, Rob. 32 00:00:59,300 --> 00:01:00,280 Đánh giá cao nó. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin nên đã lật sang này. 35 00:01:03,050 --> 00:01:07,240 Đây là danh sách không đầy đủ chủ đề, như mọi khi, như Davin vừa nói. 36 00:01:07,240 --> 00:01:10,860 Tham khảo tài liệu trực tuyến về bài kiểm tra không. 37 00:01:10,860 --> 00:01:13,680 Nhưng điều này là khá much-- nó trên các giáo trình 38 00:01:13,680 --> 00:01:15,550 là tất cả mọi thứ chúng tôi đã đi qua cho đến nay. 39 00:01:15,550 --> 00:01:18,290 Tất cả mọi thứ ở đây là trò chơi công bằng, cũng như bất cứ điều gì khác 40 00:01:18,290 --> 00:01:21,380 có thể đã được đề cập trong bài giảng. 41 00:01:21,380 --> 00:01:25,070 >> Phần tôi, ở đây, là chỉ cần rất nhiều đánh giá. 42 00:01:25,070 --> 00:01:27,775 Có một vài bài tập rằng các bạn có thể làm việc trên. 43 00:01:27,775 --> 00:01:30,650 Nhưng đối với hầu hết các phần, chúng tôi thực sự muốn để có được Davin với những người đang 44 00:01:30,650 --> 00:01:31,710 các bài tập tay. 45 00:01:31,710 --> 00:01:33,940 >> Vì vậy, tôi sẽ bay qua này. 46 00:01:33,940 --> 00:01:36,330 Nếu bạn có bất kỳ câu hỏi, dừng lại cho tôi. 47 00:01:36,330 --> 00:01:37,270 Nâng cao tay của bạn. 48 00:01:37,270 --> 00:01:39,250 Tôi hứa tôi có lẽ sẽ nhìn thấy bạn. 49 00:01:39,250 --> 00:01:41,042 Nếu không, chỉ cần vẫy nó xung quanh. 50 00:01:41,042 --> 00:01:42,250 Tôi sẽ nói chuyện nhanh chóng. 51 00:01:42,250 --> 00:01:43,950 Tôi hy vọng tất cả mọi người là OK với điều đó. 52 00:01:43,950 --> 00:01:48,020 >> OK, từ đặc biệt, Davin rõ ràng quên lướt qua các slide. 53 00:01:48,020 --> 00:01:51,880 [Cười] Bạn đang gặp rắc rối, người đàn ông. 54 00:01:51,880 --> 00:01:55,770 Vì vậy, lời khuyên cho bài kiểm tra không, thực hành mã hóa trên giấy. 55 00:01:55,770 --> 00:01:58,950 Các bạn sẽ nhận được một số thực hành với điều đó ngay bây giờ với Davin, 56 00:01:58,950 --> 00:02:00,655 vì vậy bạn sẽ không được hoàn toàn của chính mình. 57 00:02:00,655 --> 00:02:03,030 Tôi nghĩ rằng chúng tôi đang thực sự đi thông qua hai chức năng. 58 00:02:03,030 --> 00:02:04,500 Vì vậy, bạn sẽ được chuẩn bị tốt ở đó. 59 00:02:04,500 --> 00:02:05,958 >> Hãy làm quen với bộ vấn đề của bạn. 60 00:02:05,958 --> 00:02:08,150 Đã có câu hỏi về câu đố trước 61 00:02:08,150 --> 00:02:12,680 mà sẽ yêu cầu bạn, ví dụ, để mã hóa một cái gì đó rất giống với Mario. 62 00:02:12,680 --> 00:02:15,060 Vì vậy, là rất quen thuộc với vấn đề của bạn đặt ra, cũng 63 00:02:15,060 --> 00:02:17,827 là những câu hỏi chúng tôi yêu cầu bạn trong đầu về hình thức 64 00:02:17,827 --> 00:02:19,660 mà bạn điền vào, sẽ phục vụ bạn rất tốt. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> Làm một bài kiểm tra trước đó dưới những hạn chế thời gian. 67 00:02:23,380 --> 00:02:25,430 Những câu đố dài. 68 00:02:25,430 --> 00:02:26,850 Thời gian đi rất nhanh. 69 00:02:26,850 --> 00:02:30,480 Và thường xuyên, bạn không nhận ra như thế nào nhanh nó đi cho đến khi bạn thực sự 70 00:02:30,480 --> 00:02:32,180 đặt mình dưới những ràng buộc. 71 00:02:32,180 --> 00:02:36,500 Vì vậy, nếu bạn chỉ có thể cắt ra, bạn đã biết, 75 phút thi đấu, hoặc là tối nay hoặc ngày mai 72 00:02:36,500 --> 00:02:41,020 để có một trong những câu đố dưới đó, bạn sẽ có trong hình dạng tốt hơn nhiều. 73 00:02:41,020 --> 00:02:43,060 >> Và cũng có thể, tạo ra tờ tài liệu tham khảo của bạn. 74 00:02:43,060 --> 00:02:45,290 Hãy nhớ rằng, bạn sẽ có được một trước trang và trở lại 75 00:02:45,290 --> 00:02:47,040 như tài liệu tham khảo cho bài kiểm tra của bạn vào ngày thứ Tư. 76 00:02:47,040 --> 00:02:49,074 Tạo đó là một cách tuyệt vời để học tập. 77 00:02:49,074 --> 00:02:51,990 Bất cứ điều gì mà bạn đang gặp sự cố với bạn muốn bao gồm trong đó. 78 00:02:51,990 --> 00:02:55,627 Bất cứ điều gì TF của bạn có được, như thế, điều này thực sự quan trọng. 79 00:02:55,627 --> 00:02:57,960 Bạn nên biết điều này, là có lẽ những điều bạn có trong đó 80 00:02:57,960 --> 00:02:59,931 nếu bạn không có họ nhớ. 81 00:02:59,931 --> 00:03:02,680 Thậm chí nếu bạn biết họ thực sự tốt, đôi khi có nó trên có 82 00:03:02,680 --> 00:03:07,030 chỉ là loại thoải mái cho bạn, mà tôi biết câu đố rất căng thẳng. 83 00:03:07,030 --> 00:03:09,260 Vì vậy, bất cứ thoải mái mà bạn nhận được có thể giúp đỡ. 84 00:03:09,260 --> 00:03:13,072 Tất cả các bên phải, cũng, có được giấc ngủ và ăn và thích những điều bình thường 85 00:03:13,072 --> 00:03:14,280 mà chúng tôi cho bạn biết câu đố. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Vì vậy, bắt đầu ra dễ dàng, các kiểu dữ liệu và kích cỡ. 88 00:03:18,890 --> 00:03:22,720 Như tôi đã nói, điều này là chỉ cần đi được tôi ném rất nhiều thứ 89 00:03:22,720 --> 00:03:24,320 lên đây mà bạn nên biết. 90 00:03:24,320 --> 00:03:27,600 Vì vậy, chúng tôi có ký tự của chúng tôi đó là một byte, ints 91 00:03:27,600 --> 00:03:30,390 đó là bốn byte, dài dài, trong đó có tám byte. 92 00:03:30,390 --> 00:03:33,280 Về cơ bản, nó chỉ là bạn muốn giữ số nguyên lớn hơn. 93 00:03:33,280 --> 00:03:35,490 Floats, mà là bốn, tăng gấp đôi, trong đó có tám. 94 00:03:35,490 --> 00:03:38,150 Một lần nữa, chỉ cần cung cấp cho bạn nhiều hơn không gian cho các phao nổi của bạn. 95 00:03:38,150 --> 00:03:41,290 Và sau đó gõ sao, vì vậy bất kỳ con trỏ trên một máy tính 32-bit, 96 00:03:41,290 --> 00:03:44,650 mà là tất cả các bạn cần cho biết, là bốn byte. 97 00:03:44,650 --> 00:03:46,542 >> Vì vậy, tất cả những điều bạn cần biết, có thể điều 98 00:03:46,542 --> 00:03:48,250 bạn muốn có trên tờ tài liệu tham khảo của bạn. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 OK, chuyển đổi nhị phân nhị phân, chuyển đổi 101 00:03:53,520 --> 00:03:56,860 để hệ thập lục phân, qua lại, tất cả những điều bạn nên biết. 102 00:03:56,860 --> 00:03:59,480 Vì vậy, từ nhị phân sang thập phân. 103 00:03:59,480 --> 00:04:03,309 Các bạn muốn lấy một phút nhanh chóng và cố gắng tìm ra từng 104 00:04:03,309 --> 00:04:04,600 và sau đó nói cho tôi biết họ là ai? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> Tôi cũng có kẹo trong túi của tôi, vì vậy bất cứ ai người trả lời được kẹo, bằng cách này. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 Và tôi có rất nhiều của nó. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Hãy để tôi lấy này. 111 00:04:16,870 --> 00:04:18,480 Tôi sẽ đưa cái này cho Gabe. 112 00:04:18,480 --> 00:04:21,829 Vì vậy, bạn có thể trao kẹo cho ai là tốt đẹp và hợp tác xã. 113 00:04:21,829 --> 00:04:23,490 >> OK, tôi nhìn thấy một bàn tay có ở phía sau. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> HỌC SINH: Yeah, một trong những đầu tiên là 42. 116 00:04:28,370 --> 00:04:30,280 >> ALLISON: Vâng, đầu tiên là 42, chính xác. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 HỌC SINH: [không nghe được]. 119 00:04:32,038 --> 00:04:34,810 [Cười] 120 00:04:34,810 --> 00:04:37,030 ALLISON: Thứ hai một, có trở lại trong màu vàng? 121 00:04:37,030 --> 00:04:38,910 HỌC SINH: 110.010. 122 00:04:38,910 --> 00:04:43,410 ALLISON: Đúng, và điều này cuối cùng, xuống đây ở phía dưới? 123 00:04:43,410 --> 00:04:44,570 Ngoài ra, yeah, bạn muốn biết? 124 00:04:44,570 --> 00:04:45,550 Chỉ cần tung ra kẹo. 125 00:04:45,550 --> 00:04:46,483 Làm thế nào về kẹo cho tất cả mọi người? 126 00:04:46,483 --> 00:04:47,510 >> HỌC SINH: [không nghe được] khi chúng ta đang thực hiện. 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Shh. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 Và sau đó là người cuối cùng. 130 00:04:50,910 --> 00:04:52,000 Ai muốn trả lời? 131 00:04:52,000 --> 00:04:52,744 Ngay ở đó. 132 00:04:52,744 --> 00:04:54,480 >> HỌC SINH: 11.100. 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100, nhìn vào đó. 134 00:04:56,820 --> 00:04:58,790 Xin chúc mừng, công việc tuyệt vời, tất cả mọi người. 135 00:04:58,790 --> 00:05:03,370 OK, tất cả mọi người loại hiểu quá trình để làm điều này? 136 00:05:03,370 --> 00:05:08,700 Bạn đã, đi từ nhị phân sang thập phân cách tôi có xu hướng để làm điều đó, được viết ra 137 00:05:08,700 --> 00:05:09,920 các quyền hạn của 2. 138 00:05:09,920 --> 00:05:18,350 Vì vậy, tôi nói, OK, 0 lần 2-0, vì vậy đó là 0, 1 lần 2 đến đầu tiên, 139 00:05:18,350 --> 00:05:21,400 là 2 trở đi sẽ theo cách đó. 140 00:05:21,400 --> 00:05:25,790 Có ai muốn tôi một cách rõ ràng đi qua một ví dụ về nhị phân? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 OK, mát mẻ. 143 00:05:28,140 --> 00:05:30,390 >> Số thập phân sang nhị phân là rất giống nhau. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Tôi có xu hướng để viết ra các quyền hạn của 2. 146 00:05:33,630 --> 00:05:38,660 Bắt đầu với một trong đó là lớn nhất, nhưng không đi qua các số thập phân 147 00:05:38,660 --> 00:05:39,710 mà bạn đang tìm kiếm. 148 00:05:39,710 --> 00:05:42,870 Và sau đó loại làm việc theo cách của bạn ngược thêm những thứ cần thiết. 149 00:05:42,870 --> 00:05:45,200 >> Và sau đó với Ngoài ra, nó Ngoài ra giống như bình thường. 150 00:05:45,200 --> 00:05:51,110 Nếu bạn đã từng có trường hợp bạn thêm hai 1s, nó rõ ràng là trở thành 2. 151 00:05:51,110 --> 00:05:56,875 2 trong hệ nhị phân tại là 1 0 vì vậy bạn cần để thực hiện 1 của bạn vào các cột tiếp theo. 152 00:05:56,875 --> 00:05:57,375 Cool. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Hệ thập lục phân, điều này có thể là một cái gì đó đó là hơi ít quen thuộc. 155 00:06:03,240 --> 00:06:06,600 Vì vậy, như Rob chỉ nói với tôi trước, lừa ông này 156 00:06:06,600 --> 00:06:10,210 là chỉ cần tách nó ra thành bốn khối byte, OK? 157 00:06:10,210 --> 00:06:11,050 Bit, xin lỗi. 158 00:06:11,050 --> 00:06:11,720 Xem? 159 00:06:11,720 --> 00:06:12,220 Cảm ơn Rob. 160 00:06:12,220 --> 00:06:15,874 Đây là lý do tại sao bạn đang ở đây. [Tiếng ồn] OK, vì vậy chúng tôi chỉ phá vỡ nó lên 161 00:06:15,874 --> 00:06:16,790 thành bốn bit khối. 162 00:06:16,790 --> 00:06:21,570 Vì vậy, với những chương trình để hệ thập lục phân, chúng ta nhìn vào đầu tiên 4, 163 00:06:21,570 --> 00:06:25,573 đó là nếu chúng tôi có bốn 1s trong một hàng, những gì số lượng không tượng trưng? 164 00:06:25,573 --> 00:06:26,540 >> HỌC SINH: F. 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: Vì vậy, trong trường hợp này, 11111111 or-- có là gì? 166 00:06:32,751 --> 00:06:33,250 HỌC SINH: FF. 167 00:06:33,250 --> 00:06:34,600 ALLISON: Perfect, FF. 168 00:06:34,600 --> 00:06:36,900 Vì vậy, tuyệt vời, kẹo cho bạn. 169 00:06:36,900 --> 00:06:41,100 Bây giờ, để làm thế nào hệ thập lục phân thành dạng nhị phân, chúng tôi chỉ nghĩ về nó loại ngược lại. 170 00:06:41,100 --> 00:06:46,420 Đối với mỗi số hoặc chữ cái đó chúng tôi có trong hệ thập lục phân của chúng tôi, 171 00:06:46,420 --> 00:06:53,930 chỉ chuyển đổi nó thành bốn bit của nó [Cười] để chuyển đổi bốn bit của nó. 172 00:06:53,930 --> 00:06:58,696 Vì vậy, 5, trong trường hợp này, là những gì nếu 5 chúng tôi đang đại diện cho nó với bốn bit? 173 00:06:58,696 --> 00:06:59,608 >> HỌC SINH: 010? 174 00:06:59,608 --> 00:07:00,520 Mm-hm. 175 00:07:00,520 --> 00:07:03,605 Và sau đó A, đó là 10 thực sự, sẽ là gì? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Vì vậy, chúng tôi có điều đó, ở đây. 179 00:07:09,670 --> 00:07:13,990 Vì vậy, chuyển đổi giữa các hệ thập lục phân và nhị phân thực sự không phải là xấu. 180 00:07:13,990 --> 00:07:16,565 Nếu bạn nhìn vào nó trong bốn bit khối, sẽ được vàng. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- có? 183 00:07:19,300 --> 00:07:21,903 >> ROB: Đây là ngớ ngẩn, nhưng tôi luôn luôn nhớ 184 00:07:21,903 --> 00:07:23,500 A, từ A cho là 10. 185 00:07:23,500 --> 00:07:26,230 Và nhị phân chỉ là 10 10, so-- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: Ah, có chúng tôi đi. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Hey. 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hey, kẹo cho Rob. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Có những thứ không sô cô la trong đó. 191 00:07:33,290 --> 00:07:34,180 Vì vậy, bạn có thể có một số. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Vì vậy, toán học ASCII. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Cư xử. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Vì vậy, toán học ASCII, như các bạn có lẽ cũng nhớ 198 00:07:44,720 --> 00:07:48,480 p set 2 với VISIONEER và Caesar, bạn đã làm rất nhiều về điều này. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Hãy nhớ rằng, các nhân vật về cơ bản chỉ là con số. 201 00:07:51,980 --> 00:07:54,780 Vì vậy, chúng ta có thể làm toán với họ, giống như chúng ta làm toán với ints. 202 00:07:54,780 --> 00:07:58,090 >> Vì vậy, chúng tôi có chỉ là một chút điều đơn giản ở đây. 203 00:07:58,090 --> 00:08:00,940 Chúng tôi có một số trong đó là A khởi tạo đến 65 tuổi. 204 00:08:00,940 --> 00:08:07,440 Và B bằng giá trị ASCII của A cộng với 1, char C bằng D trừ đi 1, 205 00:08:07,440 --> 00:08:09,060 và char D bằng 68. 206 00:08:09,060 --> 00:08:13,130 Vì vậy, sau đó chúng ta sẽ in tất cả trong số họ, như chúng ta thấy ở đây. 207 00:08:13,130 --> 00:08:15,650 Và bất cứ ai có thể cho tôi biết điều này sẽ in ra? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 HỌC SINH: [không nghe được]. 210 00:08:18,210 --> 00:08:20,540 ALLISON: Chính xác, vì vậy một điều cần ghi nhận là 211 00:08:20,540 --> 00:08:22,900 mà chúng tôi đang in ra nhân vật từng thời gian, ở đây. 212 00:08:22,900 --> 00:08:28,290 Chúng tôi được chỉ định mặc dù A và B là ints khi chúng ta tuyên bố chúng ở trên. 213 00:08:28,290 --> 00:08:32,870 Chúng tôi đang in chúng như các ký tự bằng tỷ lệ phần trăm C và tuyên bố printf của chúng tôi, 214 00:08:32,870 --> 00:08:34,610 do đó họ sẽ in tất cả như ký tự. 215 00:08:34,610 --> 00:08:40,730 Và tất nhiên, giá trị ASCII 65 ý in như A. Các giá trị ASCII của A cộng với 1 216 00:08:40,730 --> 00:08:43,669 sẽ là 66, mà sẽ tự hào B. Vì vậy, trong thực tế, chúng tôi 217 00:08:43,669 --> 00:08:49,107 được A B C D. Mọi người đều tốt ở đó? 218 00:08:49,107 --> 00:08:49,690 Bất kỳ câu hỏi? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Tuyệt vời. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> OK, phạm vi. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Vì vậy, phạm vi rõ ràng là một rất điều quan trọng để hiểu, ở đây. 225 00:08:59,950 --> 00:09:03,250 Rất nhiều bạn, nếu bạn có lỗi biên dịch, 226 00:09:03,250 --> 00:09:06,085 và nói rằng bạn không có truy cập vào một số biến, 227 00:09:06,085 --> 00:09:08,540 nó có thể là bởi vì bạn định nghĩa nó trong một vòng lặp 228 00:09:08,540 --> 00:09:12,210 và sau đó cố gắng truy cập vào nó ra khỏi nó, hoặc ngược lại. 229 00:09:12,210 --> 00:09:16,410 >> Vì vậy, phạm vi cốt lõi của nó, nó chỉ xác định nơi 230 00:09:16,410 --> 00:09:20,800 chúng ta nói một biến tồn tại, nơi chúng tôi có thể thay đổi nó, nơi mà chúng ta có thể truy cập nó. 231 00:09:20,800 --> 00:09:24,550 Nó chỉ là loại nói đây là những nơi duy nhất mà bạn có thể truy cập 232 00:09:24,550 --> 00:09:26,060 để biến này. 233 00:09:26,060 --> 00:09:30,080 >> Vì vậy, hai lĩnh vực mà chúng ta nói về trong lớp học là toàn cầu và địa phương. 234 00:09:30,080 --> 00:09:35,080 Vì vậy, các biến toàn cầu chúng ta nói về khi bạn đang định nghĩa chúng trên chính. 235 00:09:35,080 --> 00:09:38,390 Nó có nghĩa là toàn bộ của bạn chương trình có thể truy cập vào nó, 236 00:09:38,390 --> 00:09:42,090 và nó tồn tại càng lâu như chương trình chạy, OK? 237 00:09:42,090 --> 00:09:45,100 Địa phương có nghĩa là nó hơn giới hạn trong một khu vực. 238 00:09:45,100 --> 00:09:50,520 Vì vậy, bất cứ khi nào bạn có chức năng cụ thể như trao đổi, chúng tôi luôn luôn nói về. 239 00:09:50,520 --> 00:09:54,380 Chúng tôi luôn luôn nói về trao đổi với A và B. A và B tồn tại trong chức năng đó. 240 00:09:54,380 --> 00:09:55,690 Họ không tồn tại bất cứ nơi nào khác. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> Cũng như vậy, khi bạn có nếu báo cáo hoặc cho các vòng. 243 00:10:00,610 --> 00:10:04,670 Bất cứ khi nào chúng ta có, ví dụ, trong một vòng lặp chúng ta có int tôi bằng 0. 244 00:10:04,670 --> 00:10:06,630 Chúng tôi có một số điều kiện và chúng tôi cập nhật nó. 245 00:10:06,630 --> 00:10:10,270 Tôi chỉ tồn tại trong niềng răng đó cho vòng lặp. 246 00:10:10,270 --> 00:10:13,270 Nếu bạn cố gắng để truy cập nó ở nơi khác, biên dịch của bạn sẽ hét lên với bạn. 247 00:10:13,270 --> 00:10:14,560 Nó muốn được như thế, những gì bạn đang cố gắng để làm gì? 248 00:10:14,560 --> 00:10:15,400 Điều này không tồn tại. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Vì vậy, đó là hai loại khác nhau của phạm vi. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 Điều đó có ý nghĩa với tất cả mọi người? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Vì vậy, ví dụ ở đây, điều này chỉ là một số chương trình đơn giản. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 Những gì bạn nghĩ là sẽ xảy ra tại mỗi điểm 257 00:10:32,890 --> 00:10:34,210 mà chúng ta cố gắng để in? 258 00:10:34,210 --> 00:10:40,150 Vì vậy, một ở đây, những gì sẽ xảy ra? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 HỌC SINH: Nó sẽ in ba. 261 00:10:44,255 --> 00:10:44,880 ALLISON: Đúng vậy. 262 00:10:44,880 --> 00:10:45,930 Nó sẽ in ba. 263 00:10:45,930 --> 00:10:47,272 Còn ở đây? 264 00:10:47,272 --> 00:10:48,230 HỌC SINH: Nó sẽ không làm việc. 265 00:10:48,230 --> 00:10:48,910 ALLISON: Nó sẽ không làm việc. 266 00:10:48,910 --> 00:10:50,290 Bạn ra khỏi phạm vi, phải không? 267 00:10:50,290 --> 00:10:55,160 Biến cục bộ không tồn tại ngoài các dấu ngoặc, tất cả phải không? 268 00:10:55,160 --> 00:10:56,462 Và sau đó những gì về đây? 269 00:10:56,462 --> 00:10:57,850 >> HỌC SINH: [không nghe được]. 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: Cái gì? 271 00:10:59,210 --> 00:10:59,900 Rob, đi. 272 00:10:59,900 --> 00:11:00,854 >> ROB: tôi vừa nói. 273 00:11:00,854 --> 00:11:04,200 Biến toàn cầu nên gạch biến toàn cầu. 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: Ah, vâng, xin lỗi. 275 00:11:05,660 --> 00:11:06,200 Cảm ơn, Rob. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Rob như trình biên dịch thường trú của chúng tôi. 278 00:11:10,170 --> 00:11:12,684 Ông sẽ chỉ hét lên với chúng ta khi chúng ta cần nó. [Cười] Vâng, đó 279 00:11:12,684 --> 00:11:14,225 nên biến gạch toàn cầu. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Vì vậy, giả định rằng là gạch toàn cầu 282 00:11:18,430 --> 00:11:20,260 biến, những gì sẽ xảy ra đây? 283 00:11:20,260 --> 00:11:21,260 HỌC SINH: Điều đó sẽ làm việc. 284 00:11:21,260 --> 00:11:22,093 ALLISON: Nó sẽ làm việc. 285 00:11:22,093 --> 00:11:24,655 Vì vậy, nó sẽ in, vì vậy chỉ cần một ví dụ rất đơn giản. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 OK, nguyên mẫu. 288 00:11:29,870 --> 00:11:33,680 Vì vậy, rõ ràng, chúng tôi thực sự nhấn mạnh cho các bạn 289 00:11:33,680 --> 00:11:36,460 để thực hiện chức năng nếu nó có ý nghĩa trong chương trình của bạn. 290 00:11:36,460 --> 00:11:38,460 Nhưng tất nhiên, khi bạn thực hiện chức năng của riêng bạn, 291 00:11:38,460 --> 00:11:40,930 thường bạn sẽ xác định họ sau khi chính. 292 00:11:40,930 --> 00:11:42,430 Và bạn sẽ cố gắng để gọi cho họ trong chính. 293 00:11:42,430 --> 00:11:46,030 Và nếu bạn không sử dụng một nguyên mẫu, biên dịch của bạn sẽ mắng bạn. 294 00:11:46,030 --> 00:11:49,590 >> Prototype là cơ bản chỉ nói với trình biên dịch của bạn 295 00:11:49,590 --> 00:11:52,400 mà tôi có chức năng này dưới chính. 296 00:11:52,400 --> 00:11:54,970 Tôi sẽ gọi nó là trước khi tôi định nghĩa nó. 297 00:11:54,970 --> 00:11:56,360 Chỉ cần giữ chặt. 298 00:11:56,360 --> 00:12:00,660 Tôi hứa rằng nó được định nghĩa, và bạn sẽ có tất cả mọi thứ mà bạn cần. 299 00:12:00,660 --> 00:12:05,900 >> Vì vậy, cách chúng tôi làm điều đó chỉ là sự trở lại của bạn loại, tên chức năng của bạn, đầu vào của bạn 300 00:12:05,900 --> 00:12:06,400 danh sách. 301 00:12:06,400 --> 00:12:09,760 Đó là cơ bản dòng đầu tiên khai chức năng của bạn. 302 00:12:09,760 --> 00:12:11,510 Đó thực sự là tất cả nó được. 303 00:12:11,510 --> 00:12:14,440 Nhưng điều này chỉ là một là loại chung của định dạng. 304 00:12:14,440 --> 00:12:17,220 >> Vì vậy, trong ví dụ của chúng tôi ở đây, mà các bạn nên 305 00:12:17,220 --> 00:12:19,700 đã thấy trong phần tại một số điểm, chúng tôi có 306 00:12:19,700 --> 00:12:23,220 một số int cube đó mất một số int của đầu vào. 307 00:12:23,220 --> 00:12:25,870 Và chúng tôi có chính của chúng tôi chức năng, trong đó kêu gọi khối lập phương. 308 00:12:25,870 --> 00:12:28,670 Và khối lập phương được xác định sau khi thực tế. 309 00:12:28,670 --> 00:12:34,450 >> Vì vậy, nếu chúng tôi không có int khối đầu vào ở phía trên, khi chúng tôi gọi khối 310 00:12:34,450 --> 00:12:36,620 trong chính, trình biên dịch của chúng tôi sẽ giận chúng tôi. 311 00:12:36,620 --> 00:12:38,890 Nó muốn được như thế nào, bạn đang nói về? 312 00:12:38,890 --> 00:12:40,360 Cube không tồn tại. 313 00:12:40,360 --> 00:12:41,910 Tôi không biết những gì bạn đang yêu cầu. 314 00:12:41,910 --> 00:12:43,490 Và tôi chỉ cần đi dừng lại. 315 00:12:43,490 --> 00:12:47,330 >> Nhưng vì chúng tôi đã làm thử nghiệm của chúng tôi ở phía trên, chúng tôi đã nói, 316 00:12:47,330 --> 00:12:49,800 bạn biết đấy, khi bạn nhìn thấy khối lập phương, không lo lắng về nó. 317 00:12:49,800 --> 00:12:51,990 Tôi hứa nó được xác định sau. 318 00:12:51,990 --> 00:12:53,750 Và nó sẽ cho phép bạn làm những gì bạn muốn. 319 00:12:53,750 --> 00:12:57,750 Vì vậy, nếu bạn đã từng có một chức năng đó là tuyên bố sau khi bạn gọi nó 320 00:12:57,750 --> 00:13:00,570 lần đầu tiên, bạn cần phải có nó prototyped ở đầu trang. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> Có? 323 00:13:02,720 --> 00:13:04,412 >> ROB: Nó bình, không cubing. 324 00:13:04,412 --> 00:13:05,855 >> ALLISON: Ôi Chúa ơi. 325 00:13:05,855 --> 00:13:09,435 Tôi không have-- Gabe, tôi nghĩ bạn đã soát lỗi của chúng tôi. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 Kẻ OK, chịu với tôi, ở đây. 328 00:13:12,760 --> 00:13:14,440 Tôi hy vọng mọi người nhận được các ý tưởng. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 OK, vì thế này nên có được bình phương, không cắt nhỏ hinh khôi. 331 00:13:20,380 --> 00:13:22,700 Nhưng ý tưởng vẫn giữ nguyên. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Bất kỳ chức năng mà chúng ta đang gọi điện thoại sau thực tế cần phải có một nguyên mẫu. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Mọi người đều tốt với điều đó? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Bất kỳ lỗi chính tả nào khác không? 338 00:13:32,310 --> 00:13:32,810 OK. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Bất kỳ lỗi chính tả ở đây trước khi chúng tôi bắt đầu, Rob? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Cười] OK, vì vậy cấu trúc. 343 00:13:42,380 --> 00:13:45,040 Về cơ bản, cấu trúc cho phép bạn để tạo ra các kiểu dữ liệu của riêng bạn. 344 00:13:45,040 --> 00:13:49,264 Vì vậy, giống như một int hoặc char hoặc một phao, nó chỉ là một loại. 345 00:13:49,264 --> 00:13:51,680 Tôi thích nghĩ về nó như, giống như, tạo kiểu dữ liệu của riêng bạn. 346 00:13:51,680 --> 00:13:53,740 Vì vậy, nó cho phép bạn làm điều đó. 347 00:13:53,740 --> 00:13:56,160 Và nó giữ các loại dữ liệu khác nhau. 348 00:13:56,160 --> 00:14:01,030 >> Vì vậy, nếu bạn nhớ, trong một mảng, chúng tôi chỉ có thể giữ những thứ của các loại tương tự. 349 00:14:01,030 --> 00:14:04,660 Cấu trúc cho phép chúng ta tổ chức nhiều những loại khác nhau. 350 00:14:04,660 --> 00:14:08,944 Vì vậy, trong trường hợp này đây, chúng tôi có một cấu trúc gọi là sinh viên, 351 00:14:08,944 --> 00:14:10,650 đặt tên ở đây ở phía dưới. 352 00:14:10,650 --> 00:14:13,540 Và chúng tôi có một số int id và một số tên chuỗi. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Vì vậy, đây chỉ là kiểu dữ liệu khác. 355 00:14:17,300 --> 00:14:18,950 Bây giờ chúng ta có một loại dữ liệu được gọi là sinh viên. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Vì vậy, bởi vì chúng ta có thể nghĩ nó như là kiểu dữ liệu khác, 358 00:14:24,750 --> 00:14:27,760 chúng ta có thể khai báo các biến như chúng ta sẽ bất kỳ khác. 359 00:14:27,760 --> 00:14:32,680 Vì vậy, thay vì chỉ có, như thế, một int sinh viên, chúng tôi chỉ có một học sinh, 360 00:14:32,680 --> 00:14:33,390 1 sinh viên. 361 00:14:33,390 --> 00:14:33,560 Oh, nhìn. 362 00:14:33,560 --> 00:14:34,059 Đó là Rob. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Vì vậy, ở đây chúng tôi đang tuyên bố một cấu trúc, hoặc một biến 365 00:14:38,880 --> 00:14:40,940 được gọi là sinh viên 1 loại học sinh. 366 00:14:40,940 --> 00:14:45,370 Vì vậy, nó sẽ có id và tên liên kết với nó. 367 00:14:45,370 --> 00:14:48,430 >> Và cách chúng ta truy cập vào các yếu tố bên trong cấu trúc của chúng tôi 368 00:14:48,430 --> 00:14:50,100 là với các dấu chấm, ở đây. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Vì vậy, trong trường hợp này, chúng tôi tuyên bố một số sinh viên 1. 371 00:14:54,660 --> 00:14:57,080 Chúng tôi giao các ID là 1. 372 00:14:57,080 --> 00:14:58,840 Và chúng tôi giao tên là Rob. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 OK, tất cả mọi người tốt với điều đó? 375 00:15:04,960 --> 00:15:06,787 Sử dụng nó chỉ like-- có? 376 00:15:06,787 --> 00:15:09,530 >> HỌC SINH: Yeah, khi typedef-- chúng ta cần phải sử dụng typedef? 377 00:15:09,530 --> 00:15:13,190 >> ALLISON: Vì vậy, typedef chỉ nói that-- Rob, bạn 378 00:15:13,190 --> 00:15:16,990 có thể đúng cho tôi về điều này nếu tôi wrong-- nhưng typedef là chỉ thực sự tuyên bố 379 00:15:16,990 --> 00:15:19,330 nó như là một loại mà bạn có thể sử dụng, phải không? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Yeah, nó về cơ bản, do đó, nó chỉ tạo ra 381 00:15:22,550 --> 00:15:24,215 một bí danh, hoặc một biệt danh cho một loại. 382 00:15:24,215 --> 00:15:25,590 Vì vậy, bạn có thể gõ mà [không nghe được]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Vì vậy, [không nghe được] tồn tại, và bây giờ chúng tôi chỉ có 385 00:15:30,350 --> 00:15:32,090 [Không nghe được] phương tiện chính xác những điều tương tự. 386 00:15:32,090 --> 00:15:37,210 Và như vậy ở đây, chúng tôi đang đánh máy, tôi nghĩ rằng, một số cấu trúc loại 2 [không nghe được]. 387 00:15:37,210 --> 00:15:40,680 Vì vậy, nó chỉ là một biệt danh cho một loại nhất định. 388 00:15:40,680 --> 00:15:44,344 >> HỌC SINH: String [không nghe được] thư viện được gõ lên như char sao. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: Đối với mục đích của chúng tôi ở đây, nếu bạn khai báo một cấu trúc, 391 00:15:54,390 --> 00:15:55,600 chỉ cần làm typedef struct. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 OK, vì vậy trước, đây là chỉ là một biến bình thường ở đây. 394 00:16:04,490 --> 00:16:06,390 Chúng tôi truy cập nó với một dấu chấm. 395 00:16:06,390 --> 00:16:08,580 nếu chúng ta có một con trỏ đến một cấu trúc, chúng ta có thể thực sự 396 00:16:08,580 --> 00:16:10,700 sử dụng một mũi tên, mà là khá mát mẻ. 397 00:16:10,700 --> 00:16:17,130 >> Vì vậy, trong trường hợp này, chúng tôi có một con trỏ đến một sinh viên 1 đó là loại học sinh. 398 00:16:17,130 --> 00:16:19,020 Hãy nhớ rằng, với bạn xây dựng con trỏ, 399 00:16:19,020 --> 00:16:23,710 bất cứ điều gì bạn muốn gõ con trỏ của bạn được trỏ đến là lúc đầu. 400 00:16:23,710 --> 00:16:25,960 Vì vậy, chúng tôi có một số sinh viên 1, ở đây. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 Và kể từ khi sinh viên này 1 bây giờ là một nhọn, 403 00:16:31,050 --> 00:16:36,520 chúng tôi thực sự có thể đi sinh viên tên 1 mũi tên thay vì dấu chấm, bởi vì nó là một con trỏ, 404 00:16:36,520 --> 00:16:37,640 và gán Rob. 405 00:16:37,640 --> 00:16:40,720 Và bây giờ nếu chúng ta muốn Rob thay đổi để Davin, 406 00:16:40,720 --> 00:16:43,570 điều này chỉ được hiển thị cho bạn một cách khác để làm điều đó. 407 00:16:43,570 --> 00:16:48,850 >> Vì vậy, thay vì sử dụng các mũi tên, bạn có thể also-- tôi sẽ hoàn thành điều này và sau đó 408 00:16:48,850 --> 00:16:52,860 đi mà question-- bạn có thể cũng làm sinh viên tham khảo 1. 409 00:16:52,860 --> 00:16:56,170 Đó là nói như đi bất cứ điều gì ở sinh viên 1, 410 00:16:56,170 --> 00:16:58,840 sẽ là cấu trúc sinh viên của chúng tôi. 411 00:16:58,840 --> 00:17:03,910 Truy cập nó với một dấu chấm và các yếu tố mà bạn muốn, và sau đó gán nó. 412 00:17:03,910 --> 00:17:05,326 Có một câu hỏi. 413 00:17:05,326 --> 00:17:08,034 HỌC SINH: Vâng, vậy làm thế nào đến bạn có sử dụng [không nghe được] khi bạn 414 00:17:08,034 --> 00:17:10,367 làm sao học sinh không [Không nghe được] sinh viên? 415 00:17:10,367 --> 00:17:12,200 ALLISON: Bởi vì đây đang tạo ra một con trỏ. 416 00:17:12,200 --> 00:17:13,616 ROB: Chúng ta sẽ nói về nó. 417 00:17:13,616 --> 00:17:16,119 ALLISON: Chúng ta sẽ nói chuyện về điều này sau trong tổng quan. 418 00:17:16,119 --> 00:17:17,660 Vì vậy, chỉ cần giữ vào suy nghĩ đó. 419 00:17:17,660 --> 00:17:20,560 Nếu nó vẫn còn làm phiền bạn tại kết thúc, đến nói chuyện với một người trong chúng ta. 420 00:17:20,560 --> 00:17:23,380 >> Vì vậy, làm chính xác những điều tương tự. 421 00:17:23,380 --> 00:17:25,579 Chúng tôi chỉ hiển thị cho bạn hai cách khác nhau để làm điều đó. 422 00:17:25,579 --> 00:17:29,470 Sinh viên 1 bây giờ là một con trỏ, vì vậy bạn có thể truy cập vào các phần tử Tên 423 00:17:29,470 --> 00:17:30,960 trong cấu trúc với một mũi tên. 424 00:17:30,960 --> 00:17:36,440 Hoặc bạn có thể tới đích của con trỏ của bạn, và sau đó truy cập vào nó như bình thường. 425 00:17:36,440 --> 00:17:38,430 Điều đó có ý nghĩa cho mọi người? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 Nếu những điều toàn bộ con trỏ là một chút khó hiểu, Gabe sẽ nói về điều đó, 428 00:17:43,890 --> 00:17:45,740 và sau đó có lẽ điều này sẽ có ý nghĩa hơn. 429 00:17:45,740 --> 00:17:46,240 Có? 430 00:17:46,240 --> 00:17:48,387 >> HỌC SINH: Vâng, vậy làm thế nào là này khác nhau từ? 431 00:17:48,387 --> 00:17:49,470 ALLISON: Người trước đó? 432 00:17:49,470 --> 00:17:52,330 Vì vậy, các sinh viên trong 1 này trường hợp không phải là một con trỏ. 433 00:17:52,330 --> 00:17:54,380 Nó chỉ là cấu trúc thực tế của bạn. 434 00:17:54,380 --> 00:17:55,400 >> SINH VIÊN: OK. 435 00:17:55,400 --> 00:17:57,645 >> ALLISON: Trong khi một này là một con trỏ đến một cấu trúc. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> SINH VIÊN: OK, nhưng làm nó loại kết thúc làm việc cùng [không nghe được]. 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: Nó có hiệu quả hoạt động tương tự. 439 00:18:03,310 --> 00:18:04,560 Cú pháp của bạn chỉ là khác nhau. 440 00:18:04,560 --> 00:18:05,185 SINH VIÊN: OK. 441 00:18:05,185 --> 00:18:07,600 >> ALLISON: Vâng, họ là có hiệu quả như nhau. 442 00:18:07,600 --> 00:18:11,321 Nó chỉ phụ thuộc vào bối cảnh, bạn có thể muốn một trong khác. 443 00:18:11,321 --> 00:18:11,820 Có? 444 00:18:11,820 --> 00:18:13,956 >> HỌC SINH: Khi bạn làm tài liệu tham khảo để các 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: Mm-hm? 446 00:18:14,580 --> 00:18:16,880 HỌC SINH: Tại sao bạn có dấu ngoặc đơn? 447 00:18:16,880 --> 00:18:19,575 ALLISON: Bởi vì sinh viên 1 là con trỏ. 448 00:18:19,575 --> 00:18:22,200 Vì vậy, bạn cần phải chắc chắn rằng bạn đang chỉ dereferencing con trỏ. 449 00:18:22,200 --> 00:18:23,380 >> SINH VIÊN: OK. 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: Vì vậy, trong trường hợp này đây, dấu ngoặc xung quanh nó 451 00:18:26,700 --> 00:18:29,875 có nghĩa là bạn đang dereferencing sinh viên 1. 452 00:18:29,875 --> 00:18:35,390 Vì vậy, bạn đang đi đến nơi mà sinh viên 1 điểm, đó là cấu trúc của bạn. 453 00:18:35,390 --> 00:18:38,010 Vì vậy, bây giờ bạn có thể nghĩ của nó như là cấu trúc đó, 454 00:18:38,010 --> 00:18:39,785 vì vậy chúng tôi có thể sử dụng dấu chấm hoạt động bình thường của chúng tôi. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 Bất kỳ câu hỏi khác? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Mát mẻ, tuyệt vời. 459 00:18:48,120 --> 00:18:51,359 >> Vì vậy, điều cuối cùng, tôi nghĩ rằng là trượt cuối cùng của tôi, woo! 460 00:18:51,359 --> 00:18:52,775 OK, vì vậy nổi điểm không chính xác. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Chúng tôi nói chuyện ngắn gọn về này trong bài giảng. 463 00:18:56,820 --> 00:19:00,030 Về cơ bản, chúng tôi có vô hạn các số thực. 464 00:19:00,030 --> 00:19:02,237 Và nếu bất kỳ của các bạn yêu toán học, có 465 00:19:02,237 --> 00:19:03,570 tất cả các loại công cụ mát mẻ với chúng tôi. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Nhưng có vô hạn nhiều số thực. 468 00:19:07,190 --> 00:19:09,850 Nhưng họ chỉ có hữu hạn nhiều bit mà chúng ta có. 469 00:19:09,850 --> 00:19:13,240 Vì vậy, bạn luôn luôn có sự thiếu chính xác, là tất cả. 470 00:19:13,240 --> 00:19:16,269 Và đó là đó chỉ là loại giống như một cái gì đó bạn nên biết. 471 00:19:16,269 --> 00:19:19,060 Điều đó giống như chúng tôi có thể hỏi bạn tại sao điểm nổi không chính xác tồn tại? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Vì vậy, chỉ một cái gì đó bạn nên biết. 474 00:19:21,420 --> 00:19:23,770 Và với điều đó, tôi quay nó cho con trỏ. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> Binky: Xin chào, guys. 477 00:19:28,520 --> 00:19:29,616 Tên tôi là Binky. 478 00:19:29,616 --> 00:19:30,990 Tôi sẽ nói chuyện về con trỏ. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Yeah, vì vậy con trỏ là thực sự phần yêu thích của tôi trong khóa học này. 481 00:19:35,830 --> 00:19:39,740 Vì vậy, chỉ để làm cho rõ ràng những gì Allison đã được nói tới ở đây, vậy lý do 482 00:19:39,740 --> 00:19:43,810 why-- sự khác biệt duy nhất ở đây, sự khác biệt lớn là đường 483 00:19:43,810 --> 00:19:44,760 chúng ta tuyên bố điều này. 484 00:19:44,760 --> 00:19:47,560 Vì vậy, ngôi sao sinh viên có nghĩa này là một con trỏ đến một học sinh. 485 00:19:47,560 --> 00:19:52,960 Trong khi đó, các slide trước, học sinh là một cấu trúc thực tế, giống như một sinh viên thực tế, 486 00:19:52,960 --> 00:19:54,400 có chứa bất kỳ những điều đó. 487 00:19:54,400 --> 00:19:57,050 >> Và lý do tại sao chúng tôi muốn đối với: có, Davin? 488 00:19:57,050 --> 00:19:58,630 >> Davin: không vào mũi tên có ý nghĩa gì? 489 00:19:58,630 --> 00:20:04,240 >> Binky: Các phương tiện mũi tên chính xác giống như này. 490 00:20:04,240 --> 00:20:06,150 Vì vậy, bạn không thực sự cần những mũi tên. 491 00:20:06,150 --> 00:20:11,060 Giống như, nếu bạn chỉ chương trình trong C, bạn chỉ có thể sử dụng này. 492 00:20:11,060 --> 00:20:12,850 Xin lỗi, tôi làm điều đó không phải là những gì. 493 00:20:12,850 --> 00:20:14,920 Bạn chỉ có thể sử dụng cú pháp này. 494 00:20:14,920 --> 00:20:17,430 >> Nhưng một số người, khi họ đã thiết kế C, 495 00:20:17,430 --> 00:20:19,870 họ đã hình dung rằng mọi người sử dụng cú pháp mà rất nhiều, 496 00:20:19,870 --> 00:20:23,970 rằng họ sẽ thích chỉ đi lên với một cấu trúc cú pháp cho nó. 497 00:20:23,970 --> 00:20:26,820 Và điều này đã diễn ra trong các hình thức của mũi tên này. 498 00:20:26,820 --> 00:20:29,210 Và nó thực sự tốt đẹp, bởi vì nó tượng trưng cho một cái gì đó 499 00:20:29,210 --> 00:20:33,670 như chúng tôi đang thực sự sau mũi tên này, con trỏ này, 500 00:20:33,670 --> 00:20:35,300 đối với một số không gian trong bộ nhớ. 501 00:20:35,300 --> 00:20:40,410 Và khi chúng ta đạt được điều đó, chúng tôi muốn nhìn vào tên của học sinh đó, 502 00:20:40,410 --> 00:20:42,150 nếu có ý nghĩa. 503 00:20:42,150 --> 00:20:43,000 OK? 504 00:20:43,000 --> 00:20:44,290 >> Vì vậy, đây là giống hệt nhau. 505 00:20:44,290 --> 00:20:46,310 Đây chính là điều tương tự như thế này. 506 00:20:46,310 --> 00:20:48,130 Họ được biên dịch giống hệt nhau, OK? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 Và lý do tại sao chúng ta ở đây malloc một cái gì đó, là bởi vì trong trường hợp này, 509 00:20:55,580 --> 00:20:59,120 biến của chúng tôi là thực sự chỉ là một biến con trỏ. 510 00:20:59,120 --> 00:21:02,900 Vì vậy, chúng tôi chỉ có một số không gian trong bộ nhớ đó là giữ một con trỏ. 511 00:21:02,900 --> 00:21:06,570 Chúng tôi không thực sự có bất kỳ không gian chứa các cấu trúc thực tế. 512 00:21:06,570 --> 00:21:08,660 >> Vì vậy, điều này đã được thực hiện theo hai bước. 513 00:21:08,660 --> 00:21:11,545 Chúng ta phải tạo ra bộ nhớ để đặt các cấu trúc trong. 514 00:21:11,545 --> 00:21:14,445 Và chúng ta phải tạo ra bộ nhớ để đặt con trỏ tại. 515 00:21:14,445 --> 00:21:16,570 Vì vậy, họ về cơ bản hai biến số khác nhau, ở đây. 516 00:21:16,570 --> 00:21:19,730 Một trong số đó là loại sinh viên, ngoại trừ nó không thực sự có một cái tên. 517 00:21:19,730 --> 00:21:21,900 Và một trong những khác loại sao học sinh. 518 00:21:21,900 --> 00:21:24,900 Và sau đó học sinh 1 điểm ở đó, nếu đó có ý nghĩa. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 OK? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Vì vậy, lý do tại sao chúng tôi sử dụng con trỏ là bởi vì tất cả mọi thứ 523 00:21:31,860 --> 00:21:35,510 trong một máy tính, mỗi biến trong một máy tính có hai điều. 524 00:21:35,510 --> 00:21:36,580 Nó có giá trị của nó. 525 00:21:36,580 --> 00:21:38,420 Và nó có địa chỉ của nó. 526 00:21:38,420 --> 00:21:41,390 Và một cách tốt để khái niệm này là có 527 00:21:41,390 --> 00:21:44,230 nhiều vấn đề khi bạn cố gắng sử dụng các chức năng. 528 00:21:44,230 --> 00:21:47,200 Và chúng tôi sẽ cố gắng để nhìn vào một trong những. 529 00:21:47,200 --> 00:21:50,370 Cụ thể, nó sẽ nghĩ về bộ nhớ như hộp. 530 00:21:50,370 --> 00:21:52,810 >> Bạn luôn luôn nghĩ về biến khi bạn nói nôm na bằng 5. 531 00:21:52,810 --> 00:21:54,430 Bạn nghĩ rằng việc đưa 5 vào một hộp. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 Vì vậy, nếu bạn muốn vượt qua rằng int vào một chức năng? 534 00:22:00,030 --> 00:22:03,230 Bạn chỉ cần pass-- tôi không know-- x vào một chức năng. 535 00:22:03,230 --> 00:22:06,090 Nhưng những gì xảy ra là bình thường như con người, bạn 536 00:22:06,090 --> 00:22:09,050 sẽ nghĩ rằng một cái gì đó giống như tôi đi qua các hộp cho một người. 537 00:22:09,050 --> 00:22:12,070 Và nó không thực sự xảy ra trong máy tính. 538 00:22:12,070 --> 00:22:17,770 Điều gì xảy ra là bạn sao chép các giá trị hộp để hộp của người đó. 539 00:22:17,770 --> 00:22:22,440 >> Vì vậy, những gì tôi đang cố gắng để nói là nếu bạn có một function-- sorry-- đây, 540 00:22:22,440 --> 00:22:27,700 nếu chúng ta có một chức năng như đến năm lên ở đó, nếu bạn cố gắng để vượt qua một biến, 541 00:22:27,700 --> 00:22:29,450 nó chỉ cần đi để sao chép. 542 00:22:29,450 --> 00:22:35,771 Nếu một nx khởi tạo bằng 3, nó sẽ để sao chép giá trị này lên để biến một 543 00:22:35,771 --> 00:22:36,270 up there. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 OK, và đây là loại lý do lý do tại sao chúng tôi muốn sử dụng con trỏ. 546 00:22:39,630 --> 00:22:42,550 Bởi vì thay vì đưa ra chỉ là giá trị, 547 00:22:42,550 --> 00:22:44,850 thay vì chỉ cần đi qua chỉ giá trị cho một chức năng, 548 00:22:44,850 --> 00:22:46,530 chúng tôi muốn vượt qua bằng cách tham khảo. 549 00:22:46,530 --> 00:22:50,630 Những gì chúng ta gọi là vượt qua bằng cách tham khảo loại là của cho hộp chức năng, 550 00:22:50,630 --> 00:22:53,890 để các chức năng cũng có thể thay đổi giá trị trong hộp đó. 551 00:22:53,890 --> 00:22:57,280 >> OK, vì vậy chỉ cần một số con trỏ cơ bản là công cụ để tạo ra con trỏ, 552 00:22:57,280 --> 00:23:00,300 bạn chỉ cần khai báo nó một kiểu, và bạn đặt một ngôi sao ngay sau khi nó. 553 00:23:00,300 --> 00:23:02,307 Và loại chỉ là những gì bạn đang chỉ vào. 554 00:23:02,307 --> 00:23:04,390 Vì vậy, nếu nó là một ngôi sao int, bạn đang chỉ vào một int. 555 00:23:04,390 --> 00:23:05,940 Nếu nó là một ngôi sao char, bạn đang chỉ vào một biểu đồ. 556 00:23:05,940 --> 00:23:07,790 Và nếu đó là một ngôi sao sinh viên, bạn đang chỉ vào một học sinh. 557 00:23:07,790 --> 00:23:08,770 OK? 558 00:23:08,770 --> 00:23:10,510 >> Và họ suốt cả 4 byte. 559 00:23:10,510 --> 00:23:13,010 Bởi vì biến này nó không thực sự 560 00:23:13,010 --> 00:23:15,380 cần phải tổ chức một char, một int, hoặc một sinh viên. 561 00:23:15,380 --> 00:23:16,890 Nó chỉ cần giữ một địa chỉ. 562 00:23:16,890 --> 00:23:21,390 Đó là lý do tại sao họ đang tất cả 4 byte dài trong một máy 32-bit bình thường. 563 00:23:21,390 --> 00:23:21,890 OK? 564 00:23:21,890 --> 00:23:25,600 Vì vậy, ở đây, x là một biến trỏ đến một int. điểm y đến một char. điểm z 565 00:23:25,600 --> 00:23:26,580 để một phao. 566 00:23:26,580 --> 00:23:27,480 Bất kỳ câu hỏi ở đây? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Cool. 569 00:23:30,340 --> 00:23:32,550 Và có hai biểu tượng khác nhau mà họ có 570 00:23:32,550 --> 00:23:34,341 cần lưu ý khi đến con trỏ. 571 00:23:34,341 --> 00:23:36,540 Vì vậy, tham khảo và dereferencing là những người lớn. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Vì vậy, các ký hiệu của tên biến cho bạn? 574 00:23:41,602 --> 00:23:42,310 HỌC SINH: Địa chỉ. 575 00:23:42,310 --> 00:23:43,380 Binky: Địa chỉ. 576 00:23:43,380 --> 00:23:47,330 Vì vậy, nếu bạn khai báo int a bằng 5, sau đó ký hiệu 577 00:23:47,330 --> 00:23:49,214 một là sẽ cung cấp cho bạn địa chỉ. 578 00:23:49,214 --> 00:23:51,130 Và bạn thực sự có thể thử để in và xem 579 00:23:51,130 --> 00:23:54,640 những địa chỉ trong bộ nhớ biến của bạn có. 580 00:23:54,640 --> 00:23:57,380 Và sau đó dereferencing-- để được tham khảo, 581 00:23:57,380 --> 00:24:00,380 nhận được dereferencing address-- hoàn toàn ngược lại. 582 00:24:00,380 --> 00:24:04,120 OK, giống như lần là đối diện của một bộ phận, 583 00:24:04,120 --> 00:24:06,060 sao là đối diện của ký hiệu. 584 00:24:06,060 --> 00:24:09,710 Vì vậy, phương tiện dereferencing đi đến đó. 585 00:24:09,710 --> 00:24:14,280 Vì vậy, nếu bạn cung cấp cho star-- tôi không know-- 50, đó là 586 00:24:14,280 --> 00:24:20,320 sẽ cố gắng để đi đến các địa chỉ của số 50 bên trong máy tính của bạn. 587 00:24:20,320 --> 00:24:22,840 OK, và tại sao chúng ta thấy rằng họ là đối lập? 588 00:24:22,840 --> 00:24:27,320 Bởi vì những gì xảy ra nếu bạn làm một cái gì đó giống như một ngôi sao ký hiệu? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Vâng, một dấu và cung cấp cho bạn địa chỉ của một biến, địa chỉ của một. 591 00:24:33,460 --> 00:24:35,830 Nhưng sao có nghĩa là đi đến đó. 592 00:24:35,830 --> 00:24:38,930 >> Vì vậy, những gì sẽ xảy ra nếu bạn đi đến địa chỉ của một? 593 00:24:38,930 --> 00:24:40,400 Bạn chỉ cần có được một, phải không? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Vì vậy, đi đến địa chỉ của một là điều tương tự như một. 596 00:24:43,600 --> 00:24:47,580 Đó là lý do tại sao chúng thường giới thiệu đến các same-- này 597 00:24:47,580 --> 00:24:50,480 và điều này được gọi nhà khai thác như ngược lại. 598 00:24:50,480 --> 00:24:50,980 OK? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 Vì vậy, mát mẻ. 601 00:24:53,790 --> 00:24:57,240 >> Dưới mui xe, ví dụ, nếu chúng ta khai báo int x = 5, 602 00:24:57,240 --> 00:24:58,040 chúng tôi có một biến. 603 00:24:58,040 --> 00:25:00,790 Và hãy nhớ rằng tôi đã nói tất cả variable-- và đây là một điều tốt 604 00:25:00,790 --> 00:25:03,820 để giữ mind-- nó có hai những thứ khác nhau liên kết với. 605 00:25:03,820 --> 00:25:06,460 Nó có một địa chỉ và một giá trị. 606 00:25:06,460 --> 00:25:07,140 OK? 607 00:25:07,140 --> 00:25:09,180 >> Vì vậy, các giá trị trong trường hợp này là 5. 608 00:25:09,180 --> 00:25:12,140 Và địa chỉ is-- hãy nói, tôi làm một cái gì đó up-- nó là 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 Và lý do duy nhất lý do tại sao chúng ta thường đại diện cho các địa chỉ trong hệ thập lục phân 611 00:25:17,200 --> 00:25:19,770 là một, vì nó giống như tốt. 612 00:25:19,770 --> 00:25:21,600 Nó cũng đi với nhị phân. 613 00:25:21,600 --> 00:25:23,500 Thật dễ dàng để chuyển đổi sang và từ nhị phân. 614 00:25:23,500 --> 00:25:26,890 Và nó không nhận được quá lớn nếu bạn có một số lượng rất lớn. 615 00:25:26,890 --> 00:25:29,990 Vì vậy, chúng tôi muốn sử dụng hệ thập lục phân trong địa chỉ in ấn. 616 00:25:29,990 --> 00:25:31,890 Nhưng tôi có thể đại diện này là một số nguyên. 617 00:25:31,890 --> 00:25:32,750 Đó là tốt. 618 00:25:32,750 --> 00:25:35,450 >> Và vì vậy nó có một địa chỉ 4 và một giá trị của 5. 619 00:25:35,450 --> 00:25:38,080 Và sau đó tôi đã nói con trỏ int sao. 620 00:25:38,080 --> 00:25:40,070 Vì vậy, đây là một loại, thông báo khác nhau. 621 00:25:40,070 --> 00:25:43,220 Int con trỏ sao bằng địa chỉ của x. 622 00:25:43,220 --> 00:25:46,425 Vì vậy, những gì là có được giá trị của ptr? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 Nó sẽ là địa chỉ của x, xuống đây. 625 00:25:51,600 --> 00:25:54,190 OK, vì vậy giá trị sẽ giống như địa chỉ. 626 00:25:54,190 --> 00:25:56,130 Đó là sự phân công hoạt động tôi đang làm. 627 00:25:56,130 --> 00:25:59,380 Và sau đó ptr là sẽ có địa chỉ riêng của mình, mà hóa ra, 628 00:25:59,380 --> 00:26:02,050 trong trường hợp này, 8, OK? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> Và sau đó tôi tạo ra một bản sao nguyên mới. 631 00:26:05,900 --> 00:26:08,790 Và tôi nói int bản sao bằng đến đó. 632 00:26:08,790 --> 00:26:11,140 Vì vậy, đi đến những gì ptr được trỏ đến. 633 00:26:11,140 --> 00:26:13,940 Vâng, những gì ptr này có? 634 00:26:13,940 --> 00:26:14,740 Ptr có 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 Điều gì xảy ra nếu tôi cố gắng để đi đến đó? 637 00:26:18,400 --> 00:26:23,650 Tôi sẽ tìm thấy anh chàng có địa chỉ x và những người có địa chỉ 4. 638 00:26:23,650 --> 00:26:25,970 Và những người có địa chỉ bốn là x. 639 00:26:25,970 --> 00:26:26,950 Điều đó có ý nghĩa? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 Có? 642 00:26:28,795 --> 00:26:32,060 >> HỌC SINH: Trong trường hợp này, là con trỏ trong một ngăn xếp? 643 00:26:32,060 --> 00:26:36,024 >> Binky: Trong trường hợp này, it's-- câu hỏi hay. 644 00:26:36,024 --> 00:26:38,690 Tôi không thực sự nghĩ về điều này khi chiếm những địa chỉ này. 645 00:26:38,690 --> 00:26:42,570 Nhưng nếu điều này là, như, tất cả đây là những biến địa phương, 646 00:26:42,570 --> 00:26:46,372 sau đó x sẽ sống in-- tất cả mọi thứ sẽ sống trong ngăn xếp. 647 00:26:46,372 --> 00:26:48,330 Vì vậy, tất cả mọi thứ đang diễn ra được trỏ đến ngăn xếp. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Bạn chỉ nhận được vào đống khi bạn bắt đầu sử dụng malloc, phải không? 650 00:26:52,700 --> 00:26:59,430 >> Vì vậy, nếu bạn nhớ lại chồng là mỗi lần bạn gọi một chức năng trong chương trình của bạn, 651 00:26:59,430 --> 00:27:02,800 như, chính ví dụ, hoặc bất kỳ chức năng khác, như printf. 652 00:27:02,800 --> 00:27:06,334 Tất cả các biến địa phương sẽ được đặt trong một khung stack. 653 00:27:06,334 --> 00:27:08,500 Và họ sẽ nhận được như chất đống trong ngăn xếp. 654 00:27:08,500 --> 00:27:09,930 Đó là những gì được gọi là một chồng. 655 00:27:09,930 --> 00:27:12,200 Và tất cả những biến địa phương sẽ có mặt ở đó. 656 00:27:12,200 --> 00:27:14,940 Và heap-- và chúng ta sẽ nói thêm về điều này later-- 657 00:27:14,940 --> 00:27:19,050 heap là nơi mà tất cả cấp phát động cuộc sống của bộ nhớ. 658 00:27:19,050 --> 00:27:20,270 Mát mẻ? 659 00:27:20,270 --> 00:27:21,680 >> Chúng tôi đi đến slide này. 660 00:27:21,680 --> 00:27:22,800 Có? 661 00:27:22,800 --> 00:27:25,490 >> HỌC SINH: Tại sao không phải là int bản sao trở 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> Binky: Tại sao không phải int bản sao trở 0x04? 664 00:27:30,066 --> 00:27:32,450 >> HỌC SINH: Tại sao không phải là [không nghe được]? 665 00:27:32,450 --> 00:27:35,530 >> Binky: Bởi vì một giá trị của ptr là gì? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> HỌC SINH: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> Binky: 0x04. 669 00:27:38,960 --> 00:27:40,910 Điều gì xảy ra nếu bạn đi đến 0x04? 670 00:27:40,910 --> 00:27:41,620 Để bạn có được những gì? 671 00:27:41,620 --> 00:27:42,371 >> HỌC SINH: Oh, OK. 672 00:27:42,371 --> 00:27:42,995 Binky: Bạn thấy không? 673 00:27:42,995 --> 00:27:43,536 HỌC SINH: Vâng. 674 00:27:43,536 --> 00:27:44,890 Binky: Vì vậy, bạn nhận được 5. 675 00:27:44,890 --> 00:27:49,170 Vì vậy, bản sao sẽ có 5, nếu có ý nghĩa. 676 00:27:49,170 --> 00:27:49,809 Có? 677 00:27:49,809 --> 00:27:52,803 >> HỌC SINH: Có thể chúng tôi đã nhận 5 trong hộp giá trị [không nghe được] 678 00:27:52,803 --> 00:27:55,300 nếu chúng ta đặt int sao chép [không nghe được]. 679 00:27:55,300 --> 00:27:56,710 >> Binky: Int-- chúng tôi sẽ, yeah. 680 00:27:56,710 --> 00:27:59,080 Điều đó đã được thực hiện khá nhiều điều tương tự. 681 00:27:59,080 --> 00:28:02,080 Nhưng cách này, chúng ta có thể vượt qua giải quyết các chức năng. 682 00:28:02,080 --> 00:28:05,050 Và đó là điều mát mẻ chúng ta sẽ làm ngay bây giờ. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Vì vậy, loại này của tập thể dục luôn luôn đi kèm on-- rất thường đi lên trên câu đố. 685 00:28:13,090 --> 00:28:15,870 Vì vậy, nó thực sự tốt để cố gắng làm điều đó là điều mà bản thân bạn. 686 00:28:15,870 --> 00:28:21,210 Vì vậy, cố gắng theo dõi những gì địa chỉ là và muốn các giá trị của các biến 687 00:28:21,210 --> 00:28:22,620 là tại mỗi điểm. 688 00:28:22,620 --> 00:28:24,370 Vì vậy, đây là chính xác những gì chúng ta sẽ làm. 689 00:28:24,370 --> 00:28:26,988 Ở đây, chúng ta có các bước, một, hai, ba, bốn, năm. 690 00:28:26,988 --> 00:28:30,530 Một, hai, ba, bốn, năm. 691 00:28:30,530 --> 00:28:33,330 Và chúng tôi sẽ tiếp tục theo dõi các giá trị của x và a. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Vì vậy, những gì đang thực hiện, nếu điều này là một mã lỗi, chúng tôi đang cố gắng làm đến năm. 694 00:28:40,530 --> 00:28:43,610 Vì vậy, chúng tôi đang cố gắng để có được trong một biến và thay đổi giá trị của nó đến 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 Và hãy nhớ tương tự của tôi có một hộp và đưa hộp với một ai đó? 697 00:28:49,900 --> 00:28:51,515 Vì vậy, chính có hộp này được gọi là x. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 Và nó có chứa giá trị 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 Và tôi đang cố gắng để tay hộp này để đến năm. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> Và tôi muốn năm để thay đổi giá trị của ô này đến 5. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 Và sau đó tôi chỉ in giá trị của x. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 Đây là những gì tôi function-- đây là những gì tôi đang cố gắng để làm. 708 00:29:08,850 --> 00:29:12,450 Tôi chỉ cố gắng để cập nhật giá trị của x 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 Có rõ chức năng không? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> OK, vì vậy những gì sẽ là giá trị của x và ngay tại đây, 713 00:29:21,440 --> 00:29:27,734 dòng đầu tiên, ngay trước khi là người đầu tiên line-- tôi sẽ say-- của chương trình? 714 00:29:27,734 --> 00:29:28,940 >> HỌC SINH: Có thể là rác. 715 00:29:28,940 --> 00:29:30,023 >> Binky: Chỉ cần những thứ rác. 716 00:29:30,023 --> 00:29:32,590 Vì vậy, tôi chỉ cần đặt N / A. Như vậy chúng ta không thực sự biết. 717 00:29:32,590 --> 00:29:37,400 Giống như, một thậm chí không tồn tại, bởi vì chúng tôi đã không được gọi là đến năm. 718 00:29:37,400 --> 00:29:38,980 Int một không được khai báo. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 Và x là sẽ tồn tại ở đây, nhưng chúng tôi đã không thực sự 721 00:29:42,920 --> 00:29:45,370 chỉ định bất kỳ giá trị cho nó, vì vậy OK? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> Và sau đó, những gì đang có được các giá trị của x và một trong số hai? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> HỌC SINH: [không nghe được]. 726 00:29:55,410 --> 00:29:57,540 >> Binky: x Vì vậy, sẽ là 3. 727 00:29:57,540 --> 00:29:59,650 Đó là dễ dàng, bởi vì chúng ta đang gán 3 đến nó. 728 00:29:59,650 --> 00:30:03,500 Và vẫn không tồn tại bởi vì chỉ sống trong năm. 729 00:30:03,500 --> 00:30:05,800 Vì vậy, tôi sẽ có 3 và không có gì. 730 00:30:05,800 --> 00:30:08,590 hoặc như rác, bất cứ điều gì, không thực sự xác định. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 Và bây giờ, đây là dòng quan trọng. 733 00:30:13,140 --> 00:30:14,931 Ở đây, chúng ta sẽ thực sự gọi đến năm. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 Và hãy nhớ những gì tôi nói. 736 00:30:18,680 --> 00:30:20,240 Chúng tôi không bao giờ vượt qua trong hộp. 737 00:30:20,240 --> 00:30:23,110 Chúng tôi chỉ cần sao chép các giá trị của hộp hộp khác. 738 00:30:23,110 --> 00:30:27,000 Đó là tất cả các máy tính làm gì, sao chép thứ từ nơi này đến nơi khác. 739 00:30:27,000 --> 00:30:33,550 >> Vì vậy, đến năm, những gì nó thực sự làm là nó sao chép các giá trị của x để a. 740 00:30:33,550 --> 00:30:35,130 Vì vậy, những gì đang xảy đến đây? 741 00:30:35,130 --> 00:30:36,210 Các giá trị của x và a. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 và 3, chúng tôi sẽ chỉ cần sao chép nó hơn từ x đến một. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Cool. 746 00:30:45,320 --> 00:30:46,140 >> Bây giờ chúng ta đang ở đây. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 Và bây giờ chúng ta sẽ để cập nhật một bằng 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 Điều gì sẽ xảy ra trong dòng bốn? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> HỌC SINH: [không nghe được]. 753 00:30:56,010 --> 00:30:59,685 >> Binky: một được cập nhật, nhưng x không được cập nhật. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Bởi vì x vẫn sống trong chính, đó là một khối hoàn toàn khác nhau của bộ nhớ. 756 00:31:05,250 --> 00:31:06,970 Đó là một biến khác nhau. 757 00:31:06,970 --> 00:31:07,900 a là một biến khác. 758 00:31:07,900 --> 00:31:10,000 Chúng xảy ra để có cùng một giá trị bởi vì tôi 759 00:31:10,000 --> 00:31:13,980 copy toàn bộ các giá trị của x để a. 760 00:31:13,980 --> 00:31:20,070 Nhưng bây giờ khi tôi làm một bằng 5, nó không thực sự hiệu x trong bất kỳ cách nào. 761 00:31:20,070 --> 00:31:21,450 Đây là phần phức tạp hơn. 762 00:31:21,450 --> 00:31:23,380 Liệu nó có ý nghĩa với tất cả mọi người? 763 00:31:23,380 --> 00:31:24,093 Có? 764 00:31:24,093 --> 00:31:25,717 HỌC SINH: Một câu hỏi nhiều hơn, bạn có 3. 765 00:31:25,717 --> 00:31:27,741 Tại sao một already-- oh, không, đó là 3. 766 00:31:27,741 --> 00:31:28,490 Xin lỗi, không bao giờ nhớ. 767 00:31:28,490 --> 00:31:29,310 Tôi đọc 5. 768 00:31:29,310 --> 00:31:30,415 >> Binky: Yeah, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> HỌC SINH: [không nghe được], yeah. 770 00:31:31,540 --> 00:31:35,290 Binky: Và sau đó chúng ta gán 5 một, nhưng không thực sự thay đổi x. 771 00:31:35,290 --> 00:31:36,369 Tốt? 772 00:31:36,369 --> 00:31:36,910 HỌC SINH: Vâng. 773 00:31:36,910 --> 00:31:37,410 Binky: Vâng? 774 00:31:37,410 --> 00:31:42,330 Bạn có thể giải thích một lần nữa như thế nào một được sao chép [không nghe được]? 775 00:31:42,330 --> 00:31:48,480 >> Binky: OK, vì vậy khi bạn gọi đến năm của x, vì vậy dòng mã này ở đây. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 đến năm x, x là gì? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x chỉ 3 vào thời điểm này là, phải không? 780 00:31:58,340 --> 00:32:03,320 Vì vậy, bạn chỉ có thể nghĩ đến việc đưa 3 ở đây và quên đi x. 781 00:32:03,320 --> 00:32:04,410 Chỉ cần đặt một 3 ở đây. 782 00:32:04,410 --> 00:32:10,880 Giống như, chúng ta sẽ sao chép các giá trị của x để các int a đó là lên đó. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 OK? 785 00:32:13,630 --> 00:32:14,780 >> Vì vậy, giá trị của x là 3. 786 00:32:14,780 --> 00:32:17,680 Chúng tôi sẽ sao chép 3 sang một. 787 00:32:17,680 --> 00:32:20,040 Và tất cả các khối này khác bộ nhớ, biến khác này 788 00:32:20,040 --> 00:32:22,640 gọi là sẽ có 3, là tốt. 789 00:32:22,640 --> 00:32:23,580 Điều đó có ý nghĩa? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 Có? 792 00:32:25,794 --> 00:32:31,008 >> HỌC SINH: Nếu bạn cho đến năm như có nó như là số nguyên x thay vì một, 793 00:32:31,008 --> 00:32:32,910 mà sẽ sửa chữa tất cả mọi thứ? 794 00:32:32,910 --> 00:32:36,290 >> Binky: Nếu nó là một integer-- không, rằng sẽ không sửa chữa tất cả mọi thứ. 795 00:32:36,290 --> 00:32:37,590 Vì vậy, đó là một câu hỏi rất tốt. 796 00:32:37,590 --> 00:32:40,480 Nó không thực sự có vấn đề gì bạn gọi các biến. 797 00:32:40,480 --> 00:32:44,510 Một lần nữa, nó sẽ là một vấn đề phạm vi, bởi vì họ không giống nhau x. 798 00:32:44,510 --> 00:32:46,526 Họ hoàn toàn không gian khác nhau trong bộ nhớ. 799 00:32:46,526 --> 00:32:47,400 HỌC SINH: [không nghe được]. 800 00:32:47,400 --> 00:32:49,020 Binky: Vì vậy, nó không thực sự vấn đề gì bạn gọi cho họ. 801 00:32:49,020 --> 00:32:50,480 Điều đó không khắc phục điều này, OK? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Các câu hỏi? 804 00:32:54,430 --> 00:32:55,762 Có? 805 00:32:55,762 --> 00:32:58,498 >> HỌC SINH: Làm thế nào là nó trở lại số năm [không nghe được]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 Binky: OK, chúng tôi đã không làm điều đó được nêu ra. 808 00:33:01,160 --> 00:33:03,432 Hãy đi đến thứ năm, sau đó. 809 00:33:03,432 --> 00:33:04,650 >> HỌC SINH: [không nghe được]? 810 00:33:04,650 --> 00:33:05,565 >> Binky: Cái gì? 811 00:33:05,565 --> 00:33:08,179 >> HỌC SINH: Bạn đã có một sự trở lại ở tất cả? 812 00:33:08,179 --> 00:33:09,970 Binky: Chúng tôi không có quay trở lại, không phải của chính. 813 00:33:09,970 --> 00:33:12,940 Nhưng lợi nhuận chính 0 tự động nếu bạn không trả lại bất cứ điều gì. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 Có? 816 00:33:15,188 --> 00:33:22,658 >> HỌC SINH: bạn có thể làm cho main-- hoặc bạn có thể làm để trở lại một năm? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> Binky: Chúng ta có thể có đến năm trở lại một, vâng. 819 00:33:27,990 --> 00:33:32,527 Nhưng sau đó chúng tôi sẽ phải gán x tương đương với giá trị trả lại đến năm, 820 00:33:32,527 --> 00:33:34,360 đó sẽ là một hơi chương trình khác nhau. 821 00:33:34,360 --> 00:33:35,440 Nó sẽ làm việc. 822 00:33:35,440 --> 00:33:38,730 Nhưng những gì chúng tôi muốn làm là những gì gọi là thay đổi một cái gì đó tại chỗ. 823 00:33:38,730 --> 00:33:41,690 Vì vậy, chúng tôi muốn thực sự thay đổi hộp và lo lắng 824 00:33:41,690 --> 00:33:44,390 về việc phải quay trở lại giá trị hoặc bất cứ điều gì. 825 00:33:44,390 --> 00:33:44,890 OK? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> Đây là giống như các chức năng trao đổi David cho thấy trong bài giảng, ngoại trừ tôi 828 00:33:50,150 --> 00:33:51,740 chỉ đối phó với một biến. 829 00:33:51,740 --> 00:33:55,960 Và ông đã sử dụng hai, vì vậy int a và b và sau đó biến tạm thời và không có điều gì. 830 00:33:55,960 --> 00:33:57,020 OK? 831 00:33:57,020 --> 00:33:58,070 Vì vậy, dòng cuối cùng là gì? 832 00:33:58,070 --> 00:34:04,400 Sau khi đến năm lợi nhuận, đó là chỉ đơn giản là một là sẽ đi xa. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 Chúng tôi sẽ không có nữa, và chỉ x sẽ vẫn còn sống. 835 00:34:10,179 --> 00:34:12,130 >> Và đoán những gì? x không thay đổi giá trị của nó, 836 00:34:12,130 --> 00:34:15,520 sau khi tất cả, bởi vì chúng tôi chỉ thay đổi giá trị của a. 837 00:34:15,520 --> 00:34:17,370 Đó là lý do tại sao x là 3 trong suốt. 838 00:34:17,370 --> 00:34:17,870 OK? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Tốt. 841 00:34:21,130 --> 00:34:23,560 Vì vậy, chương trình này không đạt được những gì chúng tôi muốn. 842 00:34:23,560 --> 00:34:24,760 Bây giờ chúng ta hãy sửa chữa nó. 843 00:34:24,760 --> 00:34:27,440 >> Và các chương trình sửa chữa là sử dụng con trỏ. 844 00:34:27,440 --> 00:34:32,300 Những gì chúng tôi làm là chúng tôi có ba đường dây là khác nhau. 845 00:34:32,300 --> 00:34:34,020 Những cái đầu tiên là chúng tôi không đi qua x. 846 00:34:34,020 --> 00:34:35,535 Chúng tôi đang đi qua địa chỉ của x. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Vì vậy, thay vì sao chép trên giá trị của hộp, 849 00:34:40,876 --> 00:34:42,500 Tôi vẫn sẽ sao chép trên một cái gì đó. 850 00:34:42,500 --> 00:34:45,380 Nhưng tôi sao chép trên địa chỉ của hộp. 851 00:34:45,380 --> 00:34:48,780 >> Vì vậy, nếu tôi vượt qua địa chỉ của hộp để đến năm, sau đó đến năm 852 00:34:48,780 --> 00:34:51,560 sẽ có thể thấy rằng trong bộ nhớ và thay đổi giá trị của nó. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Vì vậy, và sau đó lên ở đó, tôi có rằng không phải là một int nữa. 855 00:34:59,580 --> 00:35:00,882 một là một ngôi sao int. 856 00:35:00,882 --> 00:35:02,090 Đó là một con trỏ đến một số nguyên. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 Và sau đó, bởi vì tôi đi qua các địa chỉ ở đây, và sau đó những gì tôi làm 859 00:35:07,310 --> 00:35:10,530 không phải là một bằng 5, bởi vì một đang nắm giữ một địa chỉ. 860 00:35:10,530 --> 00:35:16,710 Vì vậy, những gì tôi muốn làm là đến đó và cập nhật các nội dung của địa chỉ này 861 00:35:16,710 --> 00:35:18,305 với 5. 862 00:35:18,305 --> 00:35:21,130 >> OK, vì vậy hãy đi qua tất cả các dòng một. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Vì vậy, khi tôi bắt đầu ở đây, tôi vẫn có N / A, N / A, N / A 865 00:35:26,024 --> 00:35:28,440 cho tất cả mọi thứ trong lần đầu tiên dòng, bởi vì tôi đã không thực sự 866 00:35:28,440 --> 00:35:29,390 tuyên bố nội dung được nêu ra. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 Và sau đó xếp hàng hai, tôi có x bằng 3. 869 00:35:35,110 --> 00:35:38,020 Một int sao một không tồn tại, điều tương tự như trước đây. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Bây giờ nó được thú vị. 872 00:35:40,640 --> 00:35:42,300 Vì vậy, tôi sẽ vượt qua. 873 00:35:42,300 --> 00:35:45,720 Và chúng ta hãy giả sử rằng địa chỉ của x là 12 trong hệ thập lục phân. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Hãy chỉ là giả định này. 876 00:35:48,420 --> 00:35:49,221 Tôi đã thực hiện nó lên. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Vì vậy, những gì tôi đi qua ở đây là một đến năm. 879 00:35:53,500 --> 00:35:54,460 Tôi đang đi qua 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Vì vậy, những gì giá trị không có một? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> HỌC SINH: [không nghe được]. 884 00:36:06,210 --> 00:36:06,950 >> Binky: Xin lỗi? 885 00:36:06,950 --> 00:36:08,145 >> HỌC SINH: [không nghe được]. 886 00:36:08,145 --> 00:36:10,520 Binky: Vâng, như thế, để chúng ta cho rằng chúng ta đang ở đây, bây giờ. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Tôi hỏi. 889 00:36:12,040 --> 00:36:12,915 >> HỌC SINH: [không nghe được]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> Binky: Nó đã được bắt đầu. 892 00:36:14,890 --> 00:36:15,860 >> HỌC SINH: [không nghe được]. 893 00:36:15,860 --> 00:36:17,985 Binky: Bởi vì chúng tôi thông qua một cái gì đó để chức năng. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 Có? 896 00:36:19,930 --> 00:36:20,899 >> HỌC SINH: Địa chỉ của x. 897 00:36:20,899 --> 00:36:22,690 Binky: Nó sẽ có địa chỉ của x. 898 00:36:22,690 --> 00:36:25,800 Và địa chỉ của x là 12, tốt. 899 00:36:25,800 --> 00:36:30,990 Vì vậy x sẽ là 3, bởi vì chúng tôi đã không thực sự thay đổi x nào. 900 00:36:30,990 --> 00:36:36,700 Và sau đó một sẽ là 0x12, do đó địa chỉ của x, bởi vì đó là 901 00:36:36,700 --> 00:36:38,840 những gì chúng ta truyền cho đến năm. 902 00:36:38,840 --> 00:36:40,940 >> Và sau đó những gì xảy ra nếu chúng tôi cố gắng để đi đến đó? 903 00:36:40,940 --> 00:36:42,145 Chúng ta sẽ tìm thấy? 904 00:36:42,145 --> 00:36:47,120 Vì vậy, nếu bạn cố gắng in một ngôi sao, chúng ta sẽ làm theo địa chỉ này 905 00:36:47,120 --> 00:36:48,620 và nhận được những giá trị bên trong. 906 00:36:48,620 --> 00:36:50,470 Và giá trị chỉ là cùng một giá trị mà x 907 00:36:50,470 --> 00:36:53,980 có bởi vì đó là địa chỉ của x, đó sẽ là 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 Chúng ta tốt? 910 00:36:56,930 --> 00:36:59,990 >> OK, và sau đó bây giờ, chúng tôi thực sự đến đó. 911 00:36:59,990 --> 00:37:05,510 Và chúng tôi cập nhật bất cứ điều gì là địa chỉ này 12. 912 00:37:05,510 --> 00:37:07,390 Chúng tôi làm cho nó 5. 913 00:37:07,390 --> 00:37:10,560 Vì vậy, bây giờ cả hai x và một ngôi sao là 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> Tại sao vậy? 916 00:37:13,680 --> 00:37:17,070 Bởi vì địa chỉ của x là 12. 917 00:37:17,070 --> 00:37:20,920 Và cũng có 12 giá trị của nó. 918 00:37:20,920 --> 00:37:23,780 Vì vậy, nếu chúng ta theo 12, chúng tôi chỉ cần đi để tìm x. 919 00:37:23,780 --> 00:37:27,400 Vì vậy, bất cứ điều gì chúng tôi làm với sao một sẽ xảy ra 920 00:37:27,400 --> 00:37:30,790 để x, bởi vì một chứa địa chỉ của x. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 OK? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> Và điều này cũng giống như mấu chốt của việc sửa chữa. 925 00:37:37,750 --> 00:37:41,500 Vì vậy, bây giờ chúng tôi có thể, từ đến năm, thực sự 926 00:37:41,500 --> 00:37:43,840 bộ nhớ truy cập sống trong chính. 927 00:37:43,840 --> 00:37:47,980 Vì vậy, bộ nhớ này không sống vào năm, như trước đây, địa chỉ này 12. 928 00:37:47,980 --> 00:37:50,980 Và chúng tôi đã có thể đi đến đó và thay đổi giá trị của nó đến 5. 929 00:37:50,980 --> 00:37:53,990 >> Và sau đó khi chúng tôi quay trở lại, chúng ta quên đi một. 930 00:37:53,990 --> 00:37:55,720 Chúng ta quên về một ngôi sao. 931 00:37:55,720 --> 00:37:57,020 Và x vẫn là năm. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Vì vậy, nếu bạn muốn thực hiện một chức năng trao đổi, 934 00:38:00,160 --> 00:38:05,010 bạn sẽ chỉ cần làm một điều chính xác, ngoại trừ bạn cần phải int sao đây, 935 00:38:05,010 --> 00:38:06,140 vv và vv. 936 00:38:06,140 --> 00:38:06,976 OK? 937 00:38:06,976 --> 00:38:07,475 Chúng ta tốt? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Cool. 940 00:38:10,610 --> 00:38:12,410 >> Vì vậy, con trỏ số học. 941 00:38:12,410 --> 00:38:13,960 Đây là một chủ đề hơi khó khăn. 942 00:38:13,960 --> 00:38:16,554 Vì vậy, nó chỉ ra rằng con trỏ chỉ là số nguyên. 943 00:38:16,554 --> 00:38:17,970 Bạn có thể nghĩ về họ như là số nguyên. 944 00:38:17,970 --> 00:38:21,080 Bởi vì trong bộ nhớ, bạn có như bộ nhớ địa chỉ không, một, hai, ba, 945 00:38:21,080 --> 00:38:21,900 bốn, năm. 946 00:38:21,900 --> 00:38:23,900 Vì vậy, chúng ta có thể tổng hợp các địa chỉ bộ nhớ. 947 00:38:23,900 --> 00:38:27,230 >> Và đó thường là những gì bạn làm khi bạn đang ở trong và mảng, ví dụ. 948 00:38:27,230 --> 00:38:30,540 Một mảng được giống như một tiếp giáp khối của bộ nhớ, của rất nhiều ký tự, 949 00:38:30,540 --> 00:38:31,840 Ví dụ, rất nhiều ints. 950 00:38:31,840 --> 00:38:34,420 Vì vậy, nếu bạn muốn đi đến thứ hai int hoặc int thứ ba, 951 00:38:34,420 --> 00:38:37,830 bạn chỉ có thể tổng hợp một cái gì đó để là người đầu tiên địa chỉ, và bạn sẽ đạt được điều đó. 952 00:38:37,830 --> 00:38:39,620 Vì vậy, đây là thực sự hữu ích cho điều đó. 953 00:38:39,620 --> 00:38:41,850 >> Và điều cần lưu trong tâm trí, mặc dù, là 954 00:38:41,850 --> 00:38:45,140 rằng nó không giống như số học thông thường trong ý nghĩa 955 00:38:45,140 --> 00:38:50,304 rằng nếu bạn đang làm việc với, nói, một ngôi sao int, và bạn thêm 1 với nó, 956 00:38:50,304 --> 00:38:52,220 sau đó bạn sẽ không thêm 1 đến địa chỉ, 957 00:38:52,220 --> 00:38:53,950 bạn sẽ thêm 4 đến địa chỉ. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Bởi vì một int là 4 byte. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Vì vậy, đây là giống như đi bộ trên một mảng. 962 00:38:59,540 --> 00:39:05,260 Nếu chúng ta có một mảng của rất nhiều ints và sau đó chúng tôi cố gắng đi đến một giây, 963 00:39:05,260 --> 00:39:08,790 nó về cơ bản chỉ là cách tổng hợp các địa chỉ của một trong những đầu tiên cộng thêm 1. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Nhưng đó sẽ không be-- chỉ giả rằng địa chỉ của một trong những đầu tiên là 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Ở đây, trong trường hợp này. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 Và nếu chúng ta tổng hợp, vì vậy đây là những gì đang xảy ra. 970 00:39:22,850 --> 00:39:23,530 Chúng tôi có một int. 971 00:39:23,530 --> 00:39:25,640 Int x = 5. 972 00:39:25,640 --> 00:39:26,950 X có giá trị 5. 973 00:39:26,950 --> 00:39:31,240 Và chúng ta khởi tạo con trỏ này, int y int sao y bằng địa chỉ của x. 974 00:39:31,240 --> 00:39:33,660 >> Giả sử địa chỉ của x là 4. 975 00:39:33,660 --> 00:39:36,960 Điều gì sẽ xảy ra bây giờ nếu tôi tổng cộng 1 vào y? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 Nó sẽ thực sự tổng 4 thay vì chỉ 1. 978 00:39:44,790 --> 00:39:50,920 Vì vậy, tôi thêm một 1, nhưng nó thực sự thêm 4, bởi vì máy tính thông minh. 979 00:39:50,920 --> 00:39:55,275 Vì vậy, nó sẽ thực sự thêm bởi tôi lần kích thước của kiểu của con trỏ. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 OK? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Vì vậy, nếu nó là một char, ví dụ, nếu điều này là một y char sao, 984 00:40:02,440 --> 00:40:07,141 và nếu chúng ta thêm 1 sau đó điều này sẽ là 5, vì char là 1 byte dài. 985 00:40:07,141 --> 00:40:07,640 Tốt? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> Và cuối cùng, chúng tôi đã đến con trỏ và mảng. 988 00:40:13,190 --> 00:40:16,451 Nó chỉ ra rằng mỗi lần bạn đang làm việc với một mảng, 989 00:40:16,451 --> 00:40:18,075 bạn đang thực sự đối phó với một con trỏ. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 Lý do khái niệm rất tốt đẹp cho này là mảng rất lớn. 992 00:40:24,777 --> 00:40:27,360 Vì vậy, hãy nhớ rằng tôi đã nói rằng mỗi lần bạn vượt qua những thứ xung quanh, 993 00:40:27,360 --> 00:40:29,097 bạn sao chép tất cả mọi thứ. 994 00:40:29,097 --> 00:40:31,180 Vì vậy, nếu bạn có một mảng đó là thực sự, thực sự lớn, 995 00:40:31,180 --> 00:40:32,990 bạn không thực sự muốn sao chép tất cả mọi thứ mỗi lần 996 00:40:32,990 --> 00:40:35,710 bạn vượt qua nó xung quanh khác chức năng, bởi vì đó chỉ là 997 00:40:35,710 --> 00:40:37,190 số lượng lớn công việc. 998 00:40:37,190 --> 00:40:39,710 Vì vậy, những gì bạn làm chỉ là quá khứ địa chỉ của byte đầu tiên. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 Và sau đó các chức năng sẽ có quyền truy cập cho tất cả các yếu tố trong mảng đó. 1001 00:40:44,010 --> 00:40:48,670 Vì vậy, bạn thông qua các mảng theo địa chỉ của nó, vì vậy các địa chỉ của byte đầu tiên. 1002 00:40:48,670 --> 00:40:53,010 >> Vì vậy, nếu chúng ta khai báo int mảng 3, ở đây, chúng ta biết 1003 00:40:53,010 --> 00:40:57,470 làm thế nào để truy cập vào các phần tử đầu tiên bằng cách sử dụng ký hiệu khung. 1004 00:40:57,470 --> 00:41:02,410 Nếu bạn còn nhớ khung ký hiệu, khung mảng 0 bằng 1. 1005 00:41:02,410 --> 00:41:06,330 Vâng, điều này sẽ được chính xác giống như chỉ đến đó và đưa 1. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 OK, là chính xác những điều tương tự. 1008 00:41:09,110 --> 00:41:13,010 Vì vậy, các ký hiệu khung ở đây sẽ giống như dòng này. 1009 00:41:13,010 --> 00:41:18,600 >> Và đoán những gì các ký hiệu khung cho khung mảng 1 sẽ được? 1010 00:41:18,600 --> 00:41:20,440 Nó sẽ chỉ được điều tương tự như thế này. 1011 00:41:20,440 --> 00:41:22,500 Vì vậy, thêm một mảng. 1012 00:41:22,500 --> 00:41:24,370 Di chuyển một cùng trong bộ nhớ. 1013 00:41:24,370 --> 00:41:26,310 Đến đây, và đặt một 2. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 OK? 1016 00:41:28,579 --> 00:41:29,870 Và dòng này là điều tương tự. 1017 00:41:29,870 --> 00:41:34,860 Chúng tôi muốn đi đến thứ ba hộp, vì vậy cộng với 2 mảng. 1018 00:41:34,860 --> 00:41:37,465 Đến đây, và đặt một 3. 1019 00:41:37,465 --> 00:41:39,340 Vì vậy, trong bộ nhớ, có chuyện gì sẽ xảy ra là chúng tôi 1020 00:41:39,340 --> 00:41:44,400 sẽ có 1, 2, và 3 là ba yếu tố của mảng này. 1021 00:41:44,400 --> 00:41:46,970 >> Chúng tôi có thể làm điều này bằng cách sử dụng khung ký hiệu quen thuộc của chúng tôi. 1022 00:41:46,970 --> 00:41:49,410 Tôi chỉ muốn các bạn biết rằng họ là những điều tương tự. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 OK, câu hỏi về điều này? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Nice. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Bây giờ, tôi sẽ đến tay nó cho Hannah, 1029 00:41:59,880 --> 00:42:00,330 >> HANNAH: Yay, yee-haw. 1030 00:42:00,330 --> 00:42:02,246 >> Binky: Nói về bộ nhớ và bài viết công cụ. 1031 00:42:02,246 --> 00:42:06,554 [Vỗ tay] 1032 00:42:06,554 --> 00:42:10,150 >> HANNAH: Hi, mát mẻ, vì vậy chúng tôi sẽ nói một chút hơn 1033 00:42:10,150 --> 00:42:13,090 về bộ nhớ, mà chúng ta chỉ giải quyết bằng cách sử dụng con trỏ. 1034 00:42:13,090 --> 00:42:16,060 Vì vậy, có hai bộ phận chính của bộ nhớ mà chúng tôi đang quan tâm đến. 1035 00:42:16,060 --> 00:42:18,830 Chúng tôi có chồng, mà phát triển lên ở dưới cùng, và heap, mà 1036 00:42:18,830 --> 00:42:20,600 đi từ trên xuống. 1037 00:42:20,600 --> 00:42:24,690 Và chồng sẽ tổ chức tất cả các biến dụ của chúng tôi. 1038 00:42:24,690 --> 00:42:28,860 Vì vậy, mỗi cuộc gọi đến một chức năng được ít khung hình riêng của mình trên stack. 1039 00:42:28,860 --> 00:42:32,160 Vì vậy, Gabe đã đề cập trước, nếu chúng tôi gọi hàm một lần nữa và một lần nữa, 1040 00:42:32,160 --> 00:42:34,180 chúng ta sẽ ngăn xếp mọi thứ trên stack. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> Và tương tự, đống, mà bắt đầu ở đầu trang 1043 00:42:38,570 --> 00:42:42,660 sẽ tổ chức tất cả các bộ nhớ mà chúng tôi tự động phân bổ. 1044 00:42:42,660 --> 00:42:45,110 Và như vậy, chúng tôi tự động cấp phát bộ nhớ, 1045 00:42:45,110 --> 00:42:47,580 này sẽ đi xuống hướng về phía dưới. 1046 00:42:47,580 --> 00:42:51,340 Những cặp vợ chồng cần lưu ý khi chúng tôi đang sử dụng stack và heap, 1047 00:42:51,340 --> 00:42:55,200 với chồng, nếu chúng ta có quá many-- hãy say-- cuộc gọi đệ quy, 1048 00:42:55,200 --> 00:42:58,392 và chúng tôi đang kêu gọi một chức năng một lần nữa, và một lần nữa, và một lần nữa, và một lần nữa, 1049 00:42:58,392 --> 00:43:00,350 và nó được xếp chồng lên, xếp chồng lên, xếp chồng lên. 1050 00:43:00,350 --> 00:43:01,570 Và nó sẽ sụp đổ vào đống. 1051 00:43:01,570 --> 00:43:03,040 Chúng ta sẽ chạy ra khỏi bộ nhớ. 1052 00:43:03,040 --> 00:43:05,100 Điều đó sẽ gây ra một vấn đề cho máy tính. 1053 00:43:05,100 --> 00:43:06,770 Và đó được gọi là stack tràn. 1054 00:43:06,770 --> 00:43:09,728 Vì vậy, đó chắc chắn là một cái gì đó bạn cần phải nhận thức và cố gắng tránh. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 Và đống, phải nhớ không vô tình bị rò rỉ bộ nhớ. 1057 00:43:14,050 --> 00:43:17,950 Bất cứ lúc nào bạn sử dụng malloc, không quên để giải phóng bộ nhớ. 1058 00:43:17,950 --> 00:43:20,040 Nếu không, nó sẽ chỉ được trên đống lãng phí, 1059 00:43:20,040 --> 00:43:23,230 và máy tính sẽ không biết rằng nó là miễn phí để sử dụng bộ nhớ. 1060 00:43:23,230 --> 00:43:25,810 Vì vậy, những người đang có một vài điều phải rất cẩn thận với khi 1061 00:43:25,810 --> 00:43:28,580 bạn đang làm việc với stack và heap. 1062 00:43:28,580 --> 00:43:30,412 Bất kỳ câu hỏi với điều này? 1063 00:43:30,412 --> 00:43:31,304 Tuyệt vời. 1064 00:43:31,304 --> 00:43:31,900 >> OK, mát mẻ. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Vì vậy, hình thức này có cùng một ý tưởng như tràn stack, nơi 1067 00:43:36,810 --> 00:43:39,850 chúng ta sẽ vượt ra ngoài giới hạn của những gì bộ nhớ 1068 00:43:39,850 --> 00:43:41,960 là chúng ta cần phải có thể sử dụng. 1069 00:43:41,960 --> 00:43:45,077 Vì vậy, lấy ví dụ, một bộ đệm, hoặc bạn chỉ có thể nghĩ về nó như một mảng. 1070 00:43:45,077 --> 00:43:47,660 Và chúng tôi đã nói, OK, chúng ta sẽ tạo mảng này ít tốt đẹp. 1071 00:43:47,660 --> 00:43:49,140 Nó sẽ là một chuỗi. 1072 00:43:49,140 --> 00:43:50,630 Hoặc nó sẽ lưu trữ ký tự. 1073 00:43:50,630 --> 00:43:51,720 Và nó chỉ cần đi để chào hỏi. 1074 00:43:51,720 --> 00:43:52,678 Và đó là không xác định. 1075 00:43:52,678 --> 00:43:53,990 Có bấy nhiêu thôi. 1076 00:43:53,990 --> 00:43:58,240 >> Nhưng nếu tôi là một người xấu xa và muốn làm điều gì đó xấu với mảng này, những gì 1077 00:43:58,240 --> 00:44:02,310 Tôi có thể làm là cố gắng viết quá khứ kết thúc của chuỗi. 1078 00:44:02,310 --> 00:44:04,490 Và như bạn sẽ thấy, nếu Tôi viết đủ xa, 1079 00:44:04,490 --> 00:44:06,980 Tôi thực sự có thể ảnh hưởng đến địa chỉ trả lại. 1080 00:44:06,980 --> 00:44:09,530 Và nếu tôi bắt đầu ảnh hưởng đến địa chỉ trả lại, 1081 00:44:09,530 --> 00:44:11,730 Tôi ảnh hưởng đến cách các chương trình thực sự chạy. 1082 00:44:11,730 --> 00:44:15,900 Và thay vì quay trở lại, bạn biết, một chuỗi hạnh phúc như hello, tôi 1083 00:44:15,900 --> 00:44:19,460 có thể làm một cái gì đó xấu, như đi ở một nơi khác trong máy tính của bạn, vẫn còn 1084 00:44:19,460 --> 00:44:22,146 bộ nhớ, thay đổi nó, bất cứ điều gì tôi muốn làm. 1085 00:44:22,146 --> 00:44:25,020 Vì vậy, đó là những gì này sẽ như thế nào là nếu tôi chỉ loại đầy nó lên 1086 00:44:25,020 --> 00:44:27,400 với giá trị rác ngẫu nhiên, trong trường hợp này, chỉ cần một. 1087 00:44:27,400 --> 00:44:30,490 Và sau đó khi tôi thực sự đã đến địa chỉ bộ nhớ, 1088 00:44:30,490 --> 00:44:33,740 Tôi bắt đầu làm đầy nó bằng một cái gì đó mà đã làm những gì tôi muốn nó làm. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Bất kỳ câu hỏi với lỗi tràn bộ đệm? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Awesome, bay đúng thông qua công cụ này. 1093 00:44:40,730 --> 00:44:43,530 >> OK, vì vậy chúng tôi đã nói chuyện rất nhiều về con trỏ với Gabe. 1094 00:44:43,530 --> 00:44:45,790 Làm thế nào để chúng ta thực sự có được một con trỏ? 1095 00:44:45,790 --> 00:44:48,070 Làm thế nào để chúng ta có được một địa chỉ trong bộ nhớ? 1096 00:44:48,070 --> 00:44:51,040 Vâng, chúng ta có thể sử dụng tốt đẹp chức năng gọi malloc, mà 1097 00:44:51,040 --> 00:44:53,370 là sẽ nhận được một ít mảnh bộ nhớ, 1098 00:44:53,370 --> 00:44:55,480 đặc biệt trong heap, như chúng ta đã thảo luận, 1099 00:44:55,480 --> 00:44:59,780 và nó sẽ cung cấp cho bạn trở lại một con trỏ đến địa chỉ trong bộ nhớ. 1100 00:44:59,780 --> 00:45:01,950 Và lập luận rằng chúng ta có để cung cấp cho malloc 1101 00:45:01,950 --> 00:45:04,280 là bao nhiêu không gian trong bộ nhớ chúng ta muốn. 1102 00:45:04,280 --> 00:45:06,100 >> Vì vậy, bạn có thể thấy kích thước trong byte. 1103 00:45:06,100 --> 00:45:08,670 Hãy nói rằng, ví dụ, hoặc trên thực tế, trong ví dụ này, 1104 00:45:08,670 --> 00:45:12,040 chúng tôi phân bổ đủ không gian cho 10 số nguyên. 1105 00:45:12,040 --> 00:45:15,640 Vì vậy, có lẽ là những gì chúng ta sẽ muốn đặt ở đây là một mảng 10 số nguyên. 1106 00:45:15,640 --> 00:45:19,641 Vì vậy, chúng tôi cung cấp cho nó kích thước của kiểu int, mà chúng tôi đã học được bao nhiêu byte? 1107 00:45:19,641 --> 00:45:20,140 HỌC SINH: 4. 1108 00:45:20,140 --> 00:45:22,920 HANNAH: 4, đẹp, và chúng tôi muốn 10 người trong một hàng, 1109 00:45:22,920 --> 00:45:28,050 để chúng tôi có đủ không gian để lưu trữ tất cả 10 số nguyên, trong trường hợp này. 1110 00:45:28,050 --> 00:45:31,290 Một cái gì đó siêu quan trọng, bất cứ lúc nào bạn gọi malloc, 1111 00:45:31,290 --> 00:45:32,880 bạn phải kiểm tra cho null. 1112 00:45:32,880 --> 00:45:37,310 Nếu bạn không kiểm tra null, tốt, malloc nếu nó chạy ra khỏi không gian 1113 00:45:37,310 --> 00:45:40,400 và không còn có thể cung cấp cho bạn bất kỳ bộ nhớ nhiều hơn, nó sẽ trả về null. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Vì vậy, nếu bạn không kiểm tra, malloc có thể trở lại null. 1116 00:45:45,630 --> 00:45:51,265 Và sau đó nếu chúng tôi cố gắng dereference một con trỏ null, 1117 00:45:51,265 --> 00:45:54,960 chúng ta sẽ nhận được một lỗi phân khúc, mà chúng tôi sẽ nói về ngay bây giờ. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Tuyệt vời. 1120 00:45:56,650 --> 00:45:58,300 >> OK, câu hỏi với malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 Có? 1123 00:46:00,544 --> 00:46:05,460 >> HỌC SINH: Có kiểm tra rỗng [Không nghe được] không làm điều đó trên các bài kiểm tra? 1124 00:46:05,460 --> 00:46:08,100 >> HANNAH: Chắc chắn, câu hỏi là nó matter-- trên các bài kiểm tra, 1125 00:46:08,100 --> 00:46:10,420 bạn sẽ nhận được điểm off nếu bạn không kiểm tra null? 1126 00:46:10,420 --> 00:46:12,794 Có, bạn sẽ nhận được điểm off nếu bạn không kiểm tra null. 1127 00:46:12,794 --> 00:46:16,030 Bất cứ lúc nào bạn gọi malloc, cả trên đố vui và psets của bạn và trong cuộc sống thực, 1128 00:46:16,030 --> 00:46:17,155 bạn phải kiểm tra cho null. 1129 00:46:17,155 --> 00:46:18,330 Tốt câu hỏi. 1130 00:46:18,330 --> 00:46:19,689 >> Gabe: Nếu tôi không giải phóng? 1131 00:46:19,689 --> 00:46:21,730 HANNAH: Gabe muốn biết những gì nếu chúng ta không miễn phí. 1132 00:46:21,730 --> 00:46:25,030 Sau đó chúng tôi sẽ có một rò rỉ bộ nhớ trong heap của chúng tôi. 1133 00:46:25,030 --> 00:46:26,140 Bất kỳ câu hỏi khác? 1134 00:46:26,140 --> 00:46:27,550 Có? 1135 00:46:27,550 --> 00:46:30,120 >> HỌC SINH: you-- có thể đi qua tràn bộ đệm thực sự nhanh chóng một lần nữa? 1136 00:46:30,120 --> 00:46:30,530 >> HANNAH: Chắc chắn. 1137 00:46:30,530 --> 00:46:33,071 Câu hỏi đặt ra là chúng ta có thể đi qua tràn bộ đệm thực sự nhanh chóng. 1138 00:46:33,071 --> 00:46:35,050 Chúng ta hãy trở lại những slide. 1139 00:46:35,050 --> 00:46:37,430 Vì vậy, một bộ đệm, bạn có thể chỉ nghĩ về nó như một mảng, phải không? 1140 00:46:37,430 --> 00:46:39,360 Bạn có một số không gian trong bộ nhớ. 1141 00:46:39,360 --> 00:46:43,580 Và khi chúng tôi lần đầu tiên tạo mảng của chúng tôi, chúng tôi biết mảng có cố định kích thước, 1142 00:46:43,580 --> 00:46:45,470 hoặc đệm của chúng tôi có một kích thước cố định. 1143 00:46:45,470 --> 00:46:51,360 >> Vì vậy, hãy nói rằng trong trường hợp này, chúng tôi chỉ có đủ không gian để viết chuỗi hello. 1144 00:46:51,360 --> 00:46:57,340 Nếu chúng ta đi quá khứ mà ràng buộc, nếu chúng ta đi qua những mảng của chúng tôi, chúng tôi cho biết nó có thể nắm giữ, 1145 00:46:57,340 --> 00:46:59,780 chúng ta có thể thực sự bắt đầu viết vào bộ nhớ 1146 00:46:59,780 --> 00:47:01,780 rằng máy tính không muốn chúng tôi viết vào. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 Và đặc biệt, nếu chúng ta nhấn một cái gì đó giống như sự trở lại 1149 00:47:05,580 --> 00:47:08,700 giải quyết các chức năng, trong đó, giống như bất kỳ phần khác của bộ nhớ, 1150 00:47:08,700 --> 00:47:11,420 chỉ là một nơi nào đó của bạn máy tính, bạn có thể thực sự 1151 00:47:11,420 --> 00:47:14,080 thay đổi điều đó và bắt đầu làm những điều ác. 1152 00:47:14,080 --> 00:47:15,272 Trả lời câu hỏi của bạn? 1153 00:47:15,272 --> 00:47:16,230 Awesome, bất cứ điều gì khác? 1154 00:47:16,230 --> 00:47:17,466 Có? 1155 00:47:17,466 --> 00:47:21,948 >> SINH VIÊN: Vì vậy, ngăn xếp [không nghe được], bạn nói đi từ dưới đi lên. 1156 00:47:21,948 --> 00:47:25,434 Trong ngăn xếp phạm vi, không bộ nhớ đi từ, như, 1157 00:47:25,434 --> 00:47:27,230 từ trên xuống liên quan đến từng phá vỡ? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> HANNAH: Làm thế nào you-- trì hoãn để Rob ngày này. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: Nó sẽ phát triển trong cùng một hướng như ngăn xếp phát triển. 1162 00:47:38,213 --> 00:47:38,712 HANNAH: OK. 1163 00:47:38,712 --> 00:47:40,967 ROB: Vì vậy, tôi bị lẫn lộn. 1164 00:47:40,967 --> 00:47:42,331 Điều này là có được trừu tượng. 1165 00:47:42,331 --> 00:47:42,831 HANNAH: OK. 1166 00:47:42,831 --> 00:47:44,000 ROB: Đây là chính xác. 1167 00:47:44,000 --> 00:47:49,420 Vì vậy, nếu chồng đang phát triển lên, sau đó nó generally-- 1168 00:47:49,420 --> 00:47:52,380 không phải là như thế này. nhưng bạn có thể khai báo int x. 1169 00:47:52,380 --> 00:47:54,120 Sau đó, bạn khai báo int y. 1170 00:47:54,120 --> 00:47:57,300 Sau đó, int x nói chung sẽ thấp hơn trên stack hơn int y. 1171 00:47:57,300 --> 00:47:59,300 Nhưng đó chỉ là một thực tế. 1172 00:47:59,300 --> 00:48:02,410 Điều đó không giống như một điều giống quan trọng. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Vậy câu hỏi một lần nữa là chỉ những gì xảy ra mỗi khung xây dựng lên. 1174 00:48:06,800 --> 00:48:08,960 Vì vậy, mỗi chức năng được một ít mảnh của stack. 1175 00:48:08,960 --> 00:48:13,030 Và như bạn đi lên, trong đó đôi chút, trong khung đó, 1176 00:48:13,030 --> 00:48:16,710 chúng tôi sẽ nói rằng các biến trong khung đó cũng di chuyển lên. 1177 00:48:16,710 --> 00:48:17,473 Câu hỏi? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Chỉ cần được vào mic. 1179 00:48:18,688 --> 00:48:19,396 HANNAH: Oh, yeah. 1180 00:48:19,396 --> 00:48:20,440 ROB: Tôi sẽ nói chuyện vào bạn. 1181 00:48:20,440 --> 00:48:21,410 HANNAH: Oh, yeah, OK. 1182 00:48:21,410 --> 00:48:24,150 ROB: Trường hợp ngoại lệ là cho mảng và cấu trúc, 1183 00:48:24,150 --> 00:48:27,470 nơi mảng, thấp hơn chỉ số trong mảng, 1184 00:48:27,470 --> 00:48:29,930 và trong cấu trúc ở mức cao hơn lĩnh vực trong các cấu trúc 1185 00:48:29,930 --> 00:48:35,040 có bảo đảm là ở địa chỉ thấp hơn hơn một giá trị sau trong mảng. 1186 00:48:35,040 --> 00:48:36,720 Vì vậy, những người được đảm bảo. 1187 00:48:36,720 --> 00:48:40,310 Tuy nhiên, bất kỳ biến cụ thể trong, như int x và int y trong vòng một chức năng, 1188 00:48:40,310 --> 00:48:43,030 không có mối quan hệ cần thiết giữa các địa chỉ của họ. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 HANNAH: Một câu hỏi trên đây? 1191 00:48:46,340 --> 00:48:51,620 SINH VIÊN: Vì vậy, trong bộ đệm dòng chảy, chỉ tràn bộ đệm 1192 00:48:51,620 --> 00:48:54,980 chỉ xảy ra khi bạn đã, như, giao 1193 00:48:54,980 --> 00:49:01,056 một số tiền của một mảng sau đó là lớn hơn? 1194 00:49:01,056 --> 00:49:03,230 Giống như, có thể bạn? 1195 00:49:03,230 --> 00:49:05,435 Vì vậy, nếu bạn đang yêu cầu một cái gì đó từ user-- 1196 00:49:05,435 --> 00:49:06,018 >> HANNAH: Mm-hm. 1197 00:49:06,018 --> 00:49:08,600 HỌC SINH: Có thể họ buộc cung cấp cho bạn một cái gì đó trở lại 1198 00:49:08,600 --> 00:49:11,777 đó là lớn hơn so với bất cứ điều gì bạn đã phân bổ cho họ? 1199 00:49:11,777 --> 00:49:13,610 HANNAH: Chắc chắn rồi, vì vậy câu hỏi là về cơ bản, 1200 00:49:13,610 --> 00:49:16,217 người dùng có thể cung cấp cho bạn nhiều hơn bạn yêu cầu? 1201 00:49:16,217 --> 00:49:16,800 HỌC SINH: Yeah. 1202 00:49:16,800 --> 00:49:18,480 HANNAH: Vâng, bạn có thể ngăn chặn người dùng từ làm điều đó. 1203 00:49:18,480 --> 00:49:21,350 Bạn đặc biệt có thể nói không cung cấp cho tôi nhiều hơn x số của byte 1204 00:49:21,350 --> 00:49:24,330 Tôi đã chỉ cho bạn chỗ cho x số byte, x số lượng ký tự. 1205 00:49:24,330 --> 00:49:25,700 Vì vậy, đó là một cái gì đó bạn muốn ngăn chặn. 1206 00:49:25,700 --> 00:49:26,199 Có? 1207 00:49:26,199 --> 00:49:30,270 Sự khác biệt giữa những gì là ngăn xếp tràn và tràn bộ đệm? 1208 00:49:30,270 --> 00:49:32,140 >> HANNAH: OK, vậy stack overflow-- oh, những gì 1209 00:49:32,140 --> 00:49:34,790 là sự khác biệt giữa chồng tràn và lỗi tràn bộ đệm? 1210 00:49:34,790 --> 00:49:37,581 Vì vậy, chúng tôi muốn nghĩ về stack overflow xảy ra khi chúng tôi thực sự 1211 00:49:37,581 --> 00:49:39,530 xếp chồng lên các cuộc gọi chức năng. 1212 00:49:39,530 --> 00:49:42,991 Hãy nói rằng bạn có một hàm đệ quy, bởi vì chúng ta biết rằng mỗi khi bạn 1213 00:49:42,991 --> 00:49:45,240 gọi một chức năng, nó được khung hình riêng của mình trên stack. 1214 00:49:45,240 --> 00:49:47,950 >> Vì vậy, chúng chồng lên quá cao, và sau đó chúng tôi bắt đầu tràn. 1215 00:49:47,950 --> 00:49:50,530 Và chúng tôi sử dụng quá nhiều bộ nhớ, Và chúng tôi không có bất cứ nơi nào để lại. 1216 00:49:50,530 --> 00:49:51,590 Chúng tôi nhận được lỗi đó. 1217 00:49:51,590 --> 00:49:53,930 >> Tràn bộ đệm là trong một chương trình. 1218 00:49:53,930 --> 00:49:57,180 Chúng tôi muốn có thể không nhất thiết phải có chạy ra khỏi bộ nhớ trong cùng một cách 1219 00:49:57,180 --> 00:50:00,080 rằng chúng ta có thể nếu chúng ta xếp chồng lên rất nhiều cuộc gọi chức năng, 1220 00:50:00,080 --> 00:50:04,540 nhưng chúng tôi viết qua bộ nhớ mà chúng ta biết chúng ta có thể sử dụng. 1221 00:50:04,540 --> 00:50:06,170 Và cho phép chúng ta làm điều xấu. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 Yeah? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Vâng, bạn có thể muốn chỉ cần lặp lại điều này, 1225 00:50:10,950 --> 00:50:12,699 nhưng bạn cũng có thể nghĩ của một chồng tràn 1226 00:50:12,699 --> 00:50:15,374 là giống như một loại hình cụ thể tràn bộ đệm. 1227 00:50:15,374 --> 00:50:17,665 Hoặc bạn chỉ nghĩ về bạn ngăn xếp như một bộ đệm thực sự lớn. 1228 00:50:17,665 --> 00:50:20,724 Sau đó, khi bạn tràn bạn sắp xếp, đó là loại giống như một lỗi tràn bộ đệm. 1229 00:50:20,724 --> 00:50:23,390 Nhưng một chồng tràn chỉ là một là hạn cụ thể được sử dụng khi stack 1230 00:50:23,390 --> 00:50:24,310 bản thân tràn. 1231 00:50:24,310 --> 00:50:27,500 >> HANNAH: Phải, như vậy để lặp lại cho các video, 1232 00:50:27,500 --> 00:50:31,756 nó, bạn có thể nghĩ đến chồng tràn như một loại hình cụ thể của lỗi tràn bộ đệm. 1233 00:50:31,756 --> 00:50:33,040 Mát mẻ? 1234 00:50:33,040 --> 00:50:34,562 Bất kỳ câu hỏi nhiều hơn trước khi chúng tôi đi về? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Tuyệt vời. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> OK, mát mẻ, vì vậy chúng ta hãy nói về một số thông báo lỗi phổ biến. 1239 00:50:39,727 --> 00:50:42,060 Đây là điều mà có được hiển thị lên trên nhiều câu đố, 1240 00:50:42,060 --> 00:50:44,740 nên cái gì đó là giá trị tham gia một cái nhìn thứ hai tại. 1241 00:50:44,740 --> 00:50:46,860 Tôi chắc rằng bạn đã gặp phải ít nhất là một số trong những 1242 00:50:46,860 --> 00:50:48,690 như bạn đang làm vấn đề của bạn đặt ra. 1243 00:50:48,690 --> 00:50:50,980 Vì vậy, hãy chắc chắn rằng bạn có thể nói chuyện về họ trên các bài kiểm tra. 1244 00:50:50,980 --> 00:50:52,990 >> Vì vậy, một trong những đầu tiên là một lỗi phân khúc. 1245 00:50:52,990 --> 00:50:55,250 Và đó là bất cứ lúc nào chúng tôi cố gắng để truy cập bộ nhớ 1246 00:50:55,250 --> 00:50:57,130 rằng chúng tôi không được phép truy cập. 1247 00:50:57,130 --> 00:51:00,280 Vì vậy, bạn migh đã thấy điều này, ví dụ, trong breakout. 1248 00:51:00,280 --> 00:51:03,390 Nếu phát hiện va chạm trở về null, và sau đó bạn 1249 00:51:03,390 --> 00:51:05,500 cố gắng làm một cái gì đó với giá trị null, 1250 00:51:05,500 --> 00:51:08,147 máy tính sẽ cung cấp cho bạn một lỗi phân khúc. 1251 00:51:08,147 --> 00:51:10,730 Vì vậy, một, một điều quan trọng làm để cố gắng tránh điều này 1252 00:51:10,730 --> 00:51:12,000 là luôn luôn kiểm tra null. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> Bạn có thể cũng đã nhìn thấy khai tiềm ẩn của chức năng. 1255 00:51:16,180 --> 00:51:18,370 Vì vậy, đây là những gì sẽ xảy ra khi Allison cho thấy bạn 1256 00:51:18,370 --> 00:51:20,150 làm thế nào chúng ta tạo được một, phải không? 1257 00:51:20,150 --> 00:51:23,440 Vì vậy, hãy nói rằng chúng tôi có một số chức năng mà chúng ta định nghĩa. 1258 00:51:23,440 --> 00:51:24,440 Hãy nói rằng khối lập phương. 1259 00:51:24,440 --> 00:51:27,120 Và đó đi ở phía dưới chức năng của chúng tôi, dưới chính. 1260 00:51:27,120 --> 00:51:35,205 >> Nếu chúng ta quên nói với máy tính về khối lập phương, khi chính cố gắng gọi khối lập phương, 1261 00:51:35,205 --> 00:51:36,830 máy tính sẽ được, như, oh chúa ơi. 1262 00:51:36,830 --> 00:51:38,300 Tôi không có ý tưởng gì đó có nghĩa. 1263 00:51:38,300 --> 00:51:39,760 Tôi không biết phải làm gì, ở đây. 1264 00:51:39,760 --> 00:51:41,594 Vì vậy, các mẫu thử nghiệm nói đừng lo lắng. 1265 00:51:41,594 --> 00:51:42,510 Tôi sẽ cho bạn biết. 1266 00:51:42,510 --> 00:51:43,132 >> Nó sẽ đến. 1267 00:51:43,132 --> 00:51:43,840 Đừng hét vào mặt tôi. 1268 00:51:43,840 --> 00:51:46,697 Đừng đưa cho tôi một tiềm ẩn kê khai chức năng. 1269 00:51:46,697 --> 00:51:49,280 Vì vậy, nếu bạn nhận được lỗi này, một điều bạn sẽ muốn làm 1270 00:51:49,280 --> 00:51:50,821 là chắc chắn rằng bạn có nguyên mẫu của bạn. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 OK? 1273 00:51:53,230 --> 00:51:55,680 >> Và cuối cùng nhưng không kém, định không khai báo 1274 00:51:55,680 --> 00:52:00,570 về cơ bản là khi bạn cố gắng sử dụng một biến mà bạn đã không khai báo. 1275 00:52:00,570 --> 00:52:03,449 Vì vậy, tất cả của một đột ngột bạn bắt đầu nói như n cộng với cộng với. 1276 00:52:03,449 --> 00:52:04,740 Và các máy tính nói n là gì? 1277 00:52:04,740 --> 00:52:06,660 Bạn không bao giờ nói với tôi n là một điều. 1278 00:52:06,660 --> 00:52:10,930 >> Vì vậy, có một điều bạn phải chắc chắn rằng bạn đã làm là cho máy tính những gì là n. 1279 00:52:10,930 --> 00:52:13,320 Vì vậy, ví dụ, n có thể là một số nguyên. 1280 00:52:13,320 --> 00:52:14,999 Và sau đó bạn sẽ tránh được lỗi này. 1281 00:52:14,999 --> 00:52:16,290 Bất kỳ câu hỏi về lỗi phổ biến? 1282 00:52:16,290 --> 00:52:17,260 Có? 1283 00:52:17,260 --> 00:52:19,344 >> HỌC SINH: Đối với các ngầm kê khai chức năng, 1284 00:52:19,344 --> 00:52:22,343 có thể nó cũng là bạn bỏ qua một các thư viện bạn đã dự 1285 00:52:22,343 --> 00:52:24,400 bao gồm, chứ không phải là nguyên mẫu? 1286 00:52:24,400 --> 00:52:26,359 >> HANNAH: Đúng, vì vậy Câu hỏi là, có thể bạn 1287 00:52:26,359 --> 00:52:28,650 cũng nhận được lỗi này nếu bạn quên bao gồm một thư viện. 1288 00:52:28,650 --> 00:52:29,085 >> HỌC SINH: Vâng. 1289 00:52:29,085 --> 00:52:30,876 >> HANNAH: Tuyệt đối, bởi vì trong cùng một cách 1290 00:52:30,876 --> 00:52:33,540 mà chúng tôi muốn đưa nguyên mẫu của chúng tôi trước khi chức năng chính, 1291 00:52:33,540 --> 00:52:37,717 nếu chúng ta có một thư viện, những người sẽ về cơ bản bao gồm các nguyên mẫu, 1292 00:52:37,717 --> 00:52:39,425 bao gồm các định nghĩa các chức năng. 1293 00:52:39,425 --> 00:52:40,585 Great câu hỏi. 1294 00:52:40,585 --> 00:52:43,230 >> HỌC SINH: Đối với một phân khúc lỗi, sẽ cũng 1295 00:52:43,230 --> 00:52:47,350 xảy ra nếu chúng ta, như thế, cố gắng để truy cập vào một biến, 1296 00:52:47,350 --> 00:52:51,947 như thế, trong một khác nhau [không nghe được] hơn nó được khai báo trong? 1297 00:52:51,947 --> 00:52:54,030 HANNAH: Chắc chắn rồi, vì vậy chúng tôi sẽ nhận được một lỗi phân khúc 1298 00:52:54,030 --> 00:52:56,270 nếu chúng ta cố gắng truy cập vào một biến ra khỏi phạm vi? 1299 00:52:56,270 --> 00:52:57,104 Là một câu hỏi? 1300 00:52:57,104 --> 00:52:57,645 HỌC SINH: Vâng. 1301 00:52:57,645 --> 00:52:58,430 HANNAH: Beautiful. 1302 00:52:58,430 --> 00:53:01,840 Vì vậy, có lẽ, bạn sẽ nhận được một lỗi định không khai báo thay thế. 1303 00:53:01,840 --> 00:53:04,006 Vì vậy, nó chỉ sẽ nói Tôi không biết đó là những gì. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Cool, bất cứ điều gì khác? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Yeah, OK, xinh đẹp. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> Tất cả righty, vì vậy đệ quy. 1310 00:53:12,400 --> 00:53:15,160 Vì vậy, tôi đã đề cập một vài lần rằng chúng ta có thể nhận được một chồng tràn 1311 00:53:15,160 --> 00:53:17,919 bởi vì chúng tôi đang gọi điện thoại của chúng tôi hàm đệ quy rất nhiều lần. 1312 00:53:17,919 --> 00:53:20,210 Chúng tôi đang nhận được tất cả các ngăn xếp khung, blah, blah, blah. 1313 00:53:20,210 --> 00:53:22,420 Những gì thậm chí là một hàm đệ quy? 1314 00:53:22,420 --> 00:53:25,680 Vâng, một hàm đệ quy là bất kỳ chức năng mà tự gọi mình. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Một số điều cần lưu ý khi bạn đang thực hiện chức năng đệ quy, 1317 00:53:30,160 --> 00:53:31,940 không quên bao gồm một trường hợp cơ sở. 1318 00:53:31,940 --> 00:53:34,010 Một trường hợp cơ sở là điểm mà tại đó chúng tôi kết thúc. 1319 00:53:34,010 --> 00:53:38,740 Vì vậy, ví dụ, nếu chúng ta đang mã hóa, , Nói, Fibonacci đệ quy, 1320 00:53:38,740 --> 00:53:43,210 chúng tôi muốn chắc chắn rằng khi chúng tôi nhận được đến 0 hoặc số Fibonacci đầu tiên, 1321 00:53:43,210 --> 00:53:46,220 hai con số có những trường hợp này, bởi vì những người không phải phụ thuộc 1322 00:53:46,220 --> 00:53:47,700 về những điều mà đến trước. 1323 00:53:47,700 --> 00:53:48,990 Những người có giá trị riêng của họ. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Một số ưu để đệ quy, mà là một Câu hỏi chúng ta đã nhìn thấy trên các câu đố qua. 1326 00:53:55,320 --> 00:53:57,930 Họ có thể dẫn đến nhiều ngắn gọn, mã thanh lịch. 1327 00:53:57,930 --> 00:54:00,510 Và rất nhiều chức năng, một rất nhiều thuật toán khác nhau, 1328 00:54:00,510 --> 00:54:02,350 thực sự là đối tượng của đệ quy. 1329 00:54:02,350 --> 00:54:05,510 Định nghĩa của họ có thể là đệ quy trong và của chính nó. 1330 00:54:05,510 --> 00:54:06,980 Vì vậy, Fibonacci là một. 1331 00:54:06,980 --> 00:54:07,860 Thừa là một. 1332 00:54:07,860 --> 00:54:10,480 Hợp nhất phân loại là one-- tất cả những điều mà bạn có thể nhìn vào. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 OK, bất kỳ câu hỏi? 1335 00:54:13,460 --> 00:54:13,960 Có? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> SINH VIÊN: Là một trường hợp góc tương tự như một trường hợp cơ sở? 1338 00:54:19,612 --> 00:54:22,590 Hoặc là đối với một số khác loại [không nghe được]? 1339 00:54:22,590 --> 00:54:25,170 >> HANNAH: Chắc chắn, do đó, một trường hợp góc là any-- vậy 1340 00:54:25,170 --> 00:54:27,580 là trường hợp góc giống như trường hợp cơ sở? 1341 00:54:27,580 --> 00:54:32,825 Một góc trường hợp là bất cứ điều gì của bạn mã có thể hành xử một chút khác nhau. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 Trường hợp cơ sở được loại liên quan, trong rằng họ đang như trường hợp đặc biệt 1344 00:54:38,610 --> 00:54:40,240 mà bạn muốn xem xét. 1345 00:54:40,240 --> 00:54:43,240 Tuy nhiên, ý tưởng về một trường hợp cơ sở là bạn muốn hàm đệ quy của bạn 1346 00:54:43,240 --> 00:54:44,870 dừng lại ở một số điểm. 1347 00:54:44,870 --> 00:54:46,490 Nó không thể giữ tự xưng là mãi mãi. 1348 00:54:46,490 --> 00:54:47,781 Nó cần phải dừng lại ở một số điểm. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ROB: Có, thường xuyên, trường hợp cơ sở của bạn có thể là ví dụ về các căn cứ góc. 1351 00:54:53,460 --> 00:54:55,876 >> HANNAH: Đúng, mát mẻ, bất cứ điều gì? 1352 00:54:55,876 --> 00:54:58,732 >> HỌC SINH: bạn có thể giải thích căn cứ hơn một chút? 1353 00:54:58,732 --> 00:55:01,600 Tôi hoàn toàn không hiểu [Không nghe được] trường hợp cơ sở. 1354 00:55:01,600 --> 00:55:02,676 >> HANNAH: Trong trường hợp cơ sở? 1355 00:55:02,676 --> 00:55:03,140 >> HỌC SINH: trường hợp cơ sở, yeah. 1356 00:55:03,140 --> 00:55:03,770 >> HANNAH: Oh yeah, chắc chắn. 1357 00:55:03,770 --> 00:55:04,270 Hãy xem. 1358 00:55:04,270 --> 00:55:05,480 Chúng ta đã phấn hơn ở đây? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Có, chúng tôi làm. 1361 00:55:07,320 --> 00:55:09,530 OK, vì vậy thực sự nhanh chóng, tôi sẽ cố gắng viết đủ lớn 1362 00:55:09,530 --> 00:55:11,320 vì vậy bạn có thể thấy trên màn hình. 1363 00:55:11,320 --> 00:55:13,490 Hãy nói về, thực sự nhanh chóng, Fibonacci. 1364 00:55:13,490 --> 00:55:15,550 Vì vậy, tôi sẽ cung cấp cho bạn dãy Fibonacci. 1365 00:55:15,550 --> 00:55:17,090 Bạn có thể tìm kiếm các định nghĩa. 1366 00:55:17,090 --> 00:55:26,050 >> Về cơ bản, mỗi số trong dãy là tổng của hai số trước đó. 1367 00:55:26,050 --> 00:55:29,720 OK, vì vậy cách mà tôi vừa mô tả Fibonacci, 1368 00:55:29,720 --> 00:55:31,530 bạn có thể nghe thấy đệ quy, phải không? 1369 00:55:31,530 --> 00:55:35,280 Khi tôi nói mỗi số là tổng của hai số trước, 1370 00:55:35,280 --> 00:55:36,420 chúng ta có thể nói OK. 1371 00:55:36,420 --> 00:55:38,570 Vâng, Fibonacci thứ n number-- vì vậy hãy 1372 00:55:38,570 --> 00:55:42,260 nói rằng chúng ta có chức năng này gọi fib fib-- của n 1373 00:55:42,260 --> 00:55:48,260 là có được bằng fib của n trừ đi 1 plus-- xin lỗi, 1374 00:55:48,260 --> 00:55:51,240 chúng tôi sẽ đi vào dòng tiếp theo trên fib here-- của n trừ đi 2. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> OK, vì vậy điều này làm việc tuyệt vời nếu bạn nhìn vào, ví dụ, không, một, 1377 00:55:56,790 --> 00:55:59,410 hai, ba, bốn, số Fibonacci thứ năm, 1378 00:55:59,410 --> 00:56:03,561 nơi bạn có thể nói rằng 5 tương đương với 2 cộng với 3. 1379 00:56:03,561 --> 00:56:05,060 Nhưng nếu bạn đang ở đầu? 1380 00:56:05,060 --> 00:56:07,184 Điều gì nếu bạn chỉ cần nhấn hai giá trị đầu tiên này? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> Để có được 1 này, bạn có thể không nói thêm trước đó hai, 1383 00:56:11,330 --> 00:56:13,930 bởi vì đó không và- Tôi không biết. 1384 00:56:13,930 --> 00:56:15,390 Vì vậy, tại một số điểm, chúng ta cần phải dừng lại. 1385 00:56:15,390 --> 00:56:21,250 Tại một số điểm, chúng ta cần phải nói rằng những hai chỉ có định nghĩa riêng của họ. 1386 00:56:21,250 --> 00:56:23,890 Các số Fibonacci 0 là 0. 1387 00:56:23,890 --> 00:56:26,115 Và số Fibonacci đầu tiên là 1. 1388 00:56:26,115 --> 00:56:34,120 >> Vì vậy, cách tôi có thể mã này, tôi sẽ nói gì nếu n là ít hơn hai, 1389 00:56:34,120 --> 00:56:35,130 sau đó chỉ cần quay trở lại n. 1390 00:56:35,130 --> 00:56:36,494 Và đó sẽ là trường hợp cơ sở của tôi. 1391 00:56:36,494 --> 00:56:38,660 Đó là cách mà tôi biết để ngăn chặn với một hàm đệ quy. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 Là rõ ràng? 1394 00:56:41,410 --> 00:56:41,940 Tuyệt vời. 1395 00:56:41,940 --> 00:56:43,260 Bất cứ điều gì khác trên đệ quy? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Đẹp. 1398 00:56:45,930 --> 00:56:48,750 >> Hãy nhanh chóng nói về tìm kiếm và thời gian chạy loại. 1399 00:56:48,750 --> 00:56:52,660 Và sau đó tôi sẽ cung cấp cho một số Davin thời gian để nói về mã hóa ví dụ. 1400 00:56:52,660 --> 00:56:56,490 Vì vậy, đây là tìm kiếm chính và các loại mà bạn nên biết. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- tôi không thể đảm bảo, bởi vì tôi đã không nhìn thấy quiz-- 1402 00:56:59,500 --> 00:57:01,940 nhưng điều này đi lên đố sau khi bài kiểm tra sau khi bỏ thuốc lá. 1403 00:57:01,940 --> 00:57:04,050 Vì vậy, chắc chắn sử dụng biểu đồ này. 1404 00:57:04,050 --> 00:57:05,682 Giống như, có biểu đồ này. 1405 00:57:05,682 --> 00:57:06,890 Đặt nó vào cheat sheet của bạn. 1406 00:57:06,890 --> 00:57:07,931 Bạn sẽ là một người hạnh phúc. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> Điều này cho chúng ta biết thời gian chạy của mỗi của các thuật toán sắp xếp và tìm kiếm. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Vì vậy, tìm kiếm tuyến tính, bạn có thể nhìn thấy chạy thời gian, và cùng với tìm kiếm nhị phân. 1411 00:57:18,850 --> 00:57:21,490 Đi qua những gì các thuật toán làm, ý tưởng chung. 1412 00:57:21,490 --> 00:57:24,220 Nhìn vào một số giả, nếu không mã chính nó. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Bạn sẽ thấy rằng bong bóng sắp xếp có một trên ràng buộc trong trường hợp tồi tệ nhất của n bình phương. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Vì vậy, nếu mảng của chúng tôi là hoàn toàn ngược trước khi chúng tôi muốn sắp xếp nó, 1417 00:57:34,680 --> 00:57:37,090 chúng tôi sẽ nói rằng đó là sẽ thực hiện các bước n bình phương. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Nhưng trong trường hợp tốt nhất, do đó, thấp hơn giới hạn cho các trường hợp tốt nhất 1420 00:57:41,730 --> 00:57:44,300 là có được nếu nó đã hoàn toàn được sắp xếp. 1421 00:57:44,300 --> 00:57:46,671 Sau đó, tất cả chúng ta phải làm là kiểm tra xem nó được sắp xếp. 1422 00:57:46,671 --> 00:57:47,921 Có một câu hỏi ở đây? 1423 00:57:47,921 --> 00:57:49,805 >> HỌC SINH: Khi sẽ bạn muốn sử dụng loại? 1424 00:57:49,805 --> 00:57:50,747 Việc sắp xếp. 1425 00:57:50,747 --> 00:57:52,160 Tôi chỉ tò mò. 1426 00:57:52,160 --> 00:57:53,510 >> HANNAH: Khi bạn sẽ muốn sử dụng lựa chọn loại? 1427 00:57:53,510 --> 00:57:54,010 Này? 1428 00:57:54,010 --> 00:57:55,705 Một trong đó là n bình phương trong cả hai trường hợp? 1429 00:57:55,705 --> 00:57:56,860 >> HỌC SINH: [không nghe được]. 1430 00:57:56,860 --> 00:57:58,151 >> HANNAH: Vì vậy, nó rất khác nhau. 1431 00:57:58,151 --> 00:58:00,760 Nếu bạn có cụ thể yêu cầu đối với chương trình của bạn, 1432 00:58:00,760 --> 00:58:04,887 giống như những thứ như thế nào nếu chúng ta chỉ nói thực hiện một sorry-- search-- 1433 00:58:04,887 --> 00:58:06,720 thực hiện sắp xếp, bạn sẽ có thể muốn đi 1434 00:58:06,720 --> 00:58:09,950 cho một trong những người mà có một trường hợp tốt nhất của n, 1435 00:58:09,950 --> 00:58:12,410 hoặc thấp hơn bị ràng buộc trong trường hợp tốt nhất của n. 1436 00:58:12,410 --> 00:58:14,790 Nhưng có thể có những điều nào đó như, nói, 1437 00:58:14,790 --> 00:58:16,767 giao dịch hoán đổi thực sự đắt đối với một số lý do. 1438 00:58:16,767 --> 00:58:18,850 Sau đó, bạn sẽ muốn làm bong bóng sắp xếp, bởi vì bạn 1439 00:58:18,850 --> 00:58:20,641 phải làm như vậy nhiều giao dịch hoán đổi, những điều như thế. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Bất kỳ có other--? 1442 00:58:23,098 --> 00:58:25,488 >> HỌC SINH: Nó sẽ được [không nghe được] để nói rằng [không nghe được]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 HANNAH: Đó là một điều rằng sẽ cho bạn biết 1445 00:58:31,910 --> 00:58:33,670 nếu bạn đang nhìn vào thực hiện. 1446 00:58:33,670 --> 00:58:35,850 Con đường tôi sẽ thực sự suy nghĩ về lý do tại sao nó là n 1447 00:58:35,850 --> 00:58:40,840 squared là chúng ta phải chạy thông qua các mảng của chúng tôi có độ dài n, 1448 00:58:40,840 --> 00:58:42,765 mỗi lần làm nhiều nhất, n giao dịch hoán đổi. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 Và chúng ta phải làm quá trình này n lần. 1451 00:58:46,220 --> 00:58:51,130 >> Vì vậy, khi bạn phải thực hiện nhiều nhất, n giao dịch hoán đổi và cho n chạy qua mảng, 1452 00:58:51,130 --> 00:58:52,380 có sẽ được n bình phương. 1453 00:58:52,380 --> 00:58:55,480 Nhưng có, điều này sẽ được tiết lộ thông qua đôi này cho vòng lặp, 1454 00:58:55,480 --> 00:58:59,428 như câu hỏi asked-- hoặc lồng nhau cho vòng lặp, tôi nên nói. 1455 00:58:59,428 --> 00:59:00,890 OK? 1456 00:59:00,890 --> 00:59:03,375 >> Và sau đó hợp nhất phân loại, mà là loại nhanh nhất, chúng tôi bây giờ, 1457 00:59:03,375 --> 00:59:07,560 hoặc mà chúng tôi đã đề cập trong CS50, biết rằng các thuật toán chính là 1458 00:59:07,560 --> 00:59:10,150 ý tưởng này đột nhập vào phần được sắp xếp và sau đó 1459 00:59:10,150 --> 00:59:11,980 sáp nhập cùng các bit được sắp xếp. 1460 00:59:11,980 --> 00:59:14,170 Và sẽ được chúng tôi đăng nhập n log n. 1461 00:59:14,170 --> 00:59:17,110 Bất kỳ câu hỏi về tìm kiếm và các loại trước khi tôi vượt qua nó trên? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Hãy xem. 1464 00:59:21,040 --> 00:59:21,800 >> Oh, danh sách liên kết. 1465 00:59:21,800 --> 00:59:23,210 Xin lỗi, tôi có thêm một chủ đề. 1466 00:59:23,210 --> 00:59:25,000 OK, tuyệt vời, danh sách liên kết. 1467 00:59:25,000 --> 00:59:27,900 Vấn đề với các mảng, họ có một kích thước cố định. 1468 00:59:27,900 --> 00:59:30,634 Vì vậy, nếu bạn không biết làm thế nào lớn đầu vào của bạn là có được, 1469 00:59:30,634 --> 00:59:32,050 bạn không muốn tạo ra một mảng. 1470 00:59:32,050 --> 00:59:34,080 Bởi vì nếu chúng ta tạo ra một mảng đó là quá nhỏ, 1471 00:59:34,080 --> 00:59:35,930 chúng ta có thể chạy vào lỗi tràn bộ đệm. 1472 00:59:35,930 --> 00:59:38,890 >> Vì vậy, thay vào đó, chúng ta có thể làm điều gì đó với danh sách liên kết, mà 1473 00:59:38,890 --> 00:59:44,280 cho phép chúng ta có một động cấu trúc dữ liệu có kích thước 1474 00:59:44,280 --> 00:59:48,970 mà sẽ cho phép chúng ta lưu trữ một số lượng linh hoạt hơn của dữ liệu. 1475 00:59:48,970 --> 00:59:54,030 Vì vậy, trong mỗi nút trong của chúng tôi danh sách liên kết, chúng tôi có hai miếng. 1476 00:59:54,030 --> 00:59:56,820 Chúng tôi có giá trị thực tế mà nó lưu trữ. 1477 00:59:56,820 --> 00:59:59,530 Vì vậy, đó chỉ là những điều bạn sẽ thấy trong mảng, ví dụ. 1478 00:59:59,530 --> 01:00:04,600 Và sau đó chúng tôi cũng theo dõi một con trỏ để điều tiếp theo trong bộ nhớ. 1479 01:00:04,600 --> 01:00:06,430 >> Không giống như mảng, mà chúng ta biết là tất cả sẽ 1480 01:00:06,430 --> 01:00:10,890 để be-- phần tử mảng đều là một sau khi một trong memory-- liên kết 1481 01:00:10,890 --> 01:00:13,300 danh sách có thể là bất cứ nơi nào trong bộ nhớ. 1482 01:00:13,300 --> 01:00:14,590 Họ là các vị trí tùy ý. 1483 01:00:14,590 --> 01:00:16,410 Vì vậy, nếu chúng ta thực sự đi tìm họ, chúng tôi 1484 01:00:16,410 --> 01:00:19,770 cần theo dõi Điều tiếp theo trong danh sách của chúng tôi. 1485 01:00:19,770 --> 01:00:22,840 >> Và sau đó để biết nơi danh sách đó như một toàn thể là, 1486 01:00:22,840 --> 01:00:26,276 tất cả chúng ta phải theo dõi là yếu tố đầu tiên trong danh sách liên kết của chúng tôi. 1487 01:00:26,276 --> 01:00:27,900 Và điều đó sẽ cho phép chúng tôi theo dõi suốt. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Vì vậy, đây là cách bạn có thể xác định một chế độ. 1490 01:00:33,070 --> 01:00:36,160 Đây là một cơ hội tuyệt vời để tận dụng lợi thế của cấu trúc. 1491 01:00:36,160 --> 01:00:39,660 Bởi vì bạn có ý tưởng này, tốt, cho một nút cho trước, tôi có hai miếng. 1492 01:00:39,660 --> 01:00:41,770 Tôi có giá trị thực tế bản thân. 1493 01:00:41,770 --> 01:00:45,610 Và sau đó tôi có một con trỏ đến phần tử tiếp theo trong danh sách liên kết. 1494 01:00:45,610 --> 01:00:49,150 Vì vậy, bạn thấy, chúng tôi có một số nguyên n, mà là có được giá trị thực tế, 1495 01:00:49,150 --> 01:00:53,150 và sau đó một con trỏ đến một nút, được gọi tới. 1496 01:00:53,150 --> 01:00:56,431 Vì vậy, đó sẽ là người tiếp theo phần tử trong danh sách liên kết của chúng tôi. 1497 01:00:56,431 --> 01:00:56,972 HỌC SINH: Vâng? 1498 01:00:56,972 --> 01:01:01,920 Bạn phải xác định rằng ngôi sao giống như một cấu trúc? 1499 01:01:01,920 --> 01:01:05,620 >> HANNAH: Vâng, như vậy kể từ này gần như là một loại, 1500 01:01:05,620 --> 01:01:07,980 nó có vẻ như một đệ quy định nghĩa trong chúng ta mà 1501 01:01:07,980 --> 01:01:12,080 cần phải biết những gì một nút là bên trong để tìm kiếm một nút. 1502 01:01:12,080 --> 01:01:14,450 Kể từ khi nó không thực sự biết những gì một nút là hoàn toàn 1503 01:01:14,450 --> 01:01:17,283 cho đến khi chúng tôi nhận được đến cuối this-- và sau này, chúng tôi chỉ có thể gọi nó 1504 01:01:17,283 --> 01:01:21,935 một node-- bên trong định nghĩa này, chúng ta cần phải gọi nó là một cấu trúc nút. 1505 01:01:21,935 --> 01:01:22,560 Great câu hỏi. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Bất cứ điều gì khác? 1508 01:01:25,214 --> 01:01:26,198 Có? 1509 01:01:26,198 --> 01:01:29,150 >> HỌC SINH: Tại sao chúng ta phải nói nút hai lần? 1510 01:01:29,150 --> 01:01:33,578 Bởi vì khi chúng tôi ở [không nghe được] chúng tôi chỉ cần có để làm điều đó trong dấu chấm phẩy, 1511 01:01:33,578 --> 01:01:37,352 nhưng bây giờ chúng ta phải thấy rằng cấu trúc nút? [Không nghe được]. 1512 01:01:37,352 --> 01:01:39,060 HANNAH: Vì vậy, tôi tin rằng trong ví dụ cuối cùng, 1513 01:01:39,060 --> 01:01:42,110 chúng tôi chỉ tạo ra bất cứ lúc nào bạn muốn sử dụng một sinh viên sau đó, bạn 1514 01:01:42,110 --> 01:01:46,430 đã phải sử dụng cấu trúc node-- Tôi sorry-- struct sinh viên. 1515 01:01:46,430 --> 01:01:51,575 Điều này cho phép chúng tôi, sau khi thực tế, chỉ cần nút sử dụng thêm một loại mới, về cơ bản. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 Điều đó làm cho tinh thần? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Vì vậy, chúng tôi phải quay trở lại và nhìn vào các mã trước. 1520 01:01:57,150 --> 01:01:59,025 Nhưng tôi đoán rằng chúng tôi không sử dụng typedef. 1521 01:01:59,025 --> 01:02:02,050 Và chúng tôi hỏi những câu hỏi, tại sao chúng ta cần phải sử dụng typedef? 1522 01:02:02,050 --> 01:02:05,540 Typedef cho phép chúng ta tránh những cấu trúc từ trong đầu. 1523 01:02:05,540 --> 01:02:06,221 Có? 1524 01:02:06,221 --> 01:02:08,095 HỌC SINH: Những loại câu hỏi sẽ đi lên 1525 01:02:08,095 --> 01:02:10,400 về về các nút và các danh sách liên kết? 1526 01:02:10,400 --> 01:02:15,110 >> HANNAH: Vì vậy, có một điều chúng ta có thể nói như thế nào bạn có thể tìm kiếm thông qua một danh sách liên kết? 1527 01:02:15,110 --> 01:02:16,930 OK, vì nó là một ít phức tạp hơn 1528 01:02:16,930 --> 01:02:18,520 hơn nếu chúng tôi đang tìm kiếm thông qua một mảng. 1529 01:02:18,520 --> 01:02:21,472 Chúng tôi chỉ có thể nhìn vào yếu tố không, phần một, phần hai, blah, blah, 1530 01:02:21,472 --> 01:02:21,972 blah. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Nếu chúng ta muốn tìm kiếm thông qua một danh sách liên kết, 1533 01:02:24,420 --> 01:02:27,229 chúng tôi thực sự phải làm theo mê cung này ít của con trỏ. 1534 01:02:27,229 --> 01:02:29,270 Vì vậy, hãy thực sự đi thông qua điều này thực sự nhanh chóng. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Những gì chúng tôi có thể làm trong đặt hàng đối với: hãy nói chúng tôi 1537 01:02:32,860 --> 01:02:35,430 muốn chỉ cần lặp qua danh sách của chúng tôi hoàn toàn liên kết. 1538 01:02:35,430 --> 01:02:37,450 Chúng tôi sẽ bắt đầu từ đầu. 1539 01:02:37,450 --> 01:02:39,890 Và sau đó để di chuyển đến phần tử tiếp theo, 1540 01:02:39,890 --> 01:02:43,680 thay vì chỉ incrementing bởi một như chúng tôi có thể trong đi qua một mảng, 1541 01:02:43,680 --> 01:02:45,720 chúng tôi đang thực sự đi vào theo con trỏ tới, 1542 01:02:45,720 --> 01:02:48,360 vì vậy chúng tôi có thể tìm thấy nơi ở bộ nhớ các yếu tố tiếp theo là. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Vì vậy, tôi biết điều đó là không đủ để mất tất cả điều này ngay bây giờ, 1545 01:02:51,690 --> 01:02:52,650 nhưng bạn sẽ có những slide. 1546 01:02:52,650 --> 01:02:54,730 Vì vậy, bạn có thể đi qua này chậm hơn một chút. 1547 01:02:54,730 --> 01:02:56,890 Nhưng về cơ bản, những gì chúng ta muốn làm là theo các con trỏ 1548 01:02:56,890 --> 01:02:58,550 thông qua toàn bộ các danh sách liên kết. 1549 01:02:58,550 --> 01:03:00,258 Vì vậy, đây là một câu hỏi bạn có thể được yêu cầu. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Một cái gì đó để thông báo với chèn, chúng ta hãy nói 1552 01:03:03,980 --> 01:03:07,925 chúng tôi muốn đặt một nguyên tố mới ở phía trước của danh sách liên kết của chúng tôi. 1553 01:03:07,925 --> 01:03:10,800 Chúng tôi phải rất cẩn thận về thứ tự trong đó chúng ta 1554 01:03:10,800 --> 01:03:12,760 bố trí các con trỏ. 1555 01:03:12,760 --> 01:03:15,230 Bởi vì chúng ta hãy nói rằng tôi chỉ nói OK. 1556 01:03:15,230 --> 01:03:18,930 Hãy điểm đầu đến yếu tố mới này. 1557 01:03:18,930 --> 01:03:23,550 Chỉ cần làm cho nó trỏ tới 1 Sau đó, chúng tôi đã về cơ bản bị mất phần còn lại của danh sách của chúng tôi, 1558 01:03:23,550 --> 01:03:25,860 bởi vì tôi không nhớ nơi 2 cuộc sống. 1559 01:03:25,860 --> 01:03:27,730 >> Vì vậy, chúng ta phải làm trong một trật tự rất cụ thể. 1560 01:03:27,730 --> 01:03:31,500 Đầu tiên, chúng tôi làm mới điểm yếu tố để các đầu. 1561 01:03:31,500 --> 01:03:33,970 Và sau đó chúng tôi làm cho đầu trỏ đến các yếu tố mới. 1562 01:03:33,970 --> 01:03:38,455 Vì vậy, chúng ta hãy xem những gì mà trông giống như với arrows-- chỉ như thế. 1563 01:03:38,455 --> 01:03:42,080 Vì vậy, trước tiên bạn phải mới điểm yếu tố để các đầu cũ. 1564 01:03:42,080 --> 01:03:45,990 Và bây giờ, chúng tôi có người đứng đầu trỏ đến các yếu tố mới đầu tiên. 1565 01:03:45,990 --> 01:03:47,187 Bất kỳ câu hỏi với điều này? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> OK đây là một số mã một lần nữa, một cái gì đó nhìn một chút sau đó. 1568 01:03:54,350 --> 01:03:58,630 Và bây giờ tôi sẽ chuyển nó qua cho Davin cho GDB và một chút chút thực hành 1569 01:03:58,630 --> 01:03:59,480 mã hóa trên giấy. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Đẹp. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: Và Rob. 1573 01:04:01,810 --> 01:04:02,360 >> HANNAH: Oh, Davin và Rob. 1574 01:04:02,360 --> 01:04:03,055 Tôi xin lỗi. 1575 01:04:03,055 --> 01:04:03,596 >> HỌC SINH: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Cảm ơn. 1578 01:04:09,110 --> 01:04:11,209 >> Davin: Bạn có muốn nói tất cả mọi thứ nhanh chóng thực? 1579 01:04:11,209 --> 01:04:11,875 ROB: Yeah, yeah. 1580 01:04:11,875 --> 01:04:12,845 Davin: Khi tôi lên. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 OK, trong khi Rob đặt microphone trên, vì vậy GDB là gì? 1583 01:04:19,520 --> 01:04:23,945 Mọi người nên đã thấy trong GDB lớp và cũng có lúc giờ hành chính. 1584 01:04:23,945 --> 01:04:25,070 Và bạn nên sử dụng nó. 1585 01:04:25,070 --> 01:04:25,750 Vì vậy, GDB là gì? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 Bất kỳ ai? 1588 01:04:28,850 --> 01:04:29,540 >> HỌC SINH: Đó là một trình gỡ lỗi. 1589 01:04:29,540 --> 01:04:30,250 >> Davin: Đó là một trình gỡ lỗi. 1590 01:04:30,250 --> 01:04:31,624 Và những gì nó cho phép bạn làm gì? 1591 01:04:31,624 --> 01:04:33,064 Giống như, tại sao chúng ta thích GDB? 1592 01:04:33,064 --> 01:04:34,480 HỌC SINH: Để làm chậm chương trình. 1593 01:04:34,480 --> 01:04:36,740 Davin: Đúng, vì vậy bạn có thể đi bộ qua nó như tốc độ của con người. 1594 01:04:36,740 --> 01:04:38,490 Và như vậy là những gì một số lệnh bạn có thể làm gì? 1595 01:04:38,490 --> 01:04:40,407 Vâng, có lẽ là nghỉ lệnh yêu thích của bạn. 1596 01:04:40,407 --> 01:04:43,240 Bởi vì đó là cho phép bạn phá vỡ chương trình và thực sự đi qua nó 1597 01:04:43,240 --> 01:04:44,280 từng dòng. 1598 01:04:44,280 --> 01:04:46,500 >> Run cho phép bạn chạy nó. 1599 01:04:46,500 --> 01:04:48,210 Tiếp theo, giống như bước qua. 1600 01:04:48,210 --> 01:04:49,820 Là gì giữa tiếp theo và bước? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Chờ đợi, nói ra điều đó. 1603 01:04:53,190 --> 01:04:54,060 Đó là chính xác. 1604 01:04:54,060 --> 01:04:55,280 >> HỌC SINH: [không nghe được]. 1605 01:04:55,280 --> 01:04:56,190 >> Davin: Vâng, tuyệt vời. 1606 01:04:56,190 --> 01:04:59,210 Vì vậy, như thế nào, bước tiếp theo, và nếu you're-- chúng ta hãy nói rằng bạn có một chức năng bạn 1607 01:04:59,210 --> 01:04:59,950 xác định. 1608 01:04:59,950 --> 01:05:03,350 Hãy nói rằng một số chức năng chính của bạn, và bạn chỉ cần nhấn tiếp theo, tiếp theo, 1609 01:05:03,350 --> 01:05:03,850 tiếp theo. 1610 01:05:03,850 --> 01:05:05,910 Bạn đang thực sự đi vào thực hiện chức năng, 1611 01:05:05,910 --> 01:05:07,285 nhưng bạn sẽ nhảy qua nó. 1612 01:05:07,285 --> 01:05:09,711 Nếu bạn nhấn bước, hoặc s hoặc bất cứ điều gì, bạn 1613 01:05:09,711 --> 01:05:11,460 sẽ thực sự nhảy vào chức năng, 1614 01:05:11,460 --> 01:05:14,110 và sau đó bạn có thể nhấn tiếp theo để xem các cuộc gọi khác nhau 1615 01:05:14,110 --> 01:05:16,170 bên trong có chức năng cụ thể. 1616 01:05:16,170 --> 01:05:16,670 Yeah? 1617 01:05:16,670 --> 01:05:18,670 >> HỌC SINH: Có cách nào để nhảy, như, sao ra? 1618 01:05:18,670 --> 01:05:20,750 Davin: Finish, yeah, kết thúc với nhảy bạn ra ngoài. 1619 01:05:20,750 --> 01:05:22,570 Vì vậy, nó sẽ kết thúc mà chức năng, và sau đó bạn 1620 01:05:22,570 --> 01:05:24,153 sẽ trở lại trong chính, ví dụ. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 In sẽ in ra một lần. 1623 01:05:27,370 --> 01:05:29,381 Một cái gì đó tôi luôn luôn sử dụng là màn hình hiển thị. 1624 01:05:29,381 --> 01:05:31,880 Màn hình sẽ in ra liên tục trong suốt toàn bộ 1625 01:05:31,880 --> 01:05:32,470 chương trình của bạn. 1626 01:05:32,470 --> 01:05:33,810 >> Ví dụ, nếu bạn trong một vòng lặp, và bạn 1627 01:05:33,810 --> 01:05:37,018 muốn xem làm thế nào một cái gì đó đang thay đổi, và bạn không muốn, như thế, liên tục 1628 01:05:37,018 --> 01:05:38,940 được làm như in, in ấn, in ấn, màn hình hiển thị 1629 01:05:38,940 --> 01:05:43,230 sẽ hiển thị biến liên tục, mỗi khi bạn nhấn Next. 1630 01:05:43,230 --> 01:05:44,310 Và tiếp tục. 1631 01:05:44,310 --> 01:05:45,905 Vì vậy, GBD, đó là GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> HỌC SINH: một là gì nơi bạn [không nghe được]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 Davin: nó là gì? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> HỌC SINH: Có gì the-- các biến địa phương. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: Có một cái gì đó thực sự như người dân địa phương hoặc một cái gì đó. 1640 01:05:57,780 --> 01:05:58,140 Tôi can't-- 1641 01:05:58,140 --> 01:05:59,930 >> Davin: Nó có thể là một cái gì đó như thế, yeah. 1642 01:05:59,930 --> 01:06:00,830 >> HANNAH: Trong dân địa phương? 1643 01:06:00,830 --> 01:06:01,510 >> Davin: Đó là nó. 1644 01:06:01,510 --> 01:06:02,134 Đó là một trong những. 1645 01:06:02,134 --> 01:06:03,040 ROB: Beautiful. 1646 01:06:03,040 --> 01:06:04,030 >> Davin: Yeah. 1647 01:06:04,030 --> 01:06:06,010 >> HỌC SINH: Điều gì không tiếp tục làm gì? 1648 01:06:06,010 --> 01:06:08,010 >> Davin: Nó continues-- vì vậy nó chỉ sẽ tiếp tục chương trình của bạn. 1649 01:06:08,010 --> 01:06:09,843 Vì vậy, nếu bạn phá vỡ và nhấn tiếp tục, nó sẽ 1650 01:06:09,843 --> 01:06:13,119 chỉ cần chạy chương trình cho đến khi nó chạm nghỉ đó một lần nữa. 1651 01:06:13,119 --> 01:06:14,910 Vì vậy, ví dụ, nếu bạn đã phá vỡ trong một chức năng, 1652 01:06:14,910 --> 01:06:16,720 và bạn sẽ làm như thế nào cho vòng lặp hoặc một cái gì đó như thế, 1653 01:06:16,720 --> 01:06:19,869 và bạn nhấn tiếp tục, nó sẽ tiếp tục và trở lại nghỉ đó. 1654 01:06:19,869 --> 01:06:22,660 Hoặc không có giờ nghỉ, nó sẽ tiếp tục và kết thúc chương trình. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: Vì vậy, chỉ muốn dừng chạy tại các điểm dừng đầu tiên 1656 01:06:25,000 --> 01:06:27,010 bạn nhấn, nếu sau đó bạn nhấn tiếp tục, nó sẽ giữ 1657 01:06:27,010 --> 01:06:28,070 đi cho đến khi nó là điểm dừng tiếp theo. 1658 01:06:28,070 --> 01:06:30,111 Và sau đó tiếp tục sẽ đi với breakpoint tiếp theo. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 Davin: Bất kỳ câu hỏi khác trên GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Vì vậy, tôi nghĩ rằng trong quá khứ, chúng tôi đã hỏi bạn những gì 1663 01:06:35,410 --> 01:06:37,690 GDB là và đưa ra một ví dụ về một số điều bạn 1664 01:06:37,690 --> 01:06:40,770 có thể làm với GDB, vì vậy thực sự đơn giản, nhưng yeah. 1665 01:06:40,770 --> 01:06:42,280 Có bạn đi. 1666 01:06:42,280 --> 01:06:43,250 Và nút? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Vâng, vậy mà hướng là nó? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 HỌC SINH: Đó là nó. 1670 01:06:51,726 --> 01:06:52,160 Davin: Chờ. 1671 01:06:52,160 --> 01:06:52,270 ROB: Anh chàng này? 1672 01:06:52,270 --> 01:06:52,936 Davin: Đó là một trong. 1673 01:06:52,936 --> 01:06:54,660 ROB: Anh chàng này, oh, tôi đã không nhận ra. 1674 01:06:54,660 --> 01:06:56,940 Vì vậy, chúng tôi đã không rõ ràng về những gì tôi the-- không 1675 01:06:56,940 --> 01:06:58,680 biết nó was-- nhưng câu hỏi. 1676 01:06:58,680 --> 01:07:01,180 Chúng tôi không biết chính xác những gì bạn được hỏi về nó, vì vậy chỉ 1677 01:07:01,180 --> 01:07:04,800 để làm rõ một cái gì đó. 1678 01:07:04,800 --> 01:07:07,750 Vì vậy, đầu tiên, như tôi đã nói trước đây, typedef bạn luôn luôn sử dụng chỉ 1679 01:07:07,750 --> 01:07:09,305 tạo ra một biệt danh cho một loại. 1680 01:07:09,305 --> 01:07:13,420 Vì vậy, ngay tại đây, biệt danh chúng tôi việc tạo là cho loại cấu trúc nút. 1681 01:07:13,420 --> 01:07:18,070 >> Vì vậy, đầu tiên, bỏ qua nút này trong typedef, vì vậy đây cấu trúc nút xoăn 1682 01:07:18,070 --> 01:07:21,060 cú đúp xuống xoăn tiếp theo cú đúp là cấu trúc kiểu nút. 1683 01:07:21,060 --> 01:07:23,470 Và chúng ta cần phải nút đó ở đó, bởi vì chúng tôi 1684 01:07:23,470 --> 01:07:25,190 cần phải tham khảo nút ở đây. 1685 01:07:25,190 --> 01:07:29,380 Vì vậy, với loại này của cấu trúc đệ quy, bạn cần phải cung cấp cho struct này một cái tên, 1686 01:07:29,380 --> 01:07:31,340 hoặc nếu không bạn có thể không nói cấu trúc nút ở đây. 1687 01:07:31,340 --> 01:07:33,340 Trong khi đó, trước khi có sinh viên khi chúng tôi đang đánh máy, tôi nghĩ rằng, 1688 01:07:33,340 --> 01:07:35,423 chúng tôi đã không phải nói sinh viên lên ở đó, bởi vì chúng tôi 1689 01:07:35,423 --> 01:07:40,370 không phải nói cấu trúc sinh viên bên trong cấu trúc của chính nó. 1690 01:07:40,370 --> 01:07:43,730 Vì vậy, nó là đệ quy buộc chúng ta phải nói nút đó. 1691 01:07:43,730 --> 01:07:46,610 >> Nút này chỉ là tên chúng tôi cho nút cho typedef. 1692 01:07:46,610 --> 01:07:48,520 Vì vậy, nút đó không phải là giống như nút đó. 1693 01:07:48,520 --> 01:07:51,567 Nhưng nút cấu trúc này là tương tự như nút struct. 1694 01:07:51,567 --> 01:07:54,150 Davin: Vì vậy, bất cứ khi nào bạn gọi, như, nút chức năng chính của bạn, 1695 01:07:54,150 --> 01:07:55,350 bạn sẽ không phải nói struct node. 1696 01:07:55,350 --> 01:07:58,360 Bạn chỉ có thể nói nút, bởi vì nút là một different-- về cơ bản là 1697 01:07:58,360 --> 01:07:59,440 bạn đang nói, OK. 1698 01:07:59,440 --> 01:08:01,490 Thay vì phải gọi nút cấu trúc trong mã của tôi, 1699 01:08:01,490 --> 01:08:04,050 Tôi chỉ muốn đổi tên nó như nút để làm cho nó dễ dàng hơn. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Nếu bạn luôn luôn sử dụng typedef, sau đó này 1701 01:08:06,800 --> 01:08:11,240 là nơi duy nhất bạn sẽ có để khai báo một biến với cấu trúc nút 1702 01:08:11,240 --> 01:08:11,740 ngôi sao, yeah. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> Davin: OK, vì vậy phần cuối cùng là khó dạy because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: Cái gì? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> Davin: Bởi vì nó được mã hóa trên giấy. 1709 01:08:25,649 --> 01:08:28,689 Vì vậy, mỗi năm chúng tôi có mã trên câu hỏi giấy. 1710 01:08:28,689 --> 01:08:32,510 Vì vậy, tôi nghĩ rằng năm ngoái, 12 trong số 80 điểm là mã trên giấy. 1711 01:08:32,510 --> 01:08:36,720 Năm trước đó, 10 trong số 80 năm trước đó, 20 trong số 100, 1712 01:08:36,720 --> 01:08:37,939 vì vậy khá một vài trong số này. 1713 01:08:37,939 --> 01:08:40,970 Vì vậy, bạn sẽ có để có thể mã lên các chức năng này bằng tay. 1714 01:08:40,970 --> 01:08:45,340 >> Vì vậy, tôi nghĩ chúng ta có thể đi qua một vài trong số họ và xem cách mọi người làm, 1715 01:08:45,340 --> 01:08:47,340 loại đi bộ qua chúng từ từ với mọi người. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Vì vậy, nói chung, và strlen atoi đã rất phổ biến. 1718 01:08:52,420 --> 01:08:55,670 Năm ngoái, tôi nghĩ rằng chúng tôi đã có GetPositiveInt và RandomInt. 1719 01:08:55,670 --> 01:08:58,591 Nhưng pow, vì vậy quyền lực, cũng một tích cực quá. 1720 01:08:58,591 --> 01:09:00,965 Hãy chỉ cần đi qua có thể một hoặc hai trong số này lại với nhau. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 Những gì người ta muốn xem? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> HỌC SINH: atoi. 1725 01:09:05,767 --> 01:09:06,350 HỌC SINH: Yeah. 1726 01:09:06,350 --> 01:09:06,859 Davin: atoi? 1727 01:09:06,859 --> 01:09:07,800 HỌC SINH: [không nghe được]. 1728 01:09:07,800 --> 01:09:09,682 Davin: OK, tôi sẽ để làm điều đó trên diễn đàn. 1729 01:09:09,682 --> 01:09:11,765 Bạn có một sở thích nếu tôi làm điều đó ở đây hay không? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Có, Gabe nói rằng có. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: Và đây là suy nghĩ chung về những câu hỏi mã hóa. 1734 01:09:19,580 --> 01:09:21,705 Hãy thử viết một cái gì đó. 1735 01:09:21,705 --> 01:09:22,580 Đừng để trống. 1736 01:09:22,580 --> 01:09:23,080 >> Davin: Có. 1737 01:09:23,080 --> 01:09:25,520 ROB: Nếu bạn có thể nhận được trả lại đúng loại, 1738 01:09:25,520 --> 01:09:27,090 hoặc có lẽ chúng ta có thể cung cấp cho nó để bạn, nhưng nếu bạn có thể, như, 1739 01:09:27,090 --> 01:09:30,256 viết chữ ký chức năng nói chung, Nếu bạn có thể nhận được các trường hợp cơ sở chính xác, 1740 01:09:30,256 --> 01:09:32,244 hoặc trường hợp góc, hoặc nhớ kiểm tra cho null, 1741 01:09:32,244 --> 01:09:34,160 miễn là bạn có một số điều trên, thì có lẽ chúng ta 1742 01:09:34,160 --> 01:09:35,880 có thể cung cấp cho bạn một vài chỉ cho vấn đề. 1743 01:09:35,880 --> 01:09:36,810 Không chỉ để trống. 1744 01:09:36,810 --> 01:09:38,560 >> Davin: Vâng, và nếu bạn chỉ hoàn toàn 1745 01:09:38,560 --> 01:09:40,580 bối rối như thế nào để thực sự biến thành mã. 1746 01:09:40,580 --> 01:09:43,140 Nếu bạn viết mã giả, đó là khá tốt quá. 1747 01:09:43,140 --> 01:09:46,390 Vì vậy, nó là như thế, nó là một câu hỏi sáu điểm, và bạn viết mã giả chính xác, 1748 01:09:46,390 --> 01:09:47,858 bạn sẽ nhận được ít nhất hai điểm. 1749 01:09:47,858 --> 01:09:49,149 Vì vậy, không chỉ để lại cho họ trống. 1750 01:09:49,149 --> 01:09:50,279 Hãy thử đặt một cái gì đó. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: Nó cần phải được đúng giả, mặc dù. 1752 01:09:51,770 --> 01:09:52,270 >> Davin: Có. 1753 01:09:52,270 --> 01:09:55,381 ROB: Vì vậy, chúng ta thường ít khoan dung với lỗi trong mã giả. 1754 01:09:55,381 --> 01:09:57,130 Davin: OK, vậy các bạn muốn xem atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 OK, vì vậy chỉ cần really-- vì vậy những gì bạn muốn làm 1757 01:10:02,820 --> 01:10:04,969 là bạn sẽ được đưa ra một số loại số. 1758 01:10:04,969 --> 01:10:07,010 Nhưng con số này không phải là sẽ là một int, phải không? 1759 01:10:07,010 --> 01:10:08,574 Nó là những gì sẽ được? 1760 01:10:08,574 --> 01:10:09,480 >> HỌC SINH: [không nghe được]. 1761 01:10:09,480 --> 01:10:11,146 >> Davin: Nó sẽ là một chuỗi, phải không? 1762 01:10:11,146 --> 01:10:13,160 Vì vậy, nếu bạn đã được đưa ra một string-- hãy say-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: Tôi có nên kéo lên một biên tập viên? 1764 01:10:15,228 --> 01:10:16,200 Tôi có thể kéo up-- 1765 01:10:16,200 --> 01:10:16,800 >> Davin: Oh, bạn muốn làm điều đó on-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: Bạn có thích hội đồng quản trị? 1767 01:10:17,420 --> 01:10:18,800 >> Davin: Những gì bạn muốn làm gì? 1768 01:10:18,800 --> 01:10:19,900 Tôi có nghĩa là, bạn muốn làm điều đó bằng tay? 1769 01:10:19,900 --> 01:10:21,460 Hoặc bạn có muốn làm điều đó bằng máy tính? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: Làm điều đó bằng tay. 1771 01:10:22,180 --> 01:10:22,805 >> Davin: [Cười] 1772 01:10:22,805 --> 01:10:23,950 ROB: Làm điều đó bằng tay. 1773 01:10:23,950 --> 01:10:25,469 >> Davin: OK, vì vậy nó sẽ là atoi. 1774 01:10:25,469 --> 01:10:27,760 Vì vậy, những gì it-- Ý tôi là, chúng ta sẽ có thể đưa cái này cho bạn. 1775 01:10:27,760 --> 01:10:29,106 Nhưng những gì nó sẽ trở lại? 1776 01:10:29,106 --> 01:10:29,452 >> HỌC SINH: Int. 1777 01:10:29,452 --> 01:10:31,076 >> Davin: Nó sẽ trở lại int, phải không? 1778 01:10:31,076 --> 01:10:33,772 So-- tôi không muốn làm điều đó ở đó. 1779 01:10:33,772 --> 01:10:34,510 Tôi sẽ làm điều đó ở đây. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: Bạn có thể kéo nó xuống và sau đó đẩy lên trên nó. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> Davin: yeah. 1783 01:10:40,385 --> 01:10:43,880 [Cười] Trò chơi thay đổi. 1784 01:10:43,880 --> 01:10:50,950 OK, vì vậy nó sẽ là int atoi, và những gì nó sẽ mất? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 Một ngôi sao char, vì vậy chỉ cần một chuỗi, sao s, như thế. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Nice sao, tốt đẹp. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 Davin: Điều này có thể không có mặt ở đó, OK. 1790 01:11:04,040 --> 01:11:04,540 ROB: Yeah. 1791 01:11:04,540 --> 01:11:06,670 Davin: OK, vì vậy đầu tiên điều bạn muốn do-- tôi 1792 01:11:06,670 --> 01:11:08,490 không biết nếu bất cứ ai nhìn tại solutions-- thực hành 1793 01:11:08,490 --> 01:11:10,150 nhưng những gì bạn đang đi muốn làm là bạn 1794 01:11:10,150 --> 01:11:11,570 sẽ muốn có một vòng lặp, bởi vì bạn 1795 01:11:11,570 --> 01:11:14,100 sẽ muốn thực sự bước qua chuỗi này. 1796 01:11:14,100 --> 01:11:18,880 Vì vậy, helpful-- vì vậy hãy nói chúng ta sẽ một cho vòng lặp, 1797 01:11:18,880 --> 01:11:22,270 và chúng ta sẽ bước qua mọi phần tử của chuỗi. 1798 01:11:22,270 --> 01:11:23,470 Làm thế nào lâu như vậy? 1799 01:11:23,470 --> 01:11:26,464 Đã bao nhiêu lần chúng ta sẽ để lặp lại trong đó cho vòng lặp? 1800 01:11:26,464 --> 01:11:27,130 HỌC SINH: Sterln? 1801 01:11:27,130 --> 01:11:27,963 Davin: Sterln, yeah. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Vì vậy, hãy nói int chiều dài bằng sterln s. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 Và chỉ tò mò, tại sao nó luôn luôn là loại của tốt hơn để làm bên ngoài này của các vòng? 1806 01:11:48,740 --> 01:11:52,277 Giống như, tại sao nó tốt hơn để gọi chức năng này bên ngoài của một vòng lặp? 1807 01:11:52,277 --> 01:11:53,360 Chỉ cần một sự tỉnh táo nhanh chóng kiểm tra? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 Yeah? 1810 01:11:56,311 --> 01:11:58,268 SINH VIÊN: Vì vậy, bạn không phải tiếp tục kiểm tra nó. 1811 01:11:58,268 --> 01:11:59,400 Bạn chỉ có thể [không nghe được]. 1812 01:11:59,400 --> 01:12:01,560 >> Davin: Chính xác, vì vậy yeah, chính xác những gì cô nói. 1813 01:12:01,560 --> 01:12:03,101 Vì vậy, chúng tôi không cần phải liên tục kiểm tra nó. 1814 01:12:03,101 --> 01:12:05,690 Vì vậy, ví dụ, nếu tôi gọi chức năng này bên trong một vòng lặp, 1815 01:12:05,690 --> 01:12:08,050 sau đó tôi sẽ tiếp tục gọi chức năng này nhiều lần. 1816 01:12:08,050 --> 01:12:10,080 Và đó là sẽ giảm hiệu quả của các chương trình của bạn. 1817 01:12:10,080 --> 01:12:12,370 Vì vậy, nó luôn luôn hữu ích tuyên bố nó bên ngoài. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: Đó là nói trên bất kỳ của những vấn đề này, 1819 01:12:14,370 --> 01:12:17,940 khá nhiều miễn là bạn có được một giải pháp làm việc, bạn nhận được tín dụng đầy đủ. 1820 01:12:17,940 --> 01:12:20,820 Vì vậy, đừng lo lắng nếu thiết kế của bạn là hoàn toàn khủng khiếp. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 Nó có thể làm cho chúng ta khó chịu đọc mã của bạn. 1823 01:12:25,230 --> 01:12:28,160 Nhưng miễn là nó hoạt động, bạn sẽ nhận được điểm. 1824 01:12:28,160 --> 01:12:29,302 >> Davin: Có. 1825 01:12:29,302 --> 01:12:31,260 OK, vậy thì tôi sẽ khai báo một số biến. 1826 01:12:31,260 --> 01:12:33,900 Nó chỉ sẽ gọi int sum. 1827 01:12:33,900 --> 01:12:37,031 Và tôi sẽ thiết lập này bằng không, như thế. 1828 01:12:37,031 --> 01:12:38,780 Và đó là chỉ cần đi là một giữ chỗ. 1829 01:12:38,780 --> 01:12:40,960 Vì vậy, đó sẽ là những gì tôi sẽ trở lại. 1830 01:12:40,960 --> 01:12:43,730 Vì vậy, tôi sẽ dần dần trả lại số tiền ra khỏi chương trình này. 1831 01:12:43,730 --> 01:12:44,980 Vì vậy, tôi có hai biến. 1832 01:12:44,980 --> 01:12:45,563 Tôi có chiều dài. 1833 01:12:45,563 --> 01:12:46,500 Tôi có tiền. 1834 01:12:46,500 --> 01:12:48,290 Và bây giờ hãy nhảy vào chuỗi của chúng tôi. 1835 01:12:48,290 --> 01:12:49,510 >> Vì vậy, cho phép chúng tôi có cho vòng lặp. 1836 01:12:49,510 --> 01:13:06,520 Vì vậy, bốn int tôi bằng 0 w, trong khi Tôi là ít hơn so với chiều dài cộng với cộng với tôi. 1837 01:13:06,520 --> 01:13:07,150 Và now-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Nice. 1840 01:13:11,420 --> 01:13:14,030 Davin: OK, và bây giờ ở đây đến thịt của mã của chúng tôi. 1841 01:13:14,030 --> 01:13:17,380 Vì vậy, bạn thực sự có thể làm về cơ bản này trong một dòng. 1842 01:13:17,380 --> 01:13:20,702 Vì vậy, không ai có một ý tưởng của những gì chúng ta sẽ làm gì tiếp theo? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 OK, vì vậy đó là OK. 1845 01:13:25,380 --> 01:13:35,860 Vì vậy, chúng tôi đang làm để nói tổng equals-- cho tôi chuồn tổng over-- này 1846 01:13:35,860 --> 01:13:50,010 bằng 10 lần số tiền plus-- chúng tôi sẽ mất của tôi trừ một 1847 01:13:50,010 --> 01:13:54,787 quote 0 một trích dẫn thực hiện, như thế. 1848 01:13:54,787 --> 01:13:55,620 ROB: Rất trực quan. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> Davin: dăm nó. 1851 01:13:57,880 --> 01:14:01,438 OK, vì vậy someone-- tôi đã nhận nó, tôi đã nhận nó. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 OK, vì vậy đây là rõ ràng đi lên. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 Điều này có nghĩa gì? 1856 01:14:09,450 --> 01:14:12,120 Vì vậy, không ai biết điều này có nghĩa? 1857 01:14:12,120 --> 01:14:13,826 Tất cả mọi người có thể thấy điều này? 1858 01:14:13,826 --> 01:14:16,088 Không, không ai có thể thấy điều này, OK. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Tôi sẽ đối với: 1861 01:14:18,340 --> 01:14:20,506 >> ROB: Tôi sẽ viết sữa đúng ở đây. 1862 01:14:20,506 --> 01:14:23,140 Davin: OK, Rob sẽ làm điều đó trên máy tính, đó là niềm vui. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: Ôi Chúa ơi. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 Hoặc tôi sẽ không. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 Davin: Stand by. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 HỌC SINH: Tôi có một câu hỏi. 1871 01:14:44,260 --> 01:14:45,348 Davin: Ừ, chắc chắn. 1872 01:14:45,348 --> 01:14:46,223 HỌC SINH: [không nghe được]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 Davin: OK, vì vậy nó thực sự, như thế, chỉ nói chung, 1875 01:14:54,570 --> 01:14:56,710 nếu bạn đã đặt, như thế, trong int khai này 1876 01:14:56,710 --> 01:14:59,770 Tôi bằng chiều dài 0 dấu phẩy bằng sterln, that-- 1877 01:14:59,770 --> 01:15:01,200 >> HỌC SINH: [không nghe được]. 1878 01:15:01,200 --> 01:15:03,585 >> Davin: Đó là tốt, bởi vì that-- 1879 01:15:03,585 --> 01:15:05,543 HỌC SINH: Tại sao bạn thậm chí cần phải sử dụng chiều dài? 1880 01:15:05,543 --> 01:15:08,620 Tại sao có thể chúng ta không chỉ [không nghe được] sterln s, giống như toàn bộ thời gian [không nghe được]? 1881 01:15:08,620 --> 01:15:09,460 >> Davin: Bạn có nghĩa là ngay tại đây? 1882 01:15:09,460 --> 01:15:10,001 >> HỌC SINH: Vâng. 1883 01:15:10,001 --> 01:15:12,630 Davin: Bởi vì mỗi lần này cho vòng lặp chạy, 1884 01:15:12,630 --> 01:15:14,295 nó sẽ đánh giá tình trạng này. 1885 01:15:14,295 --> 01:15:14,920 HỌC SINH: Đúng vậy. 1886 01:15:14,920 --> 01:15:16,836 Davin: Và nếu bạn có sterln có, thì đó là 1887 01:15:16,836 --> 01:15:19,510 sẽ phải thực sự gọi mà chức năng mỗi lần duy nhất. 1888 01:15:19,510 --> 01:15:21,090 Vì vậy, thay vì chỉ so sánh nó với một int, 1889 01:15:21,090 --> 01:15:23,548 bạn sẽ được gọi một chức năng và sau đó so sánh nó 1890 01:15:23,548 --> 01:15:24,510 với giá trị trở lại. 1891 01:15:24,510 --> 01:15:25,860 Yeah, vì vậy nó chỉ là, yeah. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Nice, OK, vì vậy bây giờ tất cả mọi người có thể nhìn thấy nó. 1894 01:15:30,770 --> 01:15:33,400 Có gì does-- này là như thế, đây là nó. 1895 01:15:33,400 --> 01:15:34,580 Đây là mứt, ngay tại đây. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Điều đó có nghĩa gì? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 Tôi đang làm gì? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Yeah, một ý tưởng? 1902 01:15:42,880 --> 01:15:43,482 Yeah? 1903 01:15:43,482 --> 01:15:45,692 >> HỌC SINH: Vâng, vì vậy khi bạn đang bước vào một mảng, 1904 01:15:45,692 --> 01:15:47,525 bạn sẽ được đi từ trái sang phải, 1905 01:15:47,525 --> 01:15:51,786 do đó, bạn sẽ được đi trong số thập phân từ xuống [không nghe được]. 1906 01:15:51,786 --> 01:15:52,410 Davin: Chính xác. 1907 01:15:52,410 --> 01:15:55,063 SINH VIÊN: Vì vậy, mỗi một bạn phải nhân 1908 01:15:55,063 --> 01:15:59,490 những gì bạn nhìn thấy là giá trị của int bởi thời gian bạn có thể di chuyển mà hơn một. 1909 01:15:59,490 --> 01:16:01,590 >> Davin: Hoàn hảo, hoàn hảo, ví dụ như vậy, chúng ta hãy 1910 01:16:01,590 --> 01:16:05,376 nói rằng tôi đã you-- tôi sẽ viết ở đây. 1911 01:16:05,376 --> 01:16:06,480 Không, tôi không. 1912 01:16:06,480 --> 01:16:08,640 Tôi sẽ viết ở đây. 1913 01:16:08,640 --> 01:16:12,080 Hãy nói rằng tôi đã cho bạn 76, phải không? 1914 01:16:12,080 --> 01:16:13,380 Hãy nói rằng tôi cung cấp cho bạn 76. 1915 01:16:13,380 --> 01:16:15,360 Đó là một chuỗi để bắt đầu với, OK? 1916 01:16:15,360 --> 01:16:16,840 >> Vì vậy, chiều dài là gì? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, phải không? 1919 01:16:19,060 --> 01:16:20,290 Sum là 0. 1920 01:16:20,290 --> 01:16:21,600 Sau đó chúng tôi nhảy trong của chúng tôi cho vòng lặp. 1921 01:16:21,600 --> 01:16:24,187 OK, phiên đầu tiên của này, những gì nó sẽ được? 1922 01:16:24,187 --> 01:16:25,270 Nó sẽ được tổng hợp là 0. 1923 01:16:25,270 --> 01:16:27,180 Vì vậy, tổng thời gian 10 0. 1924 01:16:27,180 --> 01:16:28,500 Đó là vô nghĩa. 1925 01:16:28,500 --> 01:16:29,880 Sau đó, những gì hiện này làm gì? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 HỌC SINH: [không nghe được]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> Davin: Nó sẽ lần lượt là nhân vật vào một số nguyên, phải không? 1930 01:16:37,430 --> 01:16:42,160 Đó là loại giống như của bạn vấn đề set-- light-- này 1931 01:16:42,160 --> 01:16:44,170 nó là loại giống như với vấn đề thiết lập để VISIONEER. 1932 01:16:44,170 --> 01:16:45,980 Bạn đang làm việc với các giá trị ASCII. 1933 01:16:45,980 --> 01:16:48,520 Vì vậy, nếu tôi cung cấp cho bạn, như thế, một bảy, nhưng đó là một nhân vật, 1934 01:16:48,520 --> 01:16:50,965 và bạn muốn biết, OK, những gì chữ số là? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Yeah, bạn có thể, yeah. 1937 01:16:54,910 --> 01:16:55,900 Vì vậy, những gì là chữ số đó? 1938 01:16:55,900 --> 01:16:59,550 Bạn có thể trừ đi 0 từ nó, nhưng bạn phải trừ đi 0, nhân vật. 1939 01:16:59,550 --> 01:17:01,425 >> Và nơi một số người bị vấp, họ đang 1940 01:17:01,425 --> 01:17:04,260 như, OK, tốt, tôi phải biết các giá trị ASCII cho đề thi này? 1941 01:17:04,260 --> 01:17:06,218 Không, chắc chắn bạn không cần phải biết ASCII 1942 01:17:06,218 --> 01:17:09,520 giá trị, giống như, chữ thường một, chữ hoa A, bằng không. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: Không có lý do gì để bao giờ hết đặt này trên bảng cheat. 1944 01:17:12,060 --> 01:17:14,226 >> Davin: Chắc chắn không lãng phí không gian của bạn với điều này. 1945 01:17:14,226 --> 01:17:18,090 Bạn có thể thay vì chỉ literally-- nói 48, giống như phải lên 1946 01:17:18,090 --> 01:17:24,630 có, đó là tương đương với nói một, một dấu nháy đơn, 1947 01:17:24,630 --> 01:17:27,680 như vậy, chính xác như nhau. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: Bạn gần như có thể nghĩ của nó như if-- Thiên Chúa, tôi cần tôi, 1949 01:17:34,106 --> 01:17:37,490 oops-- bạn gần như có thể nghĩ về nó như nếu chúng ta có một cái gì đó giống như băm 1950 01:17:37,490 --> 01:17:39,755 xác định 0 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 Điều đó sẽ không làm việc. 1953 01:17:42,030 --> 01:17:45,502 Nhưng nghĩ về nó như báo giá duy nhất 0 báo duy nhất, và cho tất cả các nhân vật. 1954 01:17:45,502 --> 01:17:47,960 Hãy suy nghĩ về nó như là một hằng số đại diện cho giá trị ASCII. 1955 01:17:47,960 --> 01:17:49,080 >> Davin: Có. 1956 01:17:49,080 --> 01:17:52,820 OK, vì vậy lần đầu tiên thông qua, do đó, với 76-- nên thời gian đầu tiên thông qua, 1957 01:17:52,820 --> 01:17:57,260 điều này chỉ là nhân vật 7 trừ đi các nhân vật 0, 1958 01:17:57,260 --> 01:18:00,420 và những bảy integers-- tốt, những 1959 01:18:00,420 --> 01:18:04,030 bảy không gian xa nhau khác trên bảng xếp hạng ASCII hoặc bất cứ điều gì. 1960 01:18:04,030 --> 01:18:06,770 Vì vậy, đó là sẽ trả lại một int 7. 1961 01:18:06,770 --> 01:18:08,720 Vì vậy, bây giờ, số tiền tương đương với 7. 1962 01:18:08,720 --> 01:18:10,830 >> OK, tốt, chúng ta hãy nhảy vào việc này cho vòng lặp một lần nữa. 1963 01:18:10,830 --> 01:18:13,010 OK, bây giờ là tổng thời gian 10. 1964 01:18:13,010 --> 01:18:15,800 Vì vậy, bạn có hiệu quả 7 di chuyển sang bên trái. 1965 01:18:15,800 --> 01:18:17,542 Điều đó có ý nghĩa? 1966 01:18:17,542 --> 01:18:19,250 Bạn đang có hiệu quả di chuyển nó sang bên trái. 1967 01:18:19,250 --> 01:18:21,790 >> Và sau đó bạn add-- này là có được 6 trừ đi 0. 1968 01:18:21,790 --> 01:18:22,650 Đó là 6. 1969 01:18:22,650 --> 01:18:24,752 Vì vậy, nó sẽ là 70 cộng với 6. 1970 01:18:24,752 --> 01:18:25,996 76, đó là số của bạn. 1971 01:18:25,996 --> 01:18:28,370 Vì vậy, bất kể những gì số Tôi đưa cho bạn, nó chỉ chậm 1972 01:18:28,370 --> 01:18:31,610 sẽ thay đổi các giá trị lớn hơn bên trái, 1 yếu tố của 10 1973 01:18:31,610 --> 01:18:35,525 mỗi lần trong vòng lặp for, và sau đó thêm vào khi cần thiết. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> Ở phía sau? 1976 01:18:37,865 --> 01:18:40,240 SINH VIÊN: Chúng tôi không phải làm bất kỳ kiểm tra trong chương trình? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Vì vậy, như xa như kiểm tra đi cho các chương trình, 1979 01:18:44,302 --> 01:18:46,510 chúng tôi sẽ cho bạn biết khá nhiều những gì bạn cần phải kiểm tra. 1980 01:18:46,510 --> 01:18:48,670 Nếu chúng ta không nói cho bạn bất cứ điều gì, sau đó nói chung 1981 01:18:48,670 --> 01:18:50,320 giả sử bạn phải kiểm tra hầu hết mọi thứ. 1982 01:18:50,320 --> 01:18:54,772 Cũng giống như bạn có thể, chỉ để được an toàn, bạn có lẽ nên kiểm tra hey, là s null? 1983 01:18:54,772 --> 01:18:56,230 Sau đó, tôi không có ý tưởng gì để quay trở lại. 1984 01:18:56,230 --> 01:18:58,814 Nhưng chúng tôi sẽ cho bạn biết các loại điều này. 1985 01:18:58,814 --> 01:18:59,480 0, tôi không biết. 1986 01:18:59,480 --> 01:19:02,786 >> Davin: Và tại sao bạn muốn để kiểm tra lại nếu s bằng null? 1987 01:19:02,786 --> 01:19:03,660 HỌC SINH: [không nghe được]. 1988 01:19:03,660 --> 01:19:04,880 Davin: Bởi vì char sao. 1989 01:19:04,880 --> 01:19:05,510 Đó là một con trỏ. 1990 01:19:05,510 --> 01:19:09,240 Vì vậy, một hoàn toàn chấp nhận kê khai, tôi có thể nói, OK, 1991 01:19:09,240 --> 01:19:11,917 s bằng null, bởi vì nó có thể là một con trỏ null. 1992 01:19:11,917 --> 01:19:14,250 Vì vậy, bất cứ khi nào bạn có con trỏ trong con đường của bạn trong như thế này, 1993 01:19:14,250 --> 01:19:15,420 có lẽ bạn nên kiểm tra. 1994 01:19:15,420 --> 01:19:18,461 Bởi vì nếu bạn không kiểm tra, và sau đó sau đó bạn đi vào cho vòng lặp, 1995 01:19:18,461 --> 01:19:20,100 và bạn đang doing-- chuồn xuống. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Chuồn xuống. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: Xin lỗi, đó là nó. 1999 01:19:23,860 --> 01:19:25,860 >> Davin: Và như vậy, như thế nào, nếu nó là vô giá trị, và sau đó bạn 2000 01:19:25,860 --> 01:19:28,267 làm được điều này, những gì lỗi bạn sẽ nhận được? 2001 01:19:28,267 --> 01:19:29,850 HỌC SINH: Bạn sẽ nhận được một lỗi thiết lập. 2002 01:19:29,850 --> 01:19:31,250 Davin: Bạn sẽ thiết lập lỗi, phải, bởi vì bạn 2003 01:19:31,250 --> 01:19:32,616 cố gắng để chỉ mục vào null. 2004 01:19:32,616 --> 01:19:35,240 Vì vậy, bạn sẽ cố gắng để chỉ số vào bộ nhớ mà bạn không sở hữu. 2005 01:19:35,240 --> 01:19:39,550 Vì vậy, đây, nếu điều này là vô giá trị, và bạn làm điều này, bạn sẽ thấy chu kỳ. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Tôi cũng nghĩ về kỳ thi, trong đó chúng tôi hỏi câu hỏi này, chúng tôi cho bạn 2007 01:19:43,656 --> 01:19:45,655 mà bạn chỉ có thể giả định đó là một số dương. 2008 01:19:45,655 --> 01:19:48,270 Bởi vì atoi cũng dự kiến để xử lý các số âm, 2009 01:19:48,270 --> 01:19:49,686 vì vậy bạn sẽ phải trường hợp đặc biệt. 2010 01:19:49,686 --> 01:19:53,080 Hey, là nhân vật đầu tiên một dấu gạch ngang, trong trường hợp đó, OK, 2011 01:19:53,080 --> 01:19:54,839 bây giờ nó là một số nguyên âm. 2012 01:19:54,839 --> 01:19:56,380 Chúng tôi sẽ cho bạn biết những thứ như thế. 2013 01:19:56,380 --> 01:19:58,005 Chúng tôi sẽ cho bạn biết những gì bạn cần để xử lý. 2014 01:19:58,005 --> 01:19:59,310 Davin: Có. 2015 01:19:59,310 --> 01:20:02,530 Vì vậy, tôi chắc chắn rằng một số người có thể have-- nếu bạn bắt đầu nhìn vào bài thi trước, 2016 01:20:02,530 --> 01:20:03,900 bạn đã nhìn thấy sterln. 2017 01:20:03,900 --> 01:20:05,120 Đó là một trong những phổ biến. 2018 01:20:05,120 --> 01:20:09,790 Và tôi nghĩ rằng trong sterln, bạn phải thực hiện kiểm tra này cho null, sự trở lại 2019 01:20:09,790 --> 01:20:10,950 0 hoặc một cái gì đó như thế. 2020 01:20:10,950 --> 01:20:11,940 Giống như, bạn đã có để kiểm tra null. 2021 01:20:11,940 --> 01:20:14,230 Và nếu bạn không, mà đã chỉ ra trên các bài kiểm tra. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 Vì vậy, dù sao, làm tất cả mọi người cảm thấy OK với atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 Có ai muốn đi qua bộ phận một lần nữa? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: Oh yeah, tôi nghĩ chúng tôi cũng cho bạn biết bạn 2028 01:20:25,565 --> 01:20:28,565 có thể giả định rằng tất cả mọi thứ mà is-- họ đang thực sự bước vào một số, 2029 01:20:28,565 --> 01:20:32,821 bạn không phải lo lắng về, như, thư đang trong chuỗi, do đó. 2030 01:20:32,821 --> 01:20:33,320 Davin: Yeah. 2031 01:20:33,320 --> 01:20:33,922 Có? 2032 01:20:33,922 --> 01:20:35,713 HỌC SINH: Bạn có thể đi trên một lần nữa khi 2033 01:20:35,713 --> 01:20:37,860 bạn sử dụng báo giá gấp đôi và giá duy nhất? 2034 01:20:37,860 --> 01:20:41,290 >> Davin: Chắc chắn rồi, vì vậy dấu ngoặc kép, rất đơn giản, là dấu ngoặc kép là chuỗi. 2035 01:20:41,290 --> 01:20:43,370 Vì vậy, nếu bạn tăng gấp đôi quote bất cứ điều gì, đó là một chuỗi. 2036 01:20:43,370 --> 01:20:48,270 Vì vậy, giống như, nếu tôi có điều này 0 trên đây, và tôi đã làm điều này, đó là một chuỗi. 2037 01:20:48,270 --> 01:20:50,060 Đó không còn là một nhân vật. 2038 01:20:50,060 --> 01:20:54,816 Vì vậy, tôi không thể tìm thấy giá trị này trên ASCII của tôi biểu đồ, bởi vì đó là một chuỗi, yeah. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> OK, bất kỳ câu hỏi nào khác không? 2041 01:20:59,480 --> 01:21:00,405 Có? 2042 01:21:00,405 --> 01:21:02,345 >> SINH VIÊN: Vì vậy, bạn đã đã trả lời câu này, 2043 01:21:02,345 --> 01:21:05,255 nhưng cũng giống như, khi chúng ta thực sự văn bản này trên các bài kiểm tra, 2044 01:21:05,255 --> 01:21:08,165 Bạn muốn chúng tôi viết với chém zero [không nghe được]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 Davin: số 2047 01:21:11,540 --> 01:21:13,800 Câu hỏi đặt ra là nên bạn đặt một dấu gạch chéo thông qua các số không 2048 01:21:13,800 --> 01:21:14,890 để chỉ ra nếu họ số không? 2049 01:21:14,890 --> 01:21:15,890 Không, chúng tôi sẽ tìm ra nó. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Vâng, cảm ơn, họ đang tốt. 2052 01:21:19,530 --> 01:21:20,860 OK, bất cứ điều gì khác? 2053 01:21:20,860 --> 01:21:25,060 Có ai muốn đối với: vì vậy tôi nghĩ chúng tôi đã chạy một chút thời gian. 2054 01:21:25,060 --> 01:21:27,305 Bạn có muốn nhìn thấy nhau, hoặc? 2055 01:21:27,305 --> 01:21:28,096 HỌC SINH: RandomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> Davin: RandomInt, OK, chính xác. 2058 01:21:30,750 --> 01:21:32,975 Vì vậy, chúng ta hãy làm RandomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 Tôi sẽ làm điều đó ở đây. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Vì vậy, RandomInt thực sự là đơn giản hơn nhiều. 2063 01:21:39,210 --> 01:21:43,578 Tôi nghĩ rằng atoi có lẽ là một trong những khó khăn nhất mà chúng tôi đã hỏi trong những năm trước đó. 2064 01:21:43,578 --> 01:21:44,453 HỌC SINH: [không nghe được]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> Davin: Cái gì? 2067 01:21:47,161 --> 01:21:49,493 ROB: Tôi nhìn thấy nếu nó là loại của thể xem được từ trên đây. 2068 01:21:49,493 --> 01:21:50,040 Davin: Liệu nó? 2069 01:21:50,040 --> 01:21:52,500 ROB: Tôi không nghĩ rằng đó là going-- tôi nghĩ nó sẽ chạy ra bên phải. 2070 01:21:52,500 --> 01:21:53,791 Davin: OK, vì vậy tôi sẽ làm điều này. 2071 01:21:53,791 --> 01:21:56,250 Và sau đó bạn chỉ cần đặt nó trên màn hình. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: Tất cả đúng. 2073 01:21:57,150 --> 01:21:58,190 >> Davin: Bạn muốn trở thành người ghi chép của tôi? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Yeah. 2075 01:21:58,600 --> 01:21:59,100 >> Davin: Nice. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 OK, tôi có thể xóa này? 2078 01:22:02,727 --> 01:22:04,188 >> HỌC SINH: Yeah. 2079 01:22:04,188 --> 01:22:05,162 >> Davin: Đó là khó khăn như vậy. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (Hát) Bạn đang làm những gì bạn đang làm. 2082 01:22:12,062 --> 01:22:14,454 Và làm những gì bạn làm không. 2083 01:22:14,454 --> 01:22:14,954 Được rồi. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> OK, nếu tôi nhớ chính xác, trên các bài kiểm tra các RandomInt được như thế, 2086 01:22:22,930 --> 01:22:26,190 OK, tôi sẽ cung cấp cho bạn hai số, giống như một một và b. 2087 01:22:26,190 --> 01:22:30,380 Và tôi muốn các bạn cho tôi một RandomInt giữa những con số. 2088 01:22:30,380 --> 01:22:33,440 Vì vậy, RandomInt sẽ để mất hai numbers-- 2089 01:22:33,440 --> 01:22:41,690 để RandomInt-- và nó sẽ trả lại một int. 2090 01:22:41,690 --> 01:22:42,930 >> Vì vậy, giá trị trả về là gì? 2091 01:22:42,930 --> 01:22:44,151 Tôi chỉ nói với bạn. 2092 01:22:44,151 --> 01:22:44,650 Int, phải không? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Như thế này, và sau đó nó sẽ mất hai ints. 2095 01:22:49,260 --> 01:22:56,301 Vì vậy, nó sẽ mất int a và int b, như thế. 2096 01:22:56,301 --> 01:22:58,217 Vì vậy, những gì là RandomInt đi làm là nó sẽ 2097 01:22:58,217 --> 01:23:02,440 để trở lại một số giá trị ngẫu nhiên ở giữa hai giá trị. 2098 01:23:02,440 --> 01:23:05,140 Vì vậy, nó sẽ là lớn hơn hơn, ít hơn b. 2099 01:23:05,140 --> 01:23:09,020 Vì vậy, tôi nghĩ rằng bạn có thể có thể giả định rằng một là nhỏ hơn của hai giá trị. 2100 01:23:09,020 --> 01:23:12,210 Vì vậy, nếu chúng ta đang đối phó với ngẫu nhiên, những gì chức năng 2101 01:23:12,210 --> 01:23:14,825 Chúng ta đã thấy rằng cho chúng ta những điều ngẫu nhiên? 2102 01:23:14,825 --> 01:23:15,450 HỌC SINH: Drand. 2103 01:23:15,450 --> 01:23:16,506 Davin: Drand, chính xác. 2104 01:23:16,506 --> 01:23:18,630 Vì vậy, bạn sẽ có thể muốn sử dụng drand của bạn. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Vì vậy, bạn có thể nói int ngẫu nhiên, và chúng tôi sẽ chỉ nói nó có bằng 0 ngay bây giờ. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 Và họ chúng ta sẽ nói, OK, bình đẳng ngẫu nhiên drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 Và điều này có trở lại? 2111 01:23:40,830 --> 01:23:43,742 Những gì hiện chức năng này cung cấp cho bạn? 2112 01:23:43,742 --> 01:23:45,610 >> HỌC SINH: Giữa 0 và 1. 2113 01:23:45,610 --> 01:23:47,870 >> Davin: Yeah, giữa 0 và 1. 2114 01:23:47,870 --> 01:23:48,890 Vì vậy, nó sẽ be-- 2115 01:23:48,890 --> 01:23:51,070 >> ROB: Và điều này is-- tôi nghĩ chúng tôi sẽ nói với bạn điều này. 2116 01:23:51,070 --> 01:23:52,670 Giống như, bạn có thể sử dụng drand 48. 2117 01:23:52,670 --> 01:23:54,350 Bạn có thể xác minh điều này trên các kỳ thi vừa qua. 2118 01:23:54,350 --> 01:23:56,720 Nhưng chúng ta có thể nói bạn có thể sử dụng drand 48, mà 2119 01:23:56,720 --> 01:23:58,790 trả về một phao giữa 0 và 1. 2120 01:23:58,790 --> 01:24:00,830 >> Davin: Vâng, vâng, tôi khá chắc chắn về các kỳ thi 2121 01:24:00,830 --> 01:24:03,860 nó nói có lẽ bạn muốn sử dụng drand, yeah. 2122 01:24:03,860 --> 01:24:07,041 Vì vậy, nó sẽ trở lại một số giá trị giữa 0 và 1. 2123 01:24:07,041 --> 01:24:08,790 Và sau đó bạn là gì sẽ muốn làm gì? 2124 01:24:08,790 --> 01:24:16,360 Vâng, bạn muốn nhân by-- chờ đợi, tôi nghĩ rằng nó là như thế này, xin lỗi. 2125 01:24:16,360 --> 01:24:18,018 Tôi sẽ chỉ làm điều này. 2126 01:24:18,018 --> 01:24:19,410 Tôi không biết. 2127 01:24:19,410 --> 01:24:22,240 >> Vì vậy, trừ b a. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Vậy tại sao trừ b một? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Vì vậy, hãy nói drand cung cấp cho bạn trở lại một int-- OK, tôi sẽ làm phần còn lại, 2132 01:24:30,490 --> 01:24:33,380 như vậy cộng với một. 2133 01:24:33,380 --> 01:24:36,130 Vì vậy, những gì does-- y là b trừ đi một. 2134 01:24:36,130 --> 01:24:40,670 Vì vậy, hãy nói drand cung cấp cho bạn trở lại giá trị tối đa của nó có thể có thể 2135 01:24:40,670 --> 01:24:41,410 cung cấp cho bạn. 2136 01:24:41,410 --> 01:24:42,409 Có gì đó sẽ là? 2137 01:24:42,409 --> 01:24:43,010 HỌC SINH: 1. 2138 01:24:43,010 --> 01:24:44,430 >> Davin: 1, phải không? 2139 01:24:44,430 --> 01:24:47,880 Vì vậy, nếu điều này là 1, và bạn nhân nó bằng trừ b một, 2140 01:24:47,880 --> 01:24:50,110 tốt, đó chỉ là sự khác biệt giữa trừ A. 2141 01:24:50,110 --> 01:24:52,870 Và nếu bạn sau đó thêm rằng trở lại vào một, đó là những gì? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 Đó là cơ bản b. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 Điều đó có ý nghĩa? 2146 01:24:57,310 --> 01:24:57,851 >> HỌC SINH: Vâng. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> Davin: Vì vậy, nếu điều này là tối đa giá trị của nó có thể có thể được, 2149 01:25:02,170 --> 01:25:03,175 nó sẽ là 1. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 Và sau đó điều này chỉ là sự khác biệt giữa hai người. 2152 01:25:06,330 --> 01:25:11,410 Thêm vào đó, vì vậy đây là sẽ trở lại ngẫu nhiên. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 Và trong trường hợp góc drand cung cấp cho bạn trở lại 1, 2155 01:25:18,620 --> 01:25:20,970 ngẫu nhiên sẽ chỉ được hiệu quả được b. 2156 01:25:20,970 --> 01:25:22,700 Nhưng đó là tối đa có thể được. 2157 01:25:22,700 --> 01:25:27,420 Vì vậy, nếu nó sẽ được ít hơn đó, vì vậy chúng ta hãy nói rằng nó giống như 0,9, 2158 01:25:27,420 --> 01:25:31,080 như vậy thì 0,9 lần b trừ một là có được ít 2159 01:25:31,080 --> 01:25:33,230 hơn sự khác biệt giữa b trừ đi một. 2160 01:25:33,230 --> 01:25:35,830 >> Và sau đó nếu bạn thêm rằng vào một, sau đó giá trị đó là 2161 01:25:35,830 --> 01:25:38,986 sẽ lớn hơn một, bởi vì bạn đang thêm một cái gì đó vào nó, 2162 01:25:38,986 --> 01:25:40,360 nhưng nó sẽ được ít hơn b. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Vì vậy, bạn sẽ nhận được một ngẫu nhiên số lượng, bởi vì bạn đang gọi điện thoại drand. 2165 01:25:44,420 --> 01:25:48,000 Và rand rằng, con số ngẫu nhiên là sẽ là một nơi nào đó ở giữa một 2166 01:25:48,000 --> 01:25:49,342 và b. 2167 01:25:49,342 --> 01:25:50,780 Điều đó có ý nghĩa? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Chỉ cần đặt nó trong số cụ thể, vì vậy 2169 01:25:52,990 --> 01:25:55,450 hãy nói rằng chúng tôi muốn chọn một số ngẫu nhiên giữa 7 và 10. 2170 01:25:55,450 --> 01:25:56,960 Vì vậy, b trừ đi một là phạm vi của chúng tôi. 2171 01:25:56,960 --> 01:26:00,150 Vì vậy, có một loạt các ba số chúng ta muốn lựa chọn. 2172 01:26:00,150 --> 01:26:03,290 Và sau đó nhân rằng giữa 0 và 1 1, 2173 01:26:03,290 --> 01:26:07,430 nếu mà sau đó cho chúng ta some-- hãy nói cho chúng ta 1.5. 2174 01:26:07,430 --> 01:26:10,670 >> Sau đó, 1.5, chúng tôi muốn đi 7-10. 2175 01:26:10,670 --> 01:26:14,470 Vì vậy, cộng với 1,5 7 mang đến cho chúng tôi trở lại của chúng tôi 7-10 phạm vi. 2176 01:26:14,470 --> 01:26:17,580 Và sau đó chúng tôi đang lưu trữ nó bên trong một số nguyên, do đó, nó rút ngắn xuống còn 8. 2177 01:26:17,580 --> 01:26:18,790 Và sau đó chúng tôi chỉ trả lại đó. 2178 01:26:18,790 --> 01:26:21,310 Vì vậy, b trừ đi một là phạm vi của chúng tôi. 2179 01:26:21,310 --> 01:26:25,770 một thay đổi nó thành những con số mà chúng tôi muốn trong phạm vi đó. 2180 01:26:25,770 --> 01:26:30,540 Vì vậy, từ 7 đến 10, và sau đó chúng tôi có thể trả lại những gì chúng ta kết thúc với. 2181 01:26:30,540 --> 01:26:32,684 >> Davin: Yeah, tốt đẹp. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Cảm ơn bạn. 2183 01:26:34,470 --> 01:26:35,628 >> Davin: Vâng, có chuyện gì thế? 2184 01:26:35,628 --> 01:26:39,746 >> SINH VIÊN: Chúng ta chạy nó vào bất kỳ loại Lỗi ASCII khi we're-- nếu drand là 2185 01:26:39,746 --> 01:26:40,996 trả lại một float [không nghe được]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Vì vậy, giống như Rob cho biết, bởi vì ngẫu nhiên không phải là một int, 2188 01:26:45,360 --> 01:26:47,080 để drand sẽ là một phao. 2189 01:26:47,080 --> 01:26:48,470 Vì vậy, và sau đó nó sẽ nhân ra ngoài. 2190 01:26:48,470 --> 01:26:50,507 Và bạn có thể nhận được một số loại số phao. 2191 01:26:50,507 --> 01:26:51,840 Và sau đó nó sẽ cắt ngắn. 2192 01:26:51,840 --> 01:26:52,339 >> SINH VIÊN: OK. 2193 01:26:52,339 --> 01:26:53,019 Davin: Yeah. 2194 01:26:53,019 --> 01:26:56,060 ROB: Và nếu trình biên dịch là để cảnh báo bạn về, như thế, mất độ chính xác, 2195 01:26:56,060 --> 01:26:58,986 chỉ ném một int trong ở đó, và sau đó nó là tốt. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 Davin: Vâng? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> HỌC SINH: Nó sẽ có cùng xác suất nhận, 2200 01:27:04,722 --> 01:27:06,156 như, b hoặc a [không nghe được]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Vì vậy, is-- Tôi thực sự wondering-- là RandomInt phải 2203 01:27:10,980 --> 01:27:14,362 là một số từ một đến dưới b? 2204 01:27:14,362 --> 01:27:16,820 Giống như, nếu nó từ 7 và 10, khả năng là những gì? 2205 01:27:16,820 --> 01:27:18,454 7, 8, và 9, hoặc 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 Davin: Tôi quên. 2207 01:27:19,120 --> 01:27:19,880 Về vấn đề set-- 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Tôi nghĩ rằng đó là 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> Davin: Nó đặc biệt nói của một người toàn diện và một của độc quyền. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Yeah. 2211 01:27:23,110 --> 01:27:23,670 >> Davin: Nhưng tôi don't-- tôi not-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Vì vậy, tôi nghĩ rằng đây là không có, trong trường hợp này, 2213 01:27:25,878 --> 01:27:28,152 có một bằng Xác suất của 7, 8, và 9. 2214 01:27:28,152 --> 01:27:29,360 Không có xác suất 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 Davin: Vâng? 2217 01:27:32,270 --> 01:27:33,395 HỌC SINH: Tôi có một câu hỏi. 2218 01:27:33,395 --> 01:27:38,090 Chúng tôi muốn xác định một chức năng trả về không phải là một giá trị, nhưng một mảng. 2219 01:27:38,090 --> 01:27:41,020 Sau đó, những gì sẽ là cú pháp sau khi trở lại? 2220 01:27:41,020 --> 01:27:44,604 >> Davin: OK, vậy thì bạn would-- sau khi trở về? 2221 01:27:44,604 --> 01:27:47,020 Vì vậy, hãy nói rằng bạn đã tuyên bố một mảng ở một nơi nào đó. 2222 01:27:47,020 --> 01:27:49,708 Sau đó, bạn sẽ chỉ trả lại tên của mảng. 2223 01:27:49,708 --> 01:27:50,676 >> SINH VIÊN: OK, cảm ơn bạn. 2224 01:27:50,676 --> 01:27:51,718 Sau đó chỉ cần trở lại với a-- 2225 01:27:51,718 --> 01:27:52,759 Davin: Oh chờ đợi, vì vậy xin lỗi. 2226 01:27:52,759 --> 01:27:54,620 Câu hỏi đặt ra là làm thế nào Bạn trả lại một mảng. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: Mặc dù nó có thể không được một mảng được khai báo 2228 01:27:56,170 --> 01:27:57,260 trên stack hay bất cứ điều gì như thế. 2229 01:27:57,260 --> 01:27:59,510 Nó sẽ có được một cái gì đó malloced, bởi vì malloc 2230 01:27:59,510 --> 01:28:01,610 là làm thế nào bạn có được xung quanh cấp phát bộ nhớ tự động. 2231 01:28:01,610 --> 01:28:02,109 >> Davin: Có. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: Làm thế nào bạn có được xung quanh phạm vi địa phương. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> Davin: Nhưng bạn sẽ chỉ trả lại name-- của nó 2236 01:28:11,550 --> 01:28:17,890 >> HỌC SINH: [không nghe được] nó không phải là một giá trị, ví dụ, hai con số, do đó, 2237 01:28:17,890 --> 01:28:18,390 [Không nghe được]. 2238 01:28:18,390 --> 01:28:19,590 >> Davin: Bạn không thể trả nhiều số. 2239 01:28:19,590 --> 01:28:20,850 Bạn có thể không, như, return-- 2240 01:28:20,850 --> 01:28:23,630 >> HỌC SINH: Tôi đã nói chuyện về trở về một mảng hoặc một cái gì đó như thế. 2241 01:28:23,630 --> 01:28:26,050 >> Davin: Yeah, vì vậy câu hỏi là Tôi có thể trả lại nhiều giá trị. 2242 01:28:26,050 --> 01:28:27,460 Bạn không thể trả lại nhiều giá trị. 2243 01:28:27,460 --> 01:28:30,270 Bạn có thể không, như thế nào, sau đó trả về một trở lại b hoặc một cái gì đó như thế. 2244 01:28:30,270 --> 01:28:32,710 Bởi vì sau khi bạn quay trở lại, bạn trở lại ra khỏi chức năng. 2245 01:28:32,710 --> 01:28:35,790 Và sau đó các chức năng được thực hiện, và như Rob cho biết, là trên stack. 2246 01:28:35,790 --> 01:28:38,260 >> Vì vậy, tất cả những bộ nhớ chỉ được trả lại cho máy tính. 2247 01:28:38,260 --> 01:28:40,025 Tất cả mọi thứ bị lãng quên, về cơ bản. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Vì vậy, nếu bạn muốn trở lại nhiều giá trị, bạn phải trả lại một mảng, 2250 01:28:44,430 --> 01:28:45,971 Và cách bạn làm điều đó là mallocing. 2251 01:28:45,971 --> 01:28:48,780 Và sau đó bạn sẽ quay trở lại x như thế. 2252 01:28:48,780 --> 01:28:50,280 Về cơ bản, bạn chỉ cần trả lại tên. 2253 01:28:50,280 --> 01:28:51,620 Và khi bạn trở về một cái gì đó như thế này, bạn 2254 01:28:51,620 --> 01:28:53,200 không thực sự trở về giá trị. 2255 01:28:53,200 --> 01:28:55,430 >> Vì vậy, hãy nói rằng bạn được lưu trữ các giá trị trong một mảng. 2256 01:28:55,430 --> 01:28:57,910 Bạn không thực sự trở về những giá trị. 2257 01:28:57,910 --> 01:29:01,515 Giống như, nếu tôi trở về một int, tôi thực sự quay trở lại bản sao của các giá trị. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Nhưng nếu tôi được trở lại một cái gì đó như thế này, 2260 01:29:03,850 --> 01:29:06,450 Tôi trở lại một tài liệu tham khảo để những giá trị. 2261 01:29:06,450 --> 01:29:09,090 Vì vậy, tôi trở lại, về cơ bản, một địa chỉ bộ nhớ để các giá trị. 2262 01:29:09,090 --> 01:29:10,079 Điều đó có ý nghĩa? 2263 01:29:10,079 --> 01:29:10,620 HỌC SINH: Vâng. 2264 01:29:10,620 --> 01:29:11,120 Davin: Nice. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 Có? 2267 01:29:13,410 --> 01:29:15,430 >> HỌC SINH: Khi bạn sử dụng drand trên đây, 2268 01:29:15,430 --> 01:29:17,660 Bạn phải đặt srand trước đó? 2269 01:29:17,660 --> 01:29:20,320 >> Davin: Không, không, tôi không nghĩ như vậy. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Yeah, vì vậy bạn có để nói bất cứ điều gì về srand? 2271 01:29:23,040 --> 01:29:26,900 Mặc định của bạn không bao giờ nói srand ở tất cả là chỉ cần làm srand của null. 2272 01:29:26,900 --> 01:29:29,350 Vì vậy, drand trên sẽ làm việc riêng của mình. 2273 01:29:29,350 --> 01:29:33,759 Và nó sẽ tự động giống với thời gian hiện tại, là những gì nó sử dụng. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 Davin: Vâng? 2276 01:29:35,675 --> 01:29:40,950 HỌC SINH: Bạn có [không nghe được] với những con số? 2277 01:29:40,950 --> 01:29:42,570 Davin: Vâng, bạn có thể. 2278 01:29:42,570 --> 01:29:46,770 SINH VIÊN: Vì vậy, bạn có thể nói, như, 4 lần 2. 2279 01:29:46,770 --> 01:29:50,280 Có điều là, bạn không thể giả sau đó một int là bốn byte. 2280 01:29:50,280 --> 01:29:51,020 Các only-- 2281 01:29:51,020 --> 01:29:53,830 >> Davin: Tôi có nghĩa là, đối với các bài kiểm tra bạn có thể. 2282 01:29:53,830 --> 01:29:54,830 [Cười] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: Mm, không có. 2284 01:29:55,780 --> 01:29:56,780 Davin: Vâng, vâng bạn có thể. 2285 01:29:56,780 --> 01:30:00,197 Nếu họ yêu cầu bạn lớn như thế nào là một int, bạn không thể, giống như, bốn hoặc tám. 2286 01:30:00,197 --> 01:30:02,030 ROB: Oh, vì vậy nếu câu hỏi là cụ thể, 2287 01:30:02,030 --> 01:30:04,857 như thế, nếu nó là một vấn đề mã hóa, bạn nên nói kích thước của int. 2288 01:30:04,857 --> 01:30:06,690 Nếu nó là một bảng, hoặc nó nói có bao nhiêu byte, 2289 01:30:06,690 --> 01:30:08,808 bạn không nên điền vào kích thước của ints. 2290 01:30:08,808 --> 01:30:11,278 >> SINH VIÊN: [Cười] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> Davin: Đúng, vậy tại sao kích thước của int quan trọng ở đây? 2293 01:30:20,580 --> 01:30:23,085 Vì vậy, như thế, nếu chúng ta đến 32-bit xử lý hoặc một cái gì đó như thế, 2294 01:30:23,085 --> 01:30:24,300 sau đó nó sẽ là bốn byte. 2295 01:30:24,300 --> 01:30:26,342 Tuy nhiên, trên một số phiên bản mới hơn công cụ, nó có thể là những gì? 2296 01:30:26,342 --> 01:30:27,383 Nó có thể là tám, phải không? 2297 01:30:27,383 --> 01:30:30,550 Vì vậy, this-- nếu bạn chỉ cứng mã bốn, sau đó trên một số máy, nó sẽ làm việc. 2298 01:30:30,550 --> 01:30:32,180 Một số máy, nó sẽ không làm việc. 2299 01:30:32,180 --> 01:30:35,270 Nhưng nếu trên các bài kiểm tra chúng tôi như thế nào lớn là một int? 2300 01:30:35,270 --> 01:30:35,770 Đặt bốn. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: Đúng vậy. 2303 01:30:39,210 --> 01:30:39,790 Davin: Yeah? 2304 01:30:39,790 --> 01:30:43,192 SINH VIÊN: Vì vậy, bởi vì chúng tôi tuyên bố [Không nghe thấy] bên trong một hàm, 2305 01:30:43,192 --> 01:30:45,622 chúng ta nên đặt 3 bên trong chức năng đó? 2306 01:30:45,622 --> 01:30:46,907 Hoặc chúng ta có thể sử dụng nó bên ngoài? 2307 01:30:46,907 --> 01:30:48,740 Davin: Bạn có thể sử dụng nó ngoài chức năng đó. 2308 01:30:48,740 --> 01:30:49,890 Vì vậy, ông yêu cầu miễn phí. 2309 01:30:49,890 --> 01:30:51,700 >> HỌC SINH: Thua theo dõi nơi [không nghe được]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: Oh, miễn phí không happen-- đó là một phần của sự kỳ diệu của malloc 2311 01:30:54,720 --> 01:30:57,220 là bạn đang không giới hạn trong phạm vi địa phương. 2312 01:30:57,220 --> 01:31:00,700 Bạn có toàn quyền kiểm soát bao lâu biến của bạn sống. 2313 01:31:00,700 --> 01:31:05,380 Vì vậy, chúng ta gọi là malloc ở đây, nó có thể là một chức năng hoàn toàn riêng biệt. 2314 01:31:05,380 --> 01:31:08,670 Nó có thể là 10 giờ sau đó mà cuối cùng chúng ta gọi miễn phí. 2315 01:31:08,670 --> 01:31:11,764 >> Davin: Vì vậy, ví dụ như, một cặp vợ chồng tuần kể từ bây giờ khi bạn cuối cùng 2316 01:31:11,764 --> 01:31:13,680 làm Speller từ điển của bạn psets, bạn sẽ 2317 01:31:13,680 --> 01:31:16,410 có một số chức năng tạo ra tấn nút. 2318 01:31:16,410 --> 01:31:18,630 Vì vậy, bạn đang mallocing tấn của các nút chức năng này. 2319 01:31:18,630 --> 01:31:20,670 Và sau đó trong một chức năng riêng biệt, bạn 2320 01:31:20,670 --> 01:31:22,440 sẽ muốn giải thoát tất cả các nút. 2321 01:31:22,440 --> 01:31:25,740 Vì vậy, bạn có nghĩa là có thể chỉ cần vượt qua để giải phóng một con trỏ, do đó, một địa chỉ bộ nhớ 2322 01:31:25,740 --> 01:31:26,684 với những gì bạn malloced. 2323 01:31:26,684 --> 01:31:27,600 Và đó sẽ là tốt. 2324 01:31:27,600 --> 01:31:29,725 Bạn không cần phải giải phóng, như, trong cùng chức năng. 2325 01:31:29,725 --> 01:31:30,449 Có? 2326 01:31:30,449 --> 01:31:36,197 >> SINH VIÊN: Vì vậy, một malloc biến [không nghe được] bên ngoài? 2327 01:31:36,197 --> 01:31:37,384 Đó là những gì bạn đang nói? 2328 01:31:37,384 --> 01:31:38,300 Davin: Chờ đợi, nói rằng? 2329 01:31:38,300 --> 01:31:38,800 Xin lỗi. 2330 01:31:38,800 --> 01:31:42,300 >> HỌC SINH: Nếu một biến malloc có thể được miễn phí bất cứ nơi nào trong các mã, 2331 01:31:42,300 --> 01:31:44,800 sau đó họ có thể được truy cập bất cứ nơi nào trong các mã? 2332 01:31:44,800 --> 01:31:45,800 Bạn có thể giữ chúng địa phương? 2333 01:31:45,800 --> 01:31:47,880 >> Davin: Oh, cô hỏi, như, biến, like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Vì vậy, bạn vẫn cần phải có một số loại tài liệu tham khảo 2336 01:31:55,510 --> 01:31:57,220 để khối của malloc bộ nhớ. 2337 01:31:57,220 --> 01:31:58,540 Vì vậy, ở đây, chúng tôi đang trở về x. 2338 01:31:58,540 --> 01:31:59,040 HỌC SINH: Oh. 2339 01:31:59,040 --> 01:32:01,920 ROB: Nếu chúng ta không trở về x ở đây, và điều này chỉ là hư vô, 2340 01:32:01,920 --> 01:32:04,550 sau đó chúng tôi sẽ không có quyền truy cập vào con trỏ được malloced, 2341 01:32:04,550 --> 01:32:05,920 và nó bị rò rỉ bộ nhớ. 2342 01:32:05,920 --> 01:32:06,690 >> SINH VIÊN: OK. 2343 01:32:06,690 --> 01:32:10,010 >> Davin: Vì vậy, như thế nào, hãy nói rằng bạn có điều này, giống như, ngay tại đây. 2344 01:32:10,010 --> 01:32:10,510 ROB: số 2345 01:32:10,510 --> 01:32:13,430 Davin: Trong chức năng chính của tôi, tôi không thể chỉ cần gọi x này và có thể được, như thế, OK, 2346 01:32:13,430 --> 01:32:14,645 trong chức năng này, tôi đã làm điều này. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: Đúng vậy. 2348 01:32:14,960 --> 01:32:17,790 >> Davin: Vì vậy, tôi sẽ gọi cho x trong, như, chính hoặc một cái gì đó như thế. 2349 01:32:17,790 --> 01:32:18,540 Bạn không thể làm điều đó. 2350 01:32:18,540 --> 01:32:19,600 Bạn sẽ trở lại một cái gì đó. 2351 01:32:19,600 --> 01:32:21,000 Nhưng những gì thì bạn sẽ trở lại? 2352 01:32:21,000 --> 01:32:22,130 Bạn sẽ trả về một địa chỉ bộ nhớ. 2353 01:32:22,130 --> 01:32:25,130 Và bởi vì bạn quay trở lại một bộ nhớ địa chỉ, có thể truy cập ở những nơi khác. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 Bất kỳ câu hỏi nhiều hơn? 2356 01:32:28,255 --> 01:32:28,755 Có? 2357 01:32:28,755 --> 01:32:31,213 >> HỌC SINH: là các chức năng trên được kiểm tra cho [không nghe được]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> Davin: Tại sao tôi không cần phải làm điều đó? 2360 01:32:35,005 --> 01:32:35,880 HỌC SINH: [không nghe được]. 2361 01:32:35,880 --> 01:32:37,755 Davin: Bởi vì bạn không mallocing bất cứ điều gì. 2362 01:32:37,755 --> 01:32:39,640 Vì vậy, nó not-- yeah, đó là không giống như một chuỗi s. 2363 01:32:39,640 --> 01:32:41,160 Đó là một con trỏ ở đâu đó. 2364 01:32:41,160 --> 01:32:42,951 Đây chỉ là giá trị. 2365 01:32:42,951 --> 01:32:43,450 SINH VIÊN: OK. 2366 01:32:43,450 --> 01:32:43,949 Davin: Yeah. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Bất cứ điều gì khác? 2369 01:32:48,470 --> 01:32:48,970 ROB: Yep? 2370 01:32:48,970 --> 01:32:50,386 HỌC SINH: Nhưng khi bạn [không nghe được]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Vì vậy, để giải phóng bộ nhớ, chúng tôi sẽ nói ở đây. 2373 01:32:58,690 --> 01:33:01,350 Vì vậy, x là con trỏ của chúng tôi để khối của bộ nhớ. 2374 01:33:01,350 --> 01:33:02,845 Chúng tôi giải phóng con trỏ đó. 2375 01:33:02,845 --> 01:33:04,470 Và chúng tôi sẽ không nhất thiết phải làm điều đó ở đây. 2376 01:33:04,470 --> 01:33:05,390 Chúng ta có thể làm điều đó bất cứ nơi nào. 2377 01:33:05,390 --> 01:33:10,400 Nhưng bạn chỉ gọi miễn phí trên cái gì mà malloc trả về. 2378 01:33:10,400 --> 01:33:12,940 Vì vậy, malloc, ở đây, trở lại những gì đang được lưu trữ trong x. 2379 01:33:12,940 --> 01:33:14,802 Vì vậy, chúng ta có thể gọi miễn phí trên x. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Bất kỳ câu hỏi cuối cùng? 2382 01:33:20,556 --> 01:33:21,701 >> Davin: Bất kỳ câu hỏi cuối cùng? 2383 01:33:21,701 --> 01:33:22,200 Yeah? 2384 01:33:22,200 --> 01:33:25,152 >> HỌC SINH: Xin lỗi, có thể bạn lại giải thích tại sao bạn sẽ giải phóng trong đó? 2385 01:33:25,152 --> 01:33:26,630 Tại sao [không nghe được]? 2386 01:33:26,630 --> 01:33:27,774 >> Davin: Vì ở đây? 2387 01:33:27,774 --> 01:33:29,109 >> HỌC SINH: Yeah, giống như ngay sau đó. 2388 01:33:29,109 --> 01:33:30,900 Davin: Bạn có thể không muốn một miễn phí tại đây. 2389 01:33:30,900 --> 01:33:31,630 ROB: Bạn có thể sẽ không được. 2390 01:33:31,630 --> 01:33:33,060 Davin: Yeah, rằng điều này sẽ không làm gì cả. 2391 01:33:33,060 --> 01:33:35,220 Điều này sẽ, như, tạo ra bộ nhớ, làm công cụ để nó, 2392 01:33:35,220 --> 01:33:37,390 và sau đó ngay lập tức quên nó, yeah. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Nhưng chúng ta có thể làm, như, ở đây đối với một số lý do. 2394 01:33:39,850 --> 01:33:43,902 Chúng tôi có thể nói int sao y bằng mảng trở lại. 2395 01:33:43,902 --> 01:33:47,900 Làm một số công cụ với y, có thể in nội dung. 2396 01:33:47,900 --> 01:33:49,350 Và sau đó, cuối cùng, chúng tôi đang thực hiện. 2397 01:33:49,350 --> 01:33:50,626 Chúng tôi có thể giải phóng y. 2398 01:33:50,626 --> 01:33:51,501 HỌC SINH: [không nghe được]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 Davin: Tôi có nên di chuyển xuống? 2401 01:33:59,005 --> 01:34:00,445 Cảm ơn. 2402 01:34:00,445 --> 01:34:00,945 ROB: Nice. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> Davin: OK, đó là nó. 2405 01:34:03,646 --> 01:34:04,520 ROB: Được rồi, tốt. 2406 01:34:04,520 --> 01:34:05,070 Chúc may mắn. 2407 01:34:05,070 --> 01:34:06,800 >> Davin: Nếu bạn có câu hỏi, gửi email cho chúng tôi. 2408 01:34:06,800 --> 01:34:08,670 Chúc may mắn. 2409 01:34:08,670 --> 01:34:10,283