1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Chào mừng A5, tất cả mọi người. 3 00:00:07,820 --> 00:00:11,270 Chúng tôi có một tuần thú vị phía trước chúng ta, chủ yếu là bởi vì có rất nhiều mới 4 00:00:11,270 --> 00:00:12,350 phải đối mặt trong căn phòng này. 5 00:00:12,350 --> 00:00:12,920 Thật là tuyệt vời. 6 00:00:12,920 --> 00:00:15,740 Rất nhiều bạn đến đây do tai nạn, mà thậm chí còn tốt hơn. 7 00:00:15,740 --> 00:00:18,220 Vì vậy, hy vọng bạn sẽ tiếp tục tham gia với chúng tôi. 8 00:00:18,220 --> 00:00:20,220 >> Tuần này chúng ta sẽ dành phần lớn các phần 9 00:00:20,220 --> 00:00:21,870 chuẩn bị cho các bài kiểm tra. 10 00:00:21,870 --> 00:00:26,580 Vì vậy, mỗi chương trình nghị sự của chúng tôi, chúng ta sẽ nói chuyện một chút về nguồn lực cho các lớp học, 11 00:00:26,580 --> 00:00:30,350 mà còn cho các bài kiểm tra, và sau đó, một lần nữa, dành phần lớn các lớp nói chuyện 12 00:00:30,350 --> 00:00:31,390 về các câu hỏi. 13 00:00:31,390 --> 00:00:33,900 Một khi chúng ta đang thực hiện trả lời của bạn câu hỏi, hoặc nếu câu hỏi của bạn 14 00:00:33,900 --> 00:00:39,010 tự nhiên dẫn chúng ta đến một số mã hóa, tôi có vấn đề mẫu từ kỳ thi giữa kỳ 15 00:00:39,010 --> 00:00:43,180 qua đó chúng ta sẽ mã trực tiếp trong phần cùng đó cũng mang lại một số khác 16 00:00:43,180 --> 00:00:45,420 chủ đề tốt để trang trải. 17 00:00:45,420 --> 00:00:48,280 >> Vì vậy, đầu tiên, như chúng tôi đã trải qua cho quá khứ vài tuần để nhắc nhở bạn 18 00:00:48,280 --> 00:00:51,700 guys, có một tấn các nguồn tài nguyên có sẵn cho khóa học này. 19 00:00:51,700 --> 00:00:55,020 Nhiều người trong số họ sẽ là vô cùng hữu ích cho bạn khi tiếp tục 20 00:00:55,020 --> 00:00:57,280 học tập cho bài kiểm tra 0, bởi vì đó là buổi chiều thứ ba. 21 00:00:57,280 --> 00:00:59,630 Vì vậy, tất cả các bạn đã nghiên cứu một chút. 22 00:00:59,630 --> 00:01:02,640 >> Có bài giảng và nguồn mã mà bạn nên 23 00:01:02,640 --> 00:01:04,050 chắc chắn kiểm tra. 24 00:01:04,050 --> 00:01:05,019 Xem quần short. 25 00:01:05,019 --> 00:01:07,470 Kiểm tra study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Và sau đó, được liệt kê dưới đây, một số các nguồn lực khác. 27 00:01:11,770 --> 00:01:14,020 >> Một lần nữa, bài kiểm tra 0 là ngày mai lúc 1 giờ. 28 00:01:14,020 --> 00:01:18,230 Nếu bạn đã không làm như vậy, hãy kiểm tra ra về đố 0 tài liệu trên 29 00:01:18,230 --> 00:01:21,370 trang chủ của trình để tìm ra nơi bạn đang dùng các bài kiểm tra. 30 00:01:21,370 --> 00:01:25,770 Các bài kiểm tra bắt đầu từ 1:10 và kết thúc 70 phút thi đấu sau đó. 31 00:01:25,770 --> 00:01:29,610 Vì vậy, nếu bạn xuất hiện sau khi 1:10, bạn sẽ nhận được nhiều phút hơn 32 00:01:29,610 --> 00:01:30,940 hơn 70 để có những bài kiểm tra. 33 00:01:30,940 --> 00:01:33,570 Vì vậy, hãy chắc chắn rằng bạn có thời gian. 34 00:01:33,570 --> 00:01:38,690 Nếu bạn là một sinh viên mở rộng hoặc có một số cân nhắc thử nghiệm khác, nó 35 00:01:38,690 --> 00:01:40,400 có thể không phải lúc 1 giờ ngày mai. 36 00:01:40,400 --> 00:01:43,540 Nhưng một lần nữa, kiểm tra về Câu hỏi 0 tài liệu để chắc chắn rằng bạn biết khi nào 37 00:01:43,540 --> 00:01:44,760 bạn đang dùng các bài kiểm tra. 38 00:01:44,760 --> 00:01:46,440 Tôi đã viết 75 phút thi đấu ở đây. 39 00:01:46,440 --> 00:01:48,580 Tôi nghĩ rằng đó là đúng, không 70. 40 00:01:48,580 --> 00:01:53,420 >> Nó bao gồm tất cả các vật liệu từ một tuần 0 bài giảng tuần trước vào ngày thứ Tư. 41 00:01:53,420 --> 00:01:59,350 Và một lần nữa, cho đề thi này, mỗi đó tài liệu, bạn nhận được một hai mặt và 8 42 00:01:59,350 --> 00:02:03,770 1/2 của 11 tờ giấy mà bạn nhận được để sử dụng như ghi chú trong các bài kiểm tra. 43 00:02:03,770 --> 00:02:08,570 Nhiều người, nếu không phải hầu hết mọi người, có thấy rằng cách hữu ích nhất 44 00:02:08,570 --> 00:02:11,970 để học tập cho các bài kiểm tra là làm cho một tờ nghiên cứu, một 45 00:02:11,970 --> 00:02:13,730 một sider, của riêng mình. 46 00:02:13,730 --> 00:02:17,710 Vì vậy, nhìn vào những người trong quá khứ, nếu bạn đã nhìn thấy những người trong quá khứ. 47 00:02:17,710 --> 00:02:19,960 Tiếp cận với bạn bè để xem những gì họ đang đặt vào họ. 48 00:02:19,960 --> 00:02:23,610 >> Nhưng bàn tay xuống, cách tốt nhất bạn có thể nghiên cứu là phải đi qua tất cả mọi thứ và 49 00:02:23,610 --> 00:02:26,530 bớt nó xuống đến những gì nên hay không thuộc về mà tờ 50 00:02:26,530 --> 00:02:30,570 giấy, bởi vì đó chỉ là một thực sự cách hữu ích cho bạn để đảm bảo 51 00:02:30,570 --> 00:02:33,620 bạn đang trải qua tất cả mọi thứ và đã quen với nó. 52 00:02:33,620 --> 00:02:36,690 Hầu hết mọi người, chúng ta thấy, mặc dù họ có các tờ giấy ngồi ngay 53 00:02:36,690 --> 00:02:39,840 cạnh họ trên các bài kiểm tra, không bật với nó, bởi vì, một lần nữa, rằng rất 54 00:02:39,840 --> 00:02:43,290 quá trình đi qua các thông tin đã giúp họ tìm hiểu nó. 55 00:02:43,290 --> 00:02:45,370 >> Không ai có bất kỳ câu hỏi về bài kiểm tra 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Có tất cả mọi người - 58 00:02:51,450 --> 00:02:53,230 Tôi sẽ không làm một chương trình của bàn tay. 59 00:02:53,230 --> 00:02:53,550 Không sao đâu. 60 00:02:53,550 --> 00:02:54,790 Tôi đã đi hỏi người bắt đầu học. 61 00:02:54,790 --> 00:02:58,360 Nhưng tôi không muốn làm cho bạn tất cả không nâng cao tay của bạn. 62 00:02:58,360 --> 00:03:01,290 Vì vậy, như tôi đã nói - có, Avi, đi trước. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Điều gì sẽ là một điều hữu ích để đưa vào một máy nhắn tin? 64 00:03:04,205 --> 00:03:05,875 >> HỌC SINH: Đó là vào bạn. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Bạn nhận được sử dụng bản án của bạn. 66 00:03:08,210 --> 00:03:13,220 Những điều hữu ích để đưa vào một máy nhắn tin, nếu bạn đang nhầm lẫn về O lớn 67 00:03:13,220 --> 00:03:17,510 thời gian chạy của các loại hình tìm kiếm và các loại, đặt trên đó trong một 68 00:03:17,510 --> 00:03:18,760 biểu đồ tiện dụng dandy. 69 00:03:18,760 --> 00:03:22,250 Bằng cách đó, nếu bạn được yêu cầu đó trên bài kiểm tra, bạn không cần phải cố gắng và con số 70 00:03:22,250 --> 00:03:23,560 nó ra hoặc lý do thông qua thời gian chạy. 71 00:03:23,560 --> 00:03:24,730 Bạn chỉ có thể sao chép nó xuống. 72 00:03:24,730 --> 00:03:28,320 Nếu bạn nhìn vào các câu đố trong quá khứ, rất nhiều lần, có đang chạy các câu hỏi thời gian. 73 00:03:28,320 --> 00:03:34,150 Vì vậy, đó sẽ là một ví dụ về một tốt điều để đưa vào một máy nhắn tin của bạn. 74 00:03:34,150 --> 00:03:37,450 >> Những thứ khác tốt để đưa vào, nếu bạn nhầm lẫn về cách khai báo một 75 00:03:37,450 --> 00:03:40,570 chức năng hoặc những gì các phần khác nhau của khai báo hàm là, viết 76 00:03:40,570 --> 00:03:43,400 mà trên đó, một phiên bản chung và sau đó có thể là một ví dụ. 77 00:03:43,400 --> 00:03:47,290 Nếu bạn đang nhầm lẫn về con trỏ, một sơ đồ như thế nào con trỏ làm việc là 78 00:03:47,290 --> 00:03:48,660 có thể thực sự hữu ích. 79 00:03:48,660 --> 00:03:52,440 Nếu bạn đang nhầm lẫn về đệ quy, một mẫu hàm đệ quy trên có 80 00:03:52,440 --> 00:03:54,980 cũng có thể chứng minh được thực sự hữu ích. 81 00:03:54,980 --> 00:03:57,290 Điều đó cung cấp cho bạn một số ý tưởng? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Bạn cần phải hiểu toàn bộ quá trình biên dịch, như 83 00:04:01,820 --> 00:04:03,220 làm thế nào mà tất cả các công trình? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Tất cả mọi thứ đó đã được bảo hiểm có thể 85 00:04:06,620 --> 00:04:08,060 hiển thị trên các bài kiểm tra. 86 00:04:08,060 --> 00:04:08,930 Câu hỏi - 87 00:04:08,930 --> 00:04:11,300 nhưng một lần nữa, một số điều sẽ trọng nhiều hơn những người khác. 88 00:04:11,300 --> 00:04:14,330 Một số điều đã đưa ra một lần nữa và một lần nữa trong lớp học, trong 89 00:04:14,330 --> 00:04:15,590 bài giảng, và phần. 90 00:04:15,590 --> 00:04:17,220 Những thứ khác có không đi lên mà thường xuyên. 91 00:04:17,220 --> 00:04:22,900 >> Chúng tôi đã nói chuyện rất nhiều về # bao gồm và -L một cái gì đó và những gì những người có nghĩa là trong 92 00:04:22,900 --> 00:04:24,390 quá trình biên dịch. 93 00:04:24,390 --> 00:04:29,120 Chúng tôi đã nói chuyện rất nhiều về GDB, bám, những lá cờ khác nhau mà chúng ta sử dụng khi 94 00:04:29,120 --> 00:04:33,100 chúng tôi biên dịch một cái gì đó, và những gì make15, ví dụ, thực sự 95 00:04:33,100 --> 00:04:34,510 nghĩa và thực sự. 96 00:04:34,510 --> 00:04:38,110 Chúng tôi đã không nói chuyện nhiều về từng bước trong 97 00:04:38,110 --> 00:04:39,240 quá trình biên dịch. 98 00:04:39,240 --> 00:04:40,410 Chúng ta vẫn nói về nó. 99 00:04:40,410 --> 00:04:42,550 Vì vậy, nó vẫn còn một cái gì đó mà bạn nên quen thuộc với. 100 00:04:42,550 --> 00:04:44,610 Nhưng một lần nữa, chúng tôi sẽ không thể - 101 00:04:44,610 --> 00:04:49,140 điều mà đi lên thường xuyên hơn trong lớp có nhiều khả năng để đi lên hơn 102 00:04:49,140 --> 00:04:52,495 thường xuyên và có nhiều hơn trọng vào các bài kiểm tra. 103 00:04:52,495 --> 00:04:53,280 >> Mát mẻ. 104 00:04:53,280 --> 00:04:54,580 Thắc mắc khác về bài kiểm tra 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, vì vậy tôi đặt một danh sách các chủ đề trên diễn đàn. 107 00:05:00,050 --> 00:05:01,550 Tôi đã đi qua các giáo trình. 108 00:05:01,550 --> 00:05:07,340 Tôi đã đi qua phần xét từ đêm qua và những hình ảnh và đưa ra 109 00:05:07,340 --> 00:05:13,710 với một danh sách không đầy đủ các chủ đề mà chúng tôi đã được cho đến nay trong CS50 110 00:05:13,710 --> 00:05:16,800 và những thứ mà có thể xuất hiện trên các bài kiểm tra. 111 00:05:16,800 --> 00:05:19,900 Vì vậy, tôi sẽ không đi qua mỗi một đơn của các. 112 00:05:19,900 --> 00:05:22,370 Rằng sẽ mất nhiều hơn thời gian hơn, chúng tôi có bây giờ. 113 00:05:22,370 --> 00:05:26,880 Nhưng tôi đặt này lên đây để hy vọng chạy bộ bộ nhớ của bạn như những điều mà có thể 114 00:05:26,880 --> 00:05:28,420 hoặc có thể không quen thuộc với bạn. 115 00:05:28,420 --> 00:05:32,850 >> Và tôi rất muốn dành phần lớn phần trả lời câu hỏi của bạn về 116 00:05:32,850 --> 00:05:35,130 các chủ đề, chủ đề mà không được ở đây. 117 00:05:35,130 --> 00:05:36,130 Chúng ta có thể viết mã giả. 118 00:05:36,130 --> 00:05:40,010 Chúng ta có thể viết mã thực để đảm bảo rằng bạn - 119 00:05:40,010 --> 00:05:44,280 Tôi có thể trả lời câu hỏi của bạn và giúp tất cả mọi người về cơ bản hiểu một 120 00:05:44,280 --> 00:05:48,330 rất nhiều các chủ đề này, do đó bạn sẽ cảm thấy chuẩn bị sẵn sàng và thoải mái đi vào 121 00:05:48,330 --> 00:05:50,150 các bài kiểm tra vào ngày mai. 122 00:05:50,150 --> 00:05:52,300 Vì vậy, đọc trên danh sách. 123 00:05:52,300 --> 00:05:54,780 Bạn hy vọng đã đến phần với một số câu hỏi là tốt. 124 00:05:54,780 --> 00:05:58,480 Khi bạn đã sẵn sàng, nâng cao tay của bạn và chúng tôi sẽ bắt đầu. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Giữ trong tâm trí, những câu hỏi mà bạn có, không có câu hỏi ngu ngốc. 127 00:06:05,200 --> 00:06:06,250 Chúng tôi nghe nói rất nhiều. 128 00:06:06,250 --> 00:06:09,490 Và những câu hỏi mà bạn có, tôi sẵn sàng đặt cược, nhiều người khác cả 129 00:06:09,490 --> 00:06:11,740 ngồi đây và xem trực tuyến có là tốt. 130 00:06:11,740 --> 00:06:13,770 Vì vậy, bạn chỉ có thể giúp mọi người bằng cách hỏi câu hỏi. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Giữa các ngăn xếp và đống, là có một được cấp phát trước 133 00:06:18,040 --> 00:06:22,880 tỉ lệ bộ nhớ được định nghĩa như này là dành cho chồng hoặc cho đống? 134 00:06:22,880 --> 00:06:25,010 Hay như thế nào mà làm việc, chính xác? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Great câu hỏi. 136 00:06:26,230 --> 00:06:28,640 Tôi sẽ trở lại theo dõi một chút. 137 00:06:28,640 --> 00:06:30,910 Làm tất cả mọi người - 138 00:06:30,910 --> 00:06:31,660 hãy trung thực ở đây. 139 00:06:31,660 --> 00:06:34,130 Tôi biết tôi yêu cầu bạn tăng của bạn tay trước mặt đồng nghiệp của bạn. 140 00:06:34,130 --> 00:06:38,510 Tuy nhiên, có những người cảm thấy không thoải mái với stack và heap 141 00:06:38,510 --> 00:06:42,980 và muốn đi qua đó và những gì những nghĩa là gì? 142 00:06:42,980 --> 00:06:43,880 Nâng cao tay của bạn nếu - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Cảm ơn bạn. 145 00:06:45,120 --> 00:06:48,420 Vì vậy, chúng ta sẽ đi qua các ngăn xếp và đống thực sự nhanh chóng và sau đó 146 00:06:48,420 --> 00:06:50,370 di chuyển vào trả lời câu hỏi của bạn. 147 00:06:50,370 --> 00:06:58,250 >> Vì vậy, nếu chúng ta rút ra một hộp để đại diện cho bộ nhớ trên máy tính của bạn, một số là những gì 148 00:06:58,250 --> 00:07:02,160 những điều mà đi trong hộp này? 149 00:07:02,160 --> 00:07:03,630 Chính. 150 00:07:03,630 --> 00:07:04,020 Một chức năng chính. 151 00:07:04,020 --> 00:07:05,890 Trường hợp không chính đi đâu? 152 00:07:05,890 --> 00:07:08,090 >> HỌC SINH: [nghe được]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Vì vậy, chúng tôi sẽ đưa chính xuống đây. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Những gì khác đi trong hộp này? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> HỌC SINH: Các chức năng mà bạn gọi. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Các chức năng mà chúng ta gọi. 159 00:07:19,020 --> 00:07:20,440 Và nơi nào họ đi đâu? 160 00:07:20,440 --> 00:07:21,300 >> HỌC SINH: Trong ngăn xếp. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Họ đi trong ngăn xếp. 162 00:07:22,380 --> 00:07:27,350 Vì vậy, chúng ta sẽ gọi đây điều xuống đây stack. 163 00:07:27,350 --> 00:07:31,880 Và lên hàng đầu, chúng tôi có đống. 164 00:07:31,880 --> 00:07:35,450 Vì vậy, bộ nhớ không phải là một hộp như thế này. 165 00:07:35,450 --> 00:07:37,330 Nhưng nó thực sự là khá tương tự. 166 00:07:37,330 --> 00:07:40,840 Nó sẽ có rất nhiều hộp hơn trở lên, tùy thuộc vào độ lớn của bạn 167 00:07:40,840 --> 00:07:43,730 máy tính là lớn như thế nào hoặc bộ nhớ của bạn. 168 00:07:43,730 --> 00:07:46,950 >> Tại quote-unquote "đáy" là stack. 169 00:07:46,950 --> 00:07:50,880 Và có nhiều điều mà đi trên stack. 170 00:07:50,880 --> 00:07:53,840 Và những người phụ thuộc vào các chức năng bạn có trong mã của bạn. 171 00:07:53,840 --> 00:07:57,780 Bạn luôn luôn có một chức năng trong bạn mã được gọi là chính, do đó, luôn luôn là một 172 00:07:57,780 --> 00:08:00,480 ở dưới đây trong ngăn xếp dành cho chính. 173 00:08:00,480 --> 00:08:03,980 >> Các phần trong ngăn xếp được gọi là khung stack. 174 00:08:03,980 --> 00:08:09,580 Khi bạn gọi chức năng khác, nói chính gọi một chức năng tìm kiếm nhị phân, 175 00:08:09,580 --> 00:08:11,075 chúng tôi đặt khung khác trên stack. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Cụ thể hơn, chúng ta sẽ hiến tặng một phần bộ nhớ trên của chúng tôi 178 00:08:17,320 --> 00:08:22,960 máy tính để lưu trữ nhị phân tìm kiếm của địa phương biến và để chạy nhị phân 179 00:08:22,960 --> 00:08:24,150 đang tìm kiếm. 180 00:08:24,150 --> 00:08:26,810 >> Vì vậy, chúng ta gọi là tìm kiếm nhị phân. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Trong đoạn này của bộ nhớ, chúng ta sẽ để lưu trữ các biến cục bộ của nó. 183 00:08:33,340 --> 00:08:35,270 Chúng tôi sẽ lưu trữ các cuộc gọi printf của nó. 184 00:08:35,270 --> 00:08:38,159 Bất cứ điều gì xảy ra, chức năng đó là sẽ được lưu trữ ở đó. 185 00:08:38,159 --> 00:08:40,350 Tìm kiếm nhị phân sẽ được thực thi. 186 00:08:40,350 --> 00:08:42,210 Nó sẽ hoàn thành thực hiện. 187 00:08:42,210 --> 00:08:47,450 Từ trong C là những gì mà biểu thị rằng một chức năng nên 188 00:08:47,450 --> 00:08:49,306 hoàn thành thực hiện của nó? 189 00:08:49,306 --> 00:08:50,040 >> HỌC SINH: Return. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Trở về. 191 00:08:50,870 --> 00:08:53,230 Vì vậy, bất cứ khi nào bạn nhìn thấy một tuyên bố trở lại, kết thúc chức năng 192 00:08:53,230 --> 00:08:54,350 khi nó cập đó. 193 00:08:54,350 --> 00:08:56,740 Vì vậy, tìm kiếm nhị phân sẽ đạt trở lại của nó. 194 00:08:56,740 --> 00:09:01,360 Điều này một phần của bộ nhớ sẽ cơ bản được giải tỏa. 195 00:09:01,360 --> 00:09:03,510 Và chính sẽ quay trở lại để thực hiện. 196 00:09:03,510 --> 00:09:07,240 Vì vậy, chính sẽ tạm dừng bất cứ nơi nào là, cuộc gọi tìm kiếm nhị phân, có được một số giá trị trả về, 197 00:09:07,240 --> 00:09:08,700 và tiếp tục thực hiện. 198 00:09:08,700 --> 00:09:10,840 Stack frame này sẽ biến mất. 199 00:09:10,840 --> 00:09:14,810 >> Nếu chúng ta gọi một hàm đệ quy, mà là một chức năng mà tự gọi mình hơn 200 00:09:14,810 --> 00:09:18,480 và hơn, chúng tôi có thể nhận được - nói rằng chúng ta đã tìm kiếm nhị phân đệ quy. 201 00:09:18,480 --> 00:09:21,520 Chúng tôi có thể nhận được nhị phân tìm kiếm phiên bản một, tìm kiếm nhị phân hai, tìm kiếm nhị phân 202 00:09:21,520 --> 00:09:24,090 ba, tìm kiếm nhị phân bốn, tìm kiếm nhị phân năm. 203 00:09:24,090 --> 00:09:27,950 Và sau đó tìm kiếm này thức nhị phân năm sẽ lên trường hợp cơ sở, và ngăn xếp 204 00:09:27,950 --> 00:09:31,010 khung sẽ quay trở lại và tiếp tục đóng cửa cho đến khi chúng tôi trở lại với chính. 205 00:09:31,010 --> 00:09:32,530 Chúng ta có thể đi qua đệ quy trong một chút. 206 00:09:32,530 --> 00:09:35,530 Nhưng tất cả điều này là để nói, nếu bạn gọi nhiều chức năng cùng một lúc, 207 00:09:35,530 --> 00:09:39,250 sẽ có nhiều chồng khung trên stack. 208 00:09:39,250 --> 00:09:42,900 >> Đống, mặt khác, tăng ở đây, không phải là cho các chức năng, 209 00:09:42,900 --> 00:09:44,380 không cho các biến địa phương. 210 00:09:44,380 --> 00:09:48,920 Nó cho động được phân bổ biến. 211 00:09:48,920 --> 00:09:57,210 Vì vậy, đây là những biến có thể được khởi tạo trong cả hai chính hoặc một 212 00:09:57,210 --> 00:09:58,640 chức năng mà các cuộc gọi chính. 213 00:09:58,640 --> 00:10:00,790 Bất cứ nơi nào trong mã của bạn, họ có thể được khởi tạo. 214 00:10:00,790 --> 00:10:04,360 Và để khởi tạo một động biến được phân bổ. 215 00:10:04,360 --> 00:10:06,970 Chức năng gì trong C để chúng ta sử dụng không? 216 00:10:06,970 --> 00:10:07,600 >> HỌC SINH: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Bạn gọi malloc. 219 00:10:10,800 --> 00:10:12,260 Bạn có được một không gian bộ nhớ. 220 00:10:12,260 --> 00:10:15,020 Và không gian bộ nhớ là trên heap. 221 00:10:15,020 --> 00:10:18,840 Và không gian bộ nhớ vẫn đó cho đến khi bạn gọi miễn phí. 222 00:10:18,840 --> 00:10:22,670 >> Vì vậy, biến động được phân bổ trong đống sẽ tồn tại cho đến khi bạn 223 00:10:22,670 --> 00:10:25,250 muốn họ tồn tại, và họ sẽ không đi cho đến khi bạn rõ ràng 224 00:10:25,250 --> 00:10:26,760 nói với họ ra đi. 225 00:10:26,760 --> 00:10:29,670 Bạn có thể tạo ra chúng trong một chức năng. 226 00:10:29,670 --> 00:10:31,930 Của chức năng ngăn xếp khung sẽ biến mất. 227 00:10:31,930 --> 00:10:35,490 Nhưng biến mà sẽ vẫn tồn tại trong đống cho đến khi nó được giải phóng, 228 00:10:35,490 --> 00:10:39,650 có khả năng bởi các chức năng đó được gọi là tìm kiếm nhị phân hoặc bất cứ điều gì. 229 00:10:39,650 --> 00:10:42,580 >> Vì vậy, những biến đống ở đó cho miễn là bạn muốn 230 00:10:42,580 --> 00:10:43,490 họ ở lại đó. 231 00:10:43,490 --> 00:10:46,090 Và họ được đặt ở đây. 232 00:10:46,090 --> 00:10:47,450 Và sau đó là một tiếp theo được đặt ở đó. 233 00:10:47,450 --> 00:10:50,210 Họ tiếp tục nhận được điền vào, và họ ở lại đó cho đến khi bạn gọi miễn phí. 234 00:10:50,210 --> 00:10:52,870 >> Và về cơ bản, heap và stack, nhận được câu hỏi của Marcus, 235 00:10:52,870 --> 00:10:54,500 phát triển với nhau. 236 00:10:54,500 --> 00:10:57,730 Và nếu họ chạy vào nhau, bạn đã sử dụng hết tất cả các bộ nhớ trong của bạn 237 00:10:57,730 --> 00:11:01,330 máy tính, và chương trình của bạn sẽ bỏ thuốc lá bởi vì bạn không có bất kỳ bộ nhớ hơn 238 00:11:01,330 --> 00:11:02,420 còn lại để sử dụng. 239 00:11:02,420 --> 00:11:07,290 Ở giữa chúng, có điều có khả năng khác. 240 00:11:07,290 --> 00:11:10,980 Nhưng đối với phạm vi của khóa học này, bạn không cần phải lo lắng về điều đó. 241 00:11:10,980 --> 00:11:12,020 >> Vì vậy, đó là câu trả lời câu hỏi của bạn. 242 00:11:12,020 --> 00:11:13,520 Đừng lo lắng về cái đó. 243 00:11:13,520 --> 00:11:15,550 Nhưng đó là câu trả lời dài. 244 00:11:15,550 --> 00:11:17,800 Tất cả các bạn cần biết là heap và stack sẽ - 245 00:11:17,800 --> 00:11:18,900 người ta bắt đầu ở phía dưới. 246 00:11:18,900 --> 00:11:19,570 Ngăn xếp không. 247 00:11:19,570 --> 00:11:20,790 Đống trên đó. 248 00:11:20,790 --> 00:11:21,990 Họ sẽ gần hơn với nhau. 249 00:11:21,990 --> 00:11:23,110 >> Và nếu họ chạm vào, đó là một vấn đề. 250 00:11:23,110 --> 00:11:24,500 Bạn chạy ra khỏi bộ nhớ. 251 00:11:24,500 --> 00:11:28,760 Nhưng cũng có thể, ngoài việc biết nơi họ, những gì được lưu trữ trong cả hai 252 00:11:28,760 --> 00:11:30,512 ngăn xếp và đống. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Khi va chạm, là một chồng tràn? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Khi va chạm, đó không phải là một chồng tràn. 256 00:11:35,670 --> 00:11:38,340 Một tràn stack là một khu vực khác nhau chúng ta có thể đi qua nếu bạn muốn. 257 00:11:38,340 --> 00:11:40,020 OK, chúng tôi sẽ trở lại trong một chút. 258 00:11:40,020 --> 00:11:42,730 >> HỌC SINH: từ gọi là gì khi họ đánh nhau, 259 00:11:42,730 --> 00:11:44,450 ngăn xếp và heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Hiện tại, đừng lo lắng về. 261 00:11:46,640 --> 00:11:47,750 Chỉ biết - 262 00:11:47,750 --> 00:11:50,530 Tôi sẽ trả lời câu hỏi sau giờ học. 263 00:11:50,530 --> 00:11:52,680 Nếu họ chạy vào nhau, bạn chạy ra khỏi bộ nhớ, bởi vì không có nhiều 264 00:11:52,680 --> 00:11:53,330 không gian đó. 265 00:11:53,330 --> 00:11:55,450 >> HỌC SINH: Xin lỗi, một lỗi seg là gì? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Một bộ phận lỗi có thể được gọi là cho - 267 00:11:58,710 --> 00:12:02,240 nó phụ thuộc lý do tại sao gọi là lỗi của seg. 268 00:12:02,240 --> 00:12:06,260 Đôi khi, tràn stack của bạn, nó sẽ nói seg lỗi như lỗi. 269 00:12:06,260 --> 00:12:08,180 >> HỌC SINH: Còn dereferencing một biến null? 270 00:12:08,180 --> 00:12:10,040 Là một lỗi seg? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: dereferencing một con trỏ null - 272 00:12:11,480 --> 00:12:17,850 OK, vì vậy nếu bạn có một con trỏ mà bạn thiết lập bằng vô giá trị, con trỏ, thu hồi, 273 00:12:17,850 --> 00:12:20,270 địa chỉ bộ nhớ lưu trữ như giá trị của họ. 274 00:12:20,270 --> 00:12:23,660 Và một con trỏ null là chủ yếu lưu trữ 0, 0-th 275 00:12:23,660 --> 00:12:26,670 giải quyết trong biến đó. 276 00:12:26,670 --> 00:12:30,010 Vì vậy, 0x, 0, 0, 0, 0, vân vân. 277 00:12:30,010 --> 00:12:35,030 Địa chỉ 0-thứ trong bộ nhớ đó không phải là trong hình ảnh của chúng tôi, mà trên đó 278 00:12:35,030 --> 00:12:38,800 nơi nào đó, đó là dành riêng cho máy tính. 279 00:12:38,800 --> 00:12:40,130 Chúng tôi không được phép chạm vào nó. 280 00:12:40,130 --> 00:12:44,680 >> Vì vậy, khi chương trình của bạn đang thực hiện, nếu một cái gì đó đang cố gắng để đi vào bộ nhớ 281 00:12:44,680 --> 00:12:48,990 địa chỉ 0, nó biết rằng đó là một giá trị rỗng. 282 00:12:48,990 --> 00:12:50,820 Nó không biết gì cần phải có. 283 00:12:50,820 --> 00:12:53,420 Vì vậy, nếu bạn cố gắng và sử dụng một cái gì đó có và điều trị như thế có hay 284 00:12:53,420 --> 00:12:58,355 cố gắng để đi đến vị trí đó, bạn sẽ nhận được một lỗi seg hoặc một lỗi. 285 00:12:58,355 --> 00:13:00,520 Điều đó trả lời câu hỏi của bạn? 286 00:13:00,520 --> 00:13:03,170 >> Và bây giờ chúng tôi sẽ quay trở lại để ngăn xếp tràn. 287 00:13:03,170 --> 00:13:09,560 Những điều trong ngăn xếp, như các bạn có được thấy trước, trong - chúng ta hãy vẽ một gần 288 00:13:09,560 --> 00:13:11,966 lên một khung stack. 289 00:13:11,966 --> 00:13:15,050 Tất cả mọi người có thể nhìn thấy không? 290 00:13:15,050 --> 00:13:16,650 Vì vậy, chúng tôi có khung ngăn xếp của chúng tôi. 291 00:13:16,650 --> 00:13:23,260 Chúng tôi đang tiết kiệm một mảng như là một địa phương biến trong chức năng này. 292 00:13:23,260 --> 00:13:29,510 Vì vậy, nói mảng của chúng tôi có năm điểm. 293 00:13:29,510 --> 00:13:33,230 Tất cả năm của những người sẽ được lưu trữ trong đó stack frame. 294 00:13:33,230 --> 00:13:37,540 >> Nếu chúng ta bắt đầu viết ngoài giới hạn của mảng này - 295 00:13:37,540 --> 00:13:43,990 vì vậy nếu chúng ta bắt đầu viết vào, chúng ta hãy nói rằng đó là 0. 296 00:13:43,990 --> 00:13:46,800 Đó là những năm chỉ số của mảng của chúng tôi. 297 00:13:46,800 --> 00:13:50,980 Nếu chúng ta bắt đầu viết vào chỉ số 5, chúng tôi không có khi chúng ta có một 298 00:13:50,980 --> 00:13:55,900 mảng có kích thước 5, chúng tôi bắt đầu viết vào chỉ số 6, 7, 8, 9, chúng tôi có thể nhận được một Stack 299 00:13:55,900 --> 00:13:57,960 Lỗi tràn. 300 00:13:57,960 --> 00:14:00,510 >> Nói chung nó không phải là - 301 00:14:00,510 --> 00:14:04,910 có thể bạn sẽ gặp rắc rối nếu bạn đi trên một. 302 00:14:04,910 --> 00:14:08,640 Nhưng nói chung, bạn sẽ nhận được vào hầu hết các rắc rối nếu bạn đi qua bởi rất nhiều 303 00:14:08,640 --> 00:14:12,770 và bạn đi xa hơn mà bạn viết trên địa chỉ trở lại đó 304 00:14:12,770 --> 00:14:16,080 chức năng, mà nằm ở dưới cùng của khung stack. 305 00:14:16,080 --> 00:14:16,520 >> Bởi vì, phải không? 306 00:14:16,520 --> 00:14:17,670 Bạn - trong - xin lỗi. 307 00:14:17,670 --> 00:14:18,550 Không "bởi vì ngay." 308 00:14:18,550 --> 00:14:20,470 >> Trong khung ngăn xếp, bạn có biến địa phương của bạn. 309 00:14:20,470 --> 00:14:27,090 Ở dưới cùng của ngăn xếp khung là địa chỉ trở lại. 310 00:14:27,090 --> 00:14:28,790 Đó là nơi mà các chức năng đi khi nó kết thúc. 311 00:14:28,790 --> 00:14:33,750 Và nếu bạn ghi đè lên trở lại mà địa chỉ, sau đó khi stack frame này, 312 00:14:33,750 --> 00:14:36,680 khi bạn đang đi qua các ngăn xếp khung và thực hiện mỗi dòng, bạn 313 00:14:36,680 --> 00:14:40,350 sẽ đi đến địa chỉ mới của bạn trở lại đó là viết có thay vì 314 00:14:40,350 --> 00:14:40,910 một thực tế. 315 00:14:40,910 --> 00:14:45,050 Và đó là cách chúng tôi đã nhìn thấy một số lỗ hổng bảo mật 316 00:14:45,050 --> 00:14:46,780 có thể xảy ra với máy tính. 317 00:14:46,780 --> 00:14:52,760 >> Vì vậy, chồng tràn, trong ngắn hạn, là khi bạn ghi đè lên một phần trong ngăn xếp 318 00:14:52,760 --> 00:14:55,440 bạn đang nghĩ để sử dụng, các địa phương biến bạn đang nghĩ để sử dụng, và 319 00:14:55,440 --> 00:14:58,070 đặc biệt là khi bạn bắt đầu ghi đè lên điều quan trọng như 320 00:14:58,070 --> 00:14:59,100 địa chỉ trở về. 321 00:14:59,100 --> 00:15:00,090 Và đó là nơi bạn sẽ nhận được một lỗi. 322 00:15:00,090 --> 00:15:03,980 Hoặc thậm chí bạn có thể bắt đầu thậm chí bằng văn bản vào - 323 00:15:03,980 --> 00:15:05,370 nói tìm kiếm nhị phân là ngay trên chính. 324 00:15:05,370 --> 00:15:07,790 Nếu bạn ghi đè lên rất nhiều, bạn có thể viết vào chính. 325 00:15:07,790 --> 00:15:10,230 Nhưng nói chung, bạn nhận được một lỗi trước sau đó, bởi vì máy tính biết 326 00:15:10,230 --> 00:15:12,270 bạn đang làm một cái gì đó bạn không nên làm. 327 00:15:12,270 --> 00:15:12,560 Yeah. 328 00:15:12,560 --> 00:15:13,910 >> HỌC SINH: sự khác biệt là gì giữa một chồng tràn 329 00:15:13,910 --> 00:15:16,940 và một lỗi tràn bộ đệm? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: đệm tràn là một loại chung chung hơn của 331 00:15:19,420 --> 00:15:20,395 những gì tôi vừa mô tả. 332 00:15:20,395 --> 00:15:22,610 >> HỌC SINH: Vì vậy, một chồng tràn là một ví dụ về một lỗi tràn bộ đệm. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Chính xác. 334 00:15:23,420 --> 00:15:28,700 Đây là một mảng chúng ta có thể nghĩ như một đệm, một không gian cho những thứ để đi in 335 00:15:28,700 --> 00:15:30,600 Đây là một chồng tràn bộ đệm. 336 00:15:30,600 --> 00:15:33,210 Chúng ta có thể có một lỗi tràn bộ đệm heap. 337 00:15:33,210 --> 00:15:36,870 Nếu có một bộ đệm, mà thường có là một mảng heap, và chúng tôi 338 00:15:36,870 --> 00:15:40,600 ghi đè lên những giới hạn, sau đó chúng tôi sẽ có một lỗi tràn bộ đệm heap. 339 00:15:40,600 --> 00:15:44,870 >> Và vượt ra ngoài phạm vi của khóa học này, họ phát hiện một chút khác nhau. 340 00:15:44,870 --> 00:15:48,040 Trình biên dịch có đặc biệt cách phát hiện mỗi. 341 00:15:48,040 --> 00:15:50,660 Nhưng một lỗi tràn bộ đệm là một chung chung hơn loại những gì tôi mô tả, 342 00:15:50,660 --> 00:15:54,090 đó là một chồng tràn bộ đệm. 343 00:15:54,090 --> 00:15:56,240 Sao mà trả lời câu hỏi của bạn? 344 00:15:56,240 --> 00:15:57,910 Ngọt ngào. 345 00:15:57,910 --> 00:16:01,850 >> Có bất kỳ câu hỏi liên quan khác vào stack hoặc heap? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Yeah. 348 00:16:05,510 --> 00:16:08,220 >> HỌC SINH: Tôi biết bạn phải dây miễn phí bởi vì họ đang ở trong đống 349 00:16:08,220 --> 00:16:09,305 và bạn không muốn bị rò rỉ bộ nhớ. 350 00:16:09,305 --> 00:16:12,240 Nhưng bạn có để giải phóng các biến toàn cầu và các công cụ như vậy? 351 00:16:12,240 --> 00:16:14,335 Hoặc là họ tự động giải phóng? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Câu hỏi. 353 00:16:15,700 --> 00:16:22,340 Vì vậy, trong CS50.H, chúng tôi tạo ra điều này cho bạn gọi là một chuỗi. 354 00:16:22,340 --> 00:16:23,800 Một chuỗi thực sự là gì? 355 00:16:23,800 --> 00:16:24,810 >> HỌC SINH: sao Char. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: Một ngôi sao char, một con trỏ cho một nhân vật, một con trỏ tới 357 00:16:29,180 --> 00:16:30,650 một loạt các ký tự. 358 00:16:30,650 --> 00:16:32,210 Đó là những gì các chuỗi. 359 00:16:32,210 --> 00:16:36,050 Vì vậy, chúng ta cần phải giải phóng nó, bởi vì getString, mà chúng tôi sử dụng rất nhiều - 360 00:16:36,050 --> 00:16:38,370 tên chuỗi bằng getString - 361 00:16:38,370 --> 00:16:43,560 mà mallocs cho chúng tôi một số bộ nhớ trên heap và sau đó trả về một con trỏ đến 362 00:16:43,560 --> 00:16:47,230 ký tự đầu tiên đó chuỗi, một ngôi sao char. 363 00:16:47,230 --> 00:16:52,760 >> Vì vậy, bề ngoài, nếu bạn đã không được văn bản miễn phí trên bất kỳ dây của bạn 364 00:16:52,760 --> 00:16:55,600 mà bạn đã gọi là cho đến nay, bạn có bị rò rỉ một số bộ nhớ. 365 00:16:55,600 --> 00:16:57,430 Tất nhiên chúng tôi đã không nói chuyện về nó, vì vậy không ai nhận trong 366 00:16:57,430 --> 00:16:58,520 khó khăn để làm việc đó. 367 00:16:58,520 --> 00:16:59,980 Nhưng đi về phía trước, có. 368 00:16:59,980 --> 00:17:03,990 Khi bạn gọi getString, bạn mallocing một số không gian trên heap. 369 00:17:03,990 --> 00:17:07,640 Và nếu bạn không gọi miễn phí sau đó chuỗi, bạn có một rò rỉ bộ nhớ. 370 00:17:07,640 --> 00:17:09,440 Mà trả lời câu hỏi của bạn? 371 00:17:09,440 --> 00:17:10,606 >> Vâng 372 00:17:10,606 --> 00:17:15,020 >> HỌC SINH: Vì vậy, để làm được điều đó, chúng ta sử dụng miễn phí ngay trước khi trở lại? 373 00:17:15,020 --> 00:17:18,510 Như, trong phạm vi, tôi đoán nếu chúng ta nói, như, int chính, trong 374 00:17:18,510 --> 00:17:24,410 phạm vi của mã đó là trong những dấu ngoặc nhọn, ngay trước - 375 00:17:24,410 --> 00:17:26,140 bạn biết nơi bạn muốn thường được đặt trở lại. 376 00:17:26,140 --> 00:17:27,950 Bạn có đặt miễn phí trước đó? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Vì vậy, bạn có thể đặt miễn phí bất cứ nơi nào bạn muốn đặt miễn phí. 378 00:17:31,000 --> 00:17:33,810 Bởi vì chúng được phân phối tự động biến, bởi vì họ có thể 379 00:17:33,810 --> 00:17:39,170 sống ngoài phạm vi của một đặc biệt chức năng, nếu bạn gọi malloc trong một 380 00:17:39,170 --> 00:17:44,140 chức năng riêng biệt, ví dụ, getString, bạn có thể gọi miễn phí trong chính. 381 00:17:44,140 --> 00:17:46,050 Bạn không cần phải gọi nó trong các chức năng cụ thể 382 00:17:46,050 --> 00:17:47,570 nơi malloc được gọi. 383 00:17:47,570 --> 00:17:50,340 Nhưng bạn cần phải gọi nó trước khi trở về chính. 384 00:17:50,340 --> 00:17:51,120 >> Và nó thực sự phụ thuộc. 385 00:17:51,120 --> 00:17:54,960 Nó phụ thuộc vào lý do tại sao bạn malloced mà không gian ở nơi đầu tiên. 386 00:17:54,960 --> 00:17:57,320 Một số người sẽ gọi giải phóng khá nhanh chóng. 387 00:17:57,320 --> 00:17:59,220 Một số người sẽ không gọi miễn phí cho đến khi kết thúc chương trình của họ. 388 00:17:59,220 --> 00:18:00,660 Và họ sẽ đi qua và tất cả mọi thứ miễn phí. 389 00:18:00,660 --> 00:18:03,597 Nó phụ thuộc vào lý do tại sao bạn gọi malloc. 390 00:18:03,597 --> 00:18:11,270 >> HỌC SINH: Và bạn sẽ nói gì nếu bạn sử dụng được gọi là getString? 391 00:18:11,270 --> 00:18:13,320 Bạn muốn nói gì miễn phí? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Vì vậy, cú pháp miễn phí chỉ đơn giản là miễn phí, dấu ngoặc mở, đóng 393 00:18:20,040 --> 00:18:22,130 Dấu ngoặc đơn, và tên của con trỏ. 394 00:18:22,130 --> 00:18:26,410 Vì vậy, nếu bạn viết tên chuỗi bình đẳng getString, bạn đặt tên ở đây. 395 00:18:26,410 --> 00:18:27,760 Đó là tên của con trỏ. 396 00:18:27,760 --> 00:18:30,570 Và nó biết để giải phóng bộ nhớ. 397 00:18:30,570 --> 00:18:33,920 >> HỌC SINH: Vì vậy, khi nó giải phóng bộ nhớ rằng, con trỏ vẫn còn chỉ tới nơi 398 00:18:33,920 --> 00:18:34,970 trong bộ nhớ? 399 00:18:34,970 --> 00:18:39,020 Hoặc là con trỏ cũng làm trống của địa chỉ mà nó trỏ tới. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Chúng ta nên cố gắng đó. 401 00:18:40,290 --> 00:18:41,430 Chúng ta nên mã đó. 402 00:18:41,430 --> 00:18:43,880 Chúng ta hãy trở lại khi chúng tôi nhận được mã hóa, và chúng ta hãy mã đó. 403 00:18:43,880 --> 00:18:46,000 Và nếu bạn muốn tìm ra câu trả lời vào đó, bạn cũng có thể mã 404 00:18:46,000 --> 00:18:46,690 trong khi chờ đợi. 405 00:18:46,690 --> 00:18:49,100 Nhưng đó là một câu hỏi lớn. 406 00:18:49,100 --> 00:18:53,480 >> HỌC SINH: Có thể một cái gì đó miễn phí quá sớm? 407 00:18:53,480 --> 00:18:58,530 Vì vậy, bạn vẫn cần nó cho chương trình của bạn, và bạn giải phóng không gian bộ nhớ? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Có. 409 00:18:59,200 --> 00:19:03,020 Có thể, nếu bạn miễn phí một cái gì đó và sau đó bạn sử dụng nó một lần nữa, bạn sẽ 410 00:19:03,020 --> 00:19:06,890 chạy vào một lỗi. 411 00:19:06,890 --> 00:19:10,810 Nhưng đó là vào bạn, bởi vì bạn giải phóng một cái gì đó và sau đó gọi nó sau này. 412 00:19:10,810 --> 00:19:13,940 Vì vậy, đó là sai lầm của một lập trình viên. 413 00:19:13,940 --> 00:19:14,780 Nhưng có. 414 00:19:14,780 --> 00:19:17,760 Bạn có thể viết đó. 415 00:19:17,760 --> 00:19:19,240 >> Bất kỳ câu hỏi thêm về - 416 00:19:19,240 --> 00:19:19,760 Vâng. 417 00:19:19,760 --> 00:19:22,820 >> HỌC SINH: Vì vậy, nếu bạn có nghĩa vụ phải chỉ giải phóng nó nói chung trước khi 418 00:19:22,820 --> 00:19:25,490 chương trình kết thúc, không có nghĩa nếu chương trình kết thúc và bạn không giải phóng nó, 419 00:19:25,490 --> 00:19:27,580 bộ nhớ vẫn được giao? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Nếu chương trình của bạn kết thúc và bạn quên để giải phóng một cái gì đó, sau đó 421 00:19:31,330 --> 00:19:34,390 bộ nhớ đã được phân bổ trong suốt tuổi thọ của chương trình của bạn. 422 00:19:34,390 --> 00:19:37,670 Khi chương trình của bạn đóng cửa hoàn toàn, bộ nhớ được không 423 00:19:37,670 --> 00:19:39,490 ở lại đó mãi mãi. 424 00:19:39,490 --> 00:19:42,080 Máy tính là đủ thông minh để biết khi chương trình đóng lại, nó 425 00:19:42,080 --> 00:19:46,440 nên loại bỏ tất cả các bộ nhớ được kết hợp với chương trình đó. 426 00:19:46,440 --> 00:19:51,240 >> Tuy nhiên, có những công cụ bạn có thể chạy trên một chương trình để phát hiện nếu, khi 427 00:19:51,240 --> 00:19:54,720 chương trình kết thúc, bạn quên để giải phóng một số bộ nhớ. 428 00:19:54,720 --> 00:19:57,960 Và cho vấn đề tiếp theo của bạn thiết lập nơi bạn sẽ được sử dụng malloc và sử dụng 429 00:19:57,960 --> 00:20:02,610 con trỏ, bạn sẽ được chạy này chương trình trên chương trình của bạn để xem, 430 00:20:02,610 --> 00:20:06,530 khi lợi nhuận chính, bạn đã có một số thứ còn sót lại unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Vì vậy, họ sẽ không ở lại malloced mãi mãi trong máy tính của bạn. 432 00:20:09,130 --> 00:20:11,720 Đó sẽ là lãng phí, bởi vì rất nhanh chóng, máy tính 433 00:20:11,720 --> 00:20:12,960 sẽ chạy ra khỏi bộ nhớ. 434 00:20:12,960 --> 00:20:16,450 Nhưng nếu họ chạy đến khi kết thúc của bạn chương trình và họ không giải phóng và của bạn 435 00:20:16,450 --> 00:20:20,260 chương trình thoát, đó vẫn là một vấn đề rằng công cụ này sẽ giúp bạn giải quyết. 436 00:20:20,260 --> 00:20:21,520 >> HỌC SINH: Có phải đó là Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Đó là gọi là Valgrind. 438 00:20:22,910 --> 00:20:23,520 Và bạn sẽ có - 439 00:20:23,520 --> 00:20:25,780 >> HỌC SINH: Nhưng chúng ta không cần phải biết rằng đối với các bài kiểm tra, mặc dù? 440 00:20:25,780 --> 00:20:27,600 Ý tôi là, nó đã được nói về một chút trong bài giảng. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Vì vậy, Valgrind là tên của công cụ đó. 442 00:20:33,600 --> 00:20:37,180 Hiểu biết những gì nó làm là đủ cho các bài kiểm tra. 443 00:20:37,180 --> 00:20:40,200 Nhưng bạn đã không sử dụng nó chưa về bạn vấn đề thiết lập bởi vì chúng tôi đã không có một 444 00:20:40,200 --> 00:20:43,520 vấn đề thiết lập đó đã bị xử lý một cách rõ ràng với malloc hoặc bạn sử dụng malloc. 445 00:20:43,520 --> 00:20:45,330 Vì vậy, bạn đã không sử dụng Valgrind được nêu ra. 446 00:20:45,330 --> 00:20:47,760 Nhưng bạn sẽ sử dụng nó sớm hơn hơn là sau này. 447 00:20:47,760 --> 00:20:48,710 >> HỌC SINH: Bạn có thể lặp lại những gì Valgrind là? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Xin lỗi? 449 00:20:49,190 --> 00:20:51,240 >> HỌC SINH: Bạn có thể lặp lại những gì mục đích của Valgring là? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind là tên - 451 00:20:53,100 --> 00:20:59,890 như GDB giúp bạn gỡ lỗi chương trình của bạn, Valgrind giúp bạn tìm ra nếu 452 00:20:59,890 --> 00:21:03,210 mọi thứ đã không được trả tự do khi chương trình của bạn đóng cửa. 453 00:21:03,210 --> 00:21:05,110 Vì vậy, bạn sẽ chạy nó trên chương trình của bạn. 454 00:21:05,110 --> 00:21:09,230 Và chương trình của bạn thoát ra, và nó sẽ nói chương trình của bạn được gọi là malloc này nhiều 455 00:21:09,230 --> 00:21:13,670 lần này nhiều byte, và bạn chỉ được gọi miễn phí này nhiều lần. 456 00:21:13,670 --> 00:21:16,520 Và do đó bạn để lại những nhiều byte mà không được giải thoát. 457 00:21:16,520 --> 00:21:18,050 Hoặc nó sẽ nói rằng bạn đã giải thoát tất cả mọi thứ. 458 00:21:18,050 --> 00:21:19,070 Tốt công việc. 459 00:21:19,070 --> 00:21:19,480 >> HỌC SINH: OK. 460 00:21:19,480 --> 00:21:21,060 Và nó được gọi là Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> HỌC SINH: Một câu hỏi về con trỏ. 463 00:21:25,970 --> 00:21:30,080 Vì vậy, nói rằng bạn đã sao n x bằng một cái gì đó. 464 00:21:30,080 --> 00:21:33,330 Mà bằng, bất cứ điều gì bạn đang đặt có, đó là những gì đang được đặt bên trong 465 00:21:33,330 --> 00:21:36,120 những gì x được trỏ đến, hoặc con trỏ của x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Có thể bạn nhắc lại câu hỏi? 467 00:21:37,690 --> 00:21:39,340 Chúng ta có thể rút ra nó trong khi bạn nói không? 468 00:21:39,340 --> 00:21:42,710 >> HỌC SINH: Trong các bài kiểm tra, trên thực tế, một trong những bạn gửi cho chúng tôi, nó giống như, char 469 00:21:42,710 --> 00:21:46,520 sao sự thật bằng đá CS50, phải không? 470 00:21:46,520 --> 00:21:52,190 Vì vậy, không có nghĩa là có đá CS50 là những gì sự thật là chỉ tới? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Vì vậy, bạn đang nói về một ngôi sao char trong một chuỗi, làm thế nào 472 00:21:55,810 --> 00:21:56,460 mà làm việc? 473 00:21:56,460 --> 00:21:56,890 Yeah. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Chúng ta hãy vẽ này ở đây. 476 00:21:59,140 --> 00:22:07,100 >> [Phụ Conversation] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Vì vậy, biến này là có được kiểu char sao. 478 00:22:11,130 --> 00:22:14,580 Làm thế nào lớn là một biến kiểu char sao? 479 00:22:14,580 --> 00:22:15,510 Bao nhiêu byte? 480 00:22:15,510 --> 00:22:16,450 >> SINH VIÊN: Bốn. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Đó là bốn byte. 482 00:22:18,210 --> 00:22:21,420 Bao nhiêu quyền là một biến kiểu int sao? 483 00:22:21,420 --> 00:22:22,210 >> SINH VIÊN: Bốn. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Bốn byte. 485 00:22:24,910 --> 00:22:28,280 Nếu đó là một con trỏ, sau đó nó luôn luôn là bốn byte, bởi vì con trỏ, họ 486 00:22:28,280 --> 00:22:30,070 giá trị là một địa chỉ bộ nhớ. 487 00:22:30,070 --> 00:22:35,160 Và địa chỉ bộ nhớ trên CS50 thiết bị dài bốn byte. 488 00:22:35,160 --> 00:22:42,900 Vì vậy, khi chúng ta gọi là getString, hoặc khi chúng ta nói, stringname bằng, và sau đó trong 489 00:22:42,900 --> 00:22:46,140 dấu ngoặc kép đặt một chuỗi, chúng tôi đang đặt - 490 00:22:46,140 --> 00:22:46,920 tốt, đó là một chút khác nhau. 491 00:22:46,920 --> 00:22:48,630 Chúng tôi sẽ làm getString làm ví dụ. 492 00:22:48,630 --> 00:22:52,150 Hoặc char sao một cái gì đó bằng chuỗi. 493 00:22:52,150 --> 00:22:54,360 Xin lỗi, cho tôi ví dụ bạn đọc? 494 00:22:54,360 --> 00:22:57,590 >> HỌC SINH: char thật sao bằng "Đá CS50" trong dấu ngoặc kép. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Vì vậy, ngôi sao này, điều này chúng tôi sẽ gọi biến này x cho chúng tôi 496 00:23:02,260 --> 00:23:04,060 mục đích chung. 497 00:23:04,060 --> 00:23:05,970 Chúng tôi đã tạo một biến gọi là x. 498 00:23:05,970 --> 00:23:07,610 Đó là kiểu char sao. 499 00:23:07,610 --> 00:23:10,950 Nó là một con trỏ đến một loạt của các nhân vật. 500 00:23:10,950 --> 00:23:12,200 Vì vậy, ở đây - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Vì vậy, đây là cách điều này sẽ làm việc trong bộ nhớ. 503 00:23:25,890 --> 00:23:27,410 Điều này sẽ lưu trữ một địa chỉ bộ nhớ. 504 00:23:27,410 --> 00:23:31,770 Nó sẽ lưu trữ các địa chỉ bộ nhớ của ký tự đầu tiên trong mảng. 505 00:23:31,770 --> 00:23:33,830 Và sau đó khi bạn tiếp con trỏ, bạn sẽ 506 00:23:33,830 --> 00:23:35,200 có ký tự đầu tiên. 507 00:23:35,200 --> 00:23:38,780 >> Và nếu bạn đang đọc điều này như một chuỗi, máy tính của bạn là thông minh 508 00:23:38,780 --> 00:23:42,930 đủ để biết, đọc toàn bộ điều này cho đến khi nó được đến một phản ứng dữ dội 0. 509 00:23:42,930 --> 00:23:45,530 Nhưng nếu bạn đang đọc nó một ký tự tại một thời gian, vì vậy bạn lặp lại thông qua 510 00:23:45,530 --> 00:23:49,910 chuỗi này, sau đó bạn sẽ chỉ cần đọc một nhân vật tại một thời gian cho đến khi bạn nhận được để 511 00:23:49,910 --> 00:23:50,850 dấu gạch chéo ngược 0. 512 00:23:50,850 --> 00:23:52,335 Điều đó có thể không trả lời của bạn câu hỏi, mặc dù. 513 00:23:52,335 --> 00:23:55,610 >> HỌC SINH: Vâng, nhưng bạn phải không malloced không gian 514 00:23:55,610 --> 00:23:58,400 nào cho con trỏ đó. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Vì vậy, tôi không khá chắc chắn chính xác những gì bạn đang tìm kiếm, 516 00:24:02,510 --> 00:24:03,640 bởi vì tôi đã không làm bài kiểm tra đó. 517 00:24:03,640 --> 00:24:06,370 Lẽ ra phải là một hữu ích tài nguyên từ TF khác. 518 00:24:06,370 --> 00:24:11,380 Nếu bạn đang tạo một chuỗi trên chồng hoặc là một biến địa phương, nó sẽ 519 00:24:11,380 --> 00:24:16,920 chỉ là mảng phí hơn nói chung là một ngôi sao char trỏ đến 520 00:24:16,920 --> 00:24:18,600 một chuỗi. 521 00:24:18,600 --> 00:24:20,550 Nhưng tôi không biết. 522 00:24:20,550 --> 00:24:25,065 Đó có thể là một con trỏ đến một chuỗi trên stack là tốt. 523 00:24:25,065 --> 00:24:27,240 Yeah. 524 00:24:27,240 --> 00:24:31,116 >> HỌC SINH: Tôi biết rằng bạn cần phải cấp phát bộ nhớ nếu con trỏ 525 00:24:31,116 --> 00:24:33,360 việc khai báo trong chức năng khác. 526 00:24:33,360 --> 00:24:36,740 Bạn cần phải làm điều tương tự nếu nó bị tuyên bố bên trong chính, 527 00:24:36,740 --> 00:24:39,570 bạn đang sử dụng nó bên trong chính? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Vì vậy, có. 529 00:24:43,590 --> 00:24:46,670 Bạn có thể khai báo một con trỏ đến bất kỳ địa chỉ bộ nhớ trong bộ nhớ. 530 00:24:46,670 --> 00:24:51,440 Nó có thể là địa chỉ bộ nhớ của một địa phương biến, mặc dù đôi khi, 531 00:24:51,440 --> 00:24:55,760 người không khai báo địa chỉ bộ nhớ để biến địa phương vì họ đi 532 00:24:55,760 --> 00:24:59,890 lập tức một khi hàm trả về, mà là lý do tại sao chúng ta thường malloc điều. 533 00:24:59,890 --> 00:25:04,630 Nhưng có, bạn có thể khai báo một con trỏ để một biến địa phương. 534 00:25:04,630 --> 00:25:06,360 Nó chỉ nói chung không được thực hiện. 535 00:25:06,360 --> 00:25:09,480 Nhưng tôi có thể có một cái nhìn ở đó điều cụ thể sau giờ học. 536 00:25:09,480 --> 00:25:10,650 Yeah. 537 00:25:10,650 --> 00:25:12,350 >> HỌC SINH: Tôi nghĩ rằng đây là loại của những gì được yêu cầu. 538 00:25:12,350 --> 00:25:16,930 Nó không có vẻ kỳ lạ được khởi tạo một con trỏ không phải là một 539 00:25:16,930 --> 00:25:20,760 địa chỉ, nhưng như những gì có vẻ như một giá trị. 540 00:25:20,760 --> 00:25:25,970 Nó có vẻ như CS50 là những gì bên trong điều được chỉ ra và 541 00:25:25,970 --> 00:25:28,820 không phải là địa chỉ thực tế, phải không? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Vì vậy, đó là không phải là trường hợp, mặc dù. 543 00:25:30,520 --> 00:25:32,470 Đó không phải là những gì đang xảy ra. 544 00:25:32,470 --> 00:25:35,910 Khi bạn khai báo một ngôi sao char, đó là một địa chỉ bộ nhớ. 545 00:25:35,910 --> 00:25:38,860 Con trỏ là tất cả các địa chỉ bộ nhớ chỉ vào cái gì khác. 546 00:25:38,860 --> 00:25:41,480 Rằng cái gì khác có thể là trên ngăn xếp, nhưng hầu như luôn luôn là trên 547 00:25:41,480 --> 00:25:43,440 heap trong cách chúng ta sẽ thấy nó được sử dụng. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Nhưng stringname bằng hai trích dẫn "GetString," chúng ta có thể thấy rằng chúng tôi 550 00:25:53,500 --> 00:25:55,010 có thể xem xét thông qua đó và mã đó. 551 00:25:55,010 --> 00:26:01,190 getString chuỗi không được lưu trong rằng biến, hoặc bất cứ chuỗi 552 00:26:01,190 --> 00:26:04,580 tên là không được lưu trong đó biến, bởi vì đó không phải là cách 553 00:26:04,580 --> 00:26:06,070 con trỏ làm việc. 554 00:26:06,070 --> 00:26:06,770 Điều đó có ý nghĩa? 555 00:26:06,770 --> 00:26:07,170 >> HỌC SINH: Vâng. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Hy vọng rằng, đó không phải là gây nhầm lẫn với bất cứ ai. 558 00:26:11,690 --> 00:26:15,732 Nhưng nếu nó là, chúng ta có thể nhìn vào nó một lần nữa trong một chút, bởi vì chúng tôi thực sự đi 559 00:26:15,732 --> 00:26:19,240 mã cái gì đó sẽ hy vọng làm việc với chuỗi và giúp bạn cảm thấy 560 00:26:19,240 --> 00:26:22,170 thoải mái hơn với họ. 561 00:26:22,170 --> 00:26:24,869 >> Bất kỳ câu hỏi khác liên quan đến các chủ đề hoặc các chủ đề khác 562 00:26:24,869 --> 00:26:26,119 Tôi sẽ đưa trở lại? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Và - 565 00:26:34,840 --> 00:26:36,310 ngay bây giờ. 566 00:26:36,310 --> 00:26:37,630 Có, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Vì vậy, đây là hoàn toàn không liên quan, nhưng chúng ta có thể chỉ cần đi qua 568 00:26:39,860 --> 00:26:42,760 thực sự một cách nhanh chóng những gì chúng ta cần biết về sự khác biệt giữa 32 và 569 00:26:42,760 --> 00:26:46,345 64-bit máy? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Có. 571 00:26:47,740 --> 00:26:52,111 Vì vậy, 32 bit là bao nhiêu byte? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Đó là bốn byte. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Đó là bốn byte. 574 00:26:54,360 --> 00:26:58,420 Và 64 bit là bao nhiêu byte? 575 00:26:58,420 --> 00:26:59,112 >> HỌC SINH: Tám. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Tám byte. 577 00:27:00,610 --> 00:27:03,980 Vì vậy, một lần nữa, tám bit là một byte. 578 00:27:03,980 --> 00:27:08,340 Thiết bị của bạn là CS50 một máy 32-bit. 579 00:27:08,340 --> 00:27:13,650 Vì vậy, địa chỉ bộ nhớ dài bốn byte. 580 00:27:13,650 --> 00:27:17,460 Có 2 đến 32 địa chỉ bộ nhớ. 581 00:27:17,460 --> 00:27:21,310 0-2 đến 32 trừ đi 1. 582 00:27:21,310 --> 00:27:27,630 Và tôi không tích cực, nhưng đó là có lẽ là phạm vi những gì bạn cần 583 00:27:27,630 --> 00:27:35,230 biết một máy 32-bit, bộ nhớ rằng địa chỉ là, một lần nữa, dài bốn byte, 584 00:27:35,230 --> 00:27:39,620 và đó là số tiền tối đa địa chỉ bộ nhớ. 585 00:27:39,620 --> 00:27:41,680 >> Ngoài ra, các kiểu dữ liệu - 586 00:27:41,680 --> 00:27:45,020 này có thể là một cái gì đó như đó cũng là đáng chú ý. 587 00:27:45,020 --> 00:27:49,610 Kích thước của một kiểu dữ liệu phụ thuộc vào máy bạn đang làm việc với. 588 00:27:49,610 --> 00:27:56,760 Vì vậy, một char, một nhân vật duy nhất, là làm thế nào nhiều byte trên thiết bị CS50 của chúng tôi? 589 00:27:56,760 --> 00:27:57,980 Một byte. 590 00:27:57,980 --> 00:28:02,310 Và nó thực sự là một byte như cũng trên một máy 64-bit. 591 00:28:02,310 --> 00:28:05,920 >> Và hầu hết các loại dữ liệu cùng một số của byte trên cả hai máy. 592 00:28:05,920 --> 00:28:11,620 Nhưng một số loại dữ liệu sẽ khác nhau trên cả hai máy. 593 00:28:11,620 --> 00:28:14,590 Vì vậy, đó sẽ là khả năng các Điều duy nhất bạn cần biết. 594 00:28:14,590 --> 00:28:16,710 >> Nhưng ngay cả điều đó, tôi nghĩ rằng, vượt quá giới hạn - 595 00:28:16,710 --> 00:28:20,990 Tôi gần như tích cực, nếu bạn nhìn lại tại các câu đố cũ, nó nói, giả sử cho 596 00:28:20,990 --> 00:28:24,090 mã hóa các vấn đề bạn đang sử dụng một máy 32-bit. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Nhưng có, để đi cùng với năm trường hợp bạn đang quan tâm, có 599 00:28:30,620 --> 00:28:35,920 các kiểu dữ liệu đó là như nhau kích thước trên tất cả các máy. 600 00:28:35,920 --> 00:28:42,670 >> Nếu bạn đã nhìn thấy một cái gì đó như uint32_t, bạn có thể hoặc có thể 601 00:28:42,670 --> 00:28:43,260 không đã thấy rằng. 602 00:28:43,260 --> 00:28:44,290 Đó là một kiểu dữ liệu. 603 00:28:44,290 --> 00:28:47,570 Đó là nói, là 32 bit không có vấn đề những gì máy tính này trên. 604 00:28:47,570 --> 00:28:50,350 Vì vậy, khi mọi người đang viết di động mã, họ có thể sẽ không sử dụng số nguyên. 605 00:28:50,350 --> 00:28:53,260 Thay vào đó họ sẽ sử dụng các dữ liệu khác loại mà họ biết sẽ là như nhau 606 00:28:53,260 --> 00:28:54,780 kích thước trên mỗi máy tính duy nhất. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Tôi có một câu hỏi về quá trình biên dịch. 610 00:29:00,150 --> 00:29:04,110 Vì vậy, nếu bạn đang viết một chương trình sử dụng một thư viện như CS50 hoặc một cái gì đó 611 00:29:04,110 --> 00:29:06,840 như thế, tôi biết rằng thư viện đã đến, tại một số điểm, được 612 00:29:06,840 --> 00:29:08,590 biên soạn và liên kết nhập 613 00:29:08,590 --> 00:29:13,380 Nhưng bao nhiêu đó xảy ra trong quá trình việc biên soạn chương trình của bạn? 614 00:29:13,380 --> 00:29:15,880 Một phần những gì của quá trình thư viện xảy ra khi bạn 615 00:29:15,880 --> 00:29:18,560 biên soạn chương trình riêng của bạn? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Vì vậy, hãy đi qua nói chung các bước của quá trình này. 617 00:29:24,020 --> 00:29:26,280 Bạn ghi file c của bạn.. 618 00:29:26,280 --> 00:29:33,530 Trong tập tin c của bạn., Bạn # bao gồm của bạn thư viện tiêu đề, ví dụ, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Những gì hiện có bao gồm sắc nét dòng làm gì để chương trình của bạn? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Nó cho biết thêm các nguyên mẫu của các chức năng từ tiêu đề 622 00:29:43,350 --> 00:29:45,120 các tập tin trong thư viện. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Chính xác. 624 00:29:45,600 --> 00:29:49,870 Nó cho biết thêm những nguyên mẫu chức năng mã của bạn. 625 00:29:49,870 --> 00:29:55,230 Vì vậy, khi mã của bạn đang được biên soạn trong giai đoạn đầu, trình biên dịch biết 626 00:29:55,230 --> 00:29:59,250 rằng các chức năng này thực sự tồn tại, và một nơi nào đó họ đã được xác định. 627 00:29:59,250 --> 00:30:02,460 Các tập tin. H không bao gồm định nghĩa cho các chức năng này hoặc làm thế nào 628 00:30:02,460 --> 00:30:03,950 họ thực sự làm việc. 629 00:30:03,950 --> 00:30:07,960 Cs50.h chỉ bao gồm cái gì mà nói getString là một điều thực sự mà 630 00:30:07,960 --> 00:30:09,270 có thể xảy ra. 631 00:30:09,270 --> 00:30:14,240 Và standardio.h nói printf là một điều thực sự có thể xảy ra. 632 00:30:14,240 --> 00:30:23,190 >> Vì vậy, tiêu đề ngôn ngữ c của bạn với điều này. tập tin được biến thành một số 633 00:30:23,190 --> 00:30:27,750 mã máy có thể đọc được, mà cuối cùng được chuyển thành nhị phân 634 00:30:27,750 --> 00:30:30,030 mã, 0 và 1. 635 00:30:30,030 --> 00:30:33,590 Và đó là mã cuối cùng được thực hiện. 636 00:30:33,590 --> 00:30:38,550 -L dòng CS50 - ví dụ, khi bạn đang viết Clang - 637 00:30:38,550 --> 00:30:41,830 và sau đó bạn có-l CS50, bạn gõ mà in 638 00:30:41,830 --> 00:30:42,180 Và bạn thấy điều đó. 639 00:30:42,180 --> 00:30:43,890 Khi bạn viết thực hiện, bạn sẽ thấy dòng lên đây. 640 00:30:43,890 --> 00:30:47,740 Và chúng ta sẽ thấy rằng trong một giây khi chúng tôi mã hoặc sau này khi chúng tôi mã. 641 00:30:47,740 --> 00:30:50,390 >> Nhưng điều đó-l dòng CS50 làm điều gì đó một chút khác biệt so với 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Không dòng-l CS50 làm những gì? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Tôi muốn nói rằng nó liên kết thư viện với chức năng 646 00:31:00,310 --> 00:31:02,710 gọi, như o tập tin.. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Vì vậy, rất gần, nếu không tại chỗ trên. 648 00:31:08,200 --> 00:31:16,220 -L CS50 có các tập tin nhị phân và kết hợp nó với tập tin nhị phân của bạn. 649 00:31:16,220 --> 00:31:21,410 Vì vậy, cs50.h, không có điểm trong chuyển cs50.h từ ngôn ngữ C để nhị phân mỗi 650 00:31:21,410 --> 00:31:23,130 lần duy nhất nó đang được sử dụng. 651 00:31:23,130 --> 00:31:26,650 Đó sẽ là ngớ ngẩn, bởi vì đó sẽ lãng phí rất nhiều thời gian. 652 00:31:26,650 --> 00:31:30,420 Vì vậy, nó đã được biên dịch và trở thành một thực thi. 653 00:31:30,420 --> 00:31:35,430 Và bây giờ nó sẽ được sáp nhập với các tập tin của bạn ở cuối. 654 00:31:35,430 --> 00:31:38,370 Vì vậy, những của 1 và 0 sẽ kết hợp với những người thân của bạn 655 00:31:38,370 --> 00:31:39,150 và 0 ở cuối. 656 00:31:39,150 --> 00:31:43,670 Vì vậy, bây giờ bạn sẽ thực sự có thực tế 1 và 0 của xác định cách thức getString, 657 00:31:43,670 --> 00:31:47,890 Ví dụ, công trình, hoặc làm thế nào printf, Ví dụ, các công trình. 658 00:31:47,890 --> 00:31:52,750 >> Và cho biết thêm thông tin, có một trình biên dịch ngắn Nate cho rằng 659 00:31:52,750 --> 00:31:55,410 bạn nên kiểm tra mà đi thông qua các bước sau. 660 00:31:55,410 --> 00:31:56,050 Nhưng - 661 00:31:56,050 --> 00:31:56,560 Vâng. 662 00:31:56,560 --> 00:32:01,700 >> HỌC SINH: Họ luôn luôn trong o tập tin. khi họ đang ở trong hình thức thư viện, 663 00:32:01,700 --> 00:32:06,764 sẵn sàng để được sáp nhập, liên kết - như họ đang ở trong mã nhị phân? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Những gì - 666 00:32:08,420 --> 00:32:11,780 >> HỌC SINH: Đó có phải là luôn luôn như vậy cho các thư viện khi bạn liên kết họ? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Có. 668 00:32:12,500 --> 00:32:17,300 Do đó các tập tin, mà sẽ được là. S mã máy, mà cũng sẽ có 669 00:32:17,300 --> 00:32:17,975 khó hiểu cho bạn. 670 00:32:17,975 --> 00:32:19,410 Bạn không cần phải lo lắng về những người. 671 00:32:19,410 --> 00:32:24,930 Nhưng nói chung, yeah, họ sẽ được. o tập tin sẵn sàng để đi. 672 00:32:24,930 --> 00:32:27,170 >> HỌC SINH: Vì vậy, khi bạn gửi đến một thư viện, bạn chỉ tàu 673 00:32:27,170 --> 00:32:28,880 h. và o.? 674 00:32:28,880 --> 00:32:32,210 Bạn không tàu c hay. S.. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: Vì vậy, - 676 00:32:33,070 --> 00:32:36,260 và điều này là trong ngắn hạn này là tốt, nếu thông tin này có vẻ là đến một 677 00:32:36,260 --> 00:32:36,700 ít một cách nhanh chóng. 678 00:32:36,700 --> 00:32:39,870 Nhưng ngắn trên các trình biên dịch các cuộc đàm phán về điều này là tốt. 679 00:32:39,870 --> 00:32:43,290 Khi bạn gửi một thư viện, nếu bạn tàu h., tập tin tiêu đề, những 680 00:32:43,290 --> 00:32:46,290 nguyên mẫu chức năng, và 1 và 0, đó là tất cả các bạn cần phải cung cấp. 681 00:32:46,290 --> 00:32:50,640 Bạn không cần phải cung cấp như thế nào chức năng hoạt động, các tập tin c.. 682 00:32:50,640 --> 00:32:56,360 Vì điểm trừu tượng, hoặc chỉ API, điểm tại SPL này, 683 00:32:56,360 --> 00:32:59,650 thư viện di động Stanford, đó là để bạn có thể không lo lắng về việc làm thế nào mới 684 00:32:59,650 --> 00:33:04,220 GRect hoạt động, hoặc làm thế nào di chuyển các công trình, hoặc làm thế nào thêm các công trình. 685 00:33:04,220 --> 00:33:06,520 Tất cả các bạn cần biết là add mà là một chức năng mà bạn có thể 686 00:33:06,520 --> 00:33:08,880 sử dụng, và nó thực hiện điều này. 687 00:33:08,880 --> 00:33:12,760 Vì vậy, bạn thực sự không cần phải biết làm thế nào nó được viết bằng C. Bạn chỉ cần 688 00:33:12,760 --> 00:33:15,460 biết, đây là các chức năng, những gì họ làm, và đây là của 1 và 0 689 00:33:15,460 --> 00:33:18,870 khi bạn thực sự muốn sử dụng chúng. 690 00:33:18,870 --> 00:33:19,530 >> Mát mẻ. 691 00:33:19,530 --> 00:33:26,980 Bất kỳ câu hỏi thêm về các trình biên dịch hoặc các chủ đề khác trên diễn đàn? 692 00:33:26,980 --> 00:33:30,300 >> HỌC SINH: Tôi có một câu hỏi thực hiện chức năng đệ quy. 693 00:33:30,300 --> 00:33:31,170 Một câu hỏi về đệ quy. 694 00:33:31,170 --> 00:33:33,030 Tôi có cảm giác rằng sẽ đi lên. 695 00:33:33,030 --> 00:33:38,310 Vì vậy, hãy nhanh chóng đi qua đệ quy với một cụ thể 696 00:33:38,310 --> 00:33:40,690 Ví dụ, một chức năng thừa. 697 00:33:40,690 --> 00:33:44,920 Bởi vì đây là một ví dụ thường đi kèm hoặc được sử dụng 698 00:33:44,920 --> 00:33:46,170 để minh họa cho đệ quy. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Vì vậy, "4!" được đọc như 4 thừa. 701 00:33:56,410 --> 00:33:59,120 Và những gì 4 thừa nghĩa là gì? 702 00:33:59,120 --> 00:34:00,696 Điều đó làm những gì? 703 00:34:00,696 --> 00:34:02,235 Làm thế nào để bạn tính toán 4 thừa? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 lần 3 lần 2 lần 1. 706 00:34:07,960 --> 00:34:11,889 >> Vì vậy, một cách khác để viết 4 thừa là viết này. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 lần 3 thừa. 709 00:34:19,022 --> 00:34:22,080 Vì 3 nhân tố là 3 lần 2 lần 1. 710 00:34:22,080 --> 00:34:27,580 Vì vậy, 4 lần 3 thừa là 4 lần 3 lần 2 lần 1. 711 00:34:27,580 --> 00:34:32,679 Đây là lý do tại sao thừa là một tuyệt vời ứng cử viên cho đệ quy, bởi vì nó 712 00:34:32,679 --> 00:34:36,630 rõ ràng là có cái gì đó xảy ra hơn và hơn và hơn trên một 713 00:34:36,630 --> 00:34:39,820 số lượng nhỏ hơn những thứ cho đến khi bạn đạt được kết thúc. 714 00:34:39,820 --> 00:34:42,570 Khi bạn đạt đến 1, 1 thừa là 1. 715 00:34:42,570 --> 00:34:43,719 Bạn không thể đi xa hơn nhiều. 716 00:34:43,719 --> 00:34:47,219 0 thừa cũng được định nghĩa là 1. 717 00:34:47,219 --> 00:34:50,679 Vì vậy, khi bạn nhận được 1 hoặc 0, bạn lúc kết thúc, và bạn có thể 718 00:34:50,679 --> 00:34:53,219 bắt đầu đi trở lại. 719 00:34:53,219 --> 00:34:59,540 Vì vậy, nếu chúng ta muốn viết một đệ quy chức năng để tính toán một thừa, 720 00:34:59,540 --> 00:35:02,170 chúng ta sẽ viết một số giả cho rằng bây giờ. 721 00:35:02,170 --> 00:35:03,300 Trước khi chúng tôi viết rằng giả - 722 00:35:03,300 --> 00:35:05,660 Tôi sẽ cung cấp cho các bạn một vài phút để viết mã giả hoặc chỉ nghĩ 723 00:35:05,660 --> 00:35:09,600 về nó - có hai điều mỗi hàm đệ quy cần. 724 00:35:09,600 --> 00:35:12,530 Hai điều này là gì? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Nó phải gọi chính nó. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Đi trước. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Nó phải gọi chính nó. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Vì vậy, một đệ quy chức năng cần có một cuộc gọi đệ quy, một 731 00:35:19,220 --> 00:35:20,220 gọi đến chính nó. 732 00:35:20,220 --> 00:35:20,770 Đó là một. 733 00:35:20,770 --> 00:35:21,510 Và điều khác là những gì? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Một trường hợp cơ sở. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Một trường hợp cơ sở. 736 00:35:23,780 --> 00:35:26,940 Một trường hợp cơ sở là, đây là khi chúng tôi dừng lại. 737 00:35:26,940 --> 00:35:29,510 Vì vậy, chức năng của bạn được gọi là. 738 00:35:29,510 --> 00:35:31,410 Trường hợp cơ sở đến trước. 739 00:35:31,410 --> 00:35:33,710 Bạn muốn biết nếu bạn đang ở cuối. 740 00:35:33,710 --> 00:35:37,110 Và nếu bạn không phải ở cuối, bạn thực hiện cuộc gọi đệ quy của bạn. 741 00:35:37,110 --> 00:35:39,880 Và bạn đi qua chức năng này một lần nữa, kiểm tra trường hợp cơ sở của bạn một lần nữa. 742 00:35:39,880 --> 00:35:42,575 Nếu bạn không phải cuối cùng, bạn thực hiện một cuộc gọi đệ quy, 743 00:35:42,575 --> 00:35:44,130 vân vân, vân vân. 744 00:35:44,130 --> 00:35:47,110 >> Đó là lý do tại sao chức năng đệ quy luôn luôn cần những trường hợp cơ sở và những 745 00:35:47,110 --> 00:35:48,210 cuộc gọi đệ quy. 746 00:35:48,210 --> 00:35:51,280 Nếu bạn không có một cuộc gọi đệ quy, nó sẽ không có một hàm đệ quy. 747 00:35:51,280 --> 00:35:53,210 Nếu bạn không có một trường hợp cơ sở, bạn sẽ đi mãi mãi và 748 00:35:53,210 --> 00:35:54,780 sẽ không có kết thúc. 749 00:35:54,780 --> 00:35:57,870 Và trường hợp cơ sở luôn luôn đến trước, bởi vì bạn sẽ luôn luôn muốn kiểm tra 750 00:35:57,870 --> 00:36:00,420 nếu bạn đang ở cuối đầu tiên. 751 00:36:00,420 --> 00:36:04,770 Vì vậy, trước khi chúng tôi làm một số giả, tại sao bạn không dành một phút để suy nghĩ về 752 00:36:04,770 --> 00:36:09,360 như thế nào một chức năng thừa đệ quy sẽ được viết? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Ngoài ra, như nhiều như bạn đang làm, bằng văn bản nó ra trên một tờ giấy là 755 00:36:26,010 --> 00:36:27,960 những gì bạn sẽ phải làm trên các bài kiểm tra vào ngày mai. 756 00:36:27,960 --> 00:36:32,160 Như vậy có lẽ tốt thực hành để làm cho chắc chắn rằng mã bạn đang viết 757 00:36:32,160 --> 00:36:34,420 xuống trên tờ giấy - 758 00:36:34,420 --> 00:36:35,160 hoặc bạn có thể làm điều đó. 759 00:36:35,160 --> 00:36:36,710 Bạn biết nơi mà các dấu chấm phẩy là. 760 00:36:36,710 --> 00:36:37,660 Bạn có nhớ cú pháp. 761 00:36:37,660 --> 00:36:40,400 Bởi vì bạn không thể có một trình biên dịch cho bạn thực hiện một lỗi. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Ngoài ra, dọc theo các dòng, vào ngày mai, khi bạn đã mã hóa các vấn đề, nếu bạn 764 00:37:07,240 --> 00:37:11,490 đang vội vã tìm kiếm thời gian, hoặc nếu bạn rất nhầm lẫn như thế nào bạn đang nghĩa vụ phải 765 00:37:11,490 --> 00:37:16,030 viết điều đặc biệt trong c, nó sẽ behoove bạn viết mã giả 766 00:37:16,030 --> 00:37:18,160 hoặc viết ý kiến ​​trong là tốt. 767 00:37:18,160 --> 00:37:21,940 Bởi vì có tín dụng một phần cho một rất nhiều các câu hỏi trong bài kiểm tra. 768 00:37:21,940 --> 00:37:24,840 Vì vậy, bạn có thể vội vàng, hoặc bạn chỉ có thể bị nhầm lẫn. 769 00:37:24,840 --> 00:37:28,030 Viết trong bình luận hoặc mã giả thường cách mà bạn 770 00:37:28,030 --> 00:37:29,360 có thể nhận được tín dụng một phần. 771 00:37:29,360 --> 00:37:31,440 >> Vì vậy, không để lại một cái gì đó trống trên các bài kiểm tra. 772 00:37:31,440 --> 00:37:33,490 Không có hình phạt đối với đưa mọi thứ in 773 00:37:33,490 --> 00:37:37,650 Trong thực tế, việc đưa mã giả hoặc ý kiến ​​sẽ giúp các học sinh lớp 774 00:37:37,650 --> 00:37:40,410 tìm ra nếu bạn thực sự biết những gì bạn đang nói về, và có lẽ giải thưởng 775 00:37:40,410 --> 00:37:42,030 bạn một số tín dụng một phần cho điều đó. 776 00:37:42,030 --> 00:37:44,510 >> Cũng theo con đường này, viết rõ ràng. 777 00:37:44,510 --> 00:37:47,650 Nếu chúng ta có thể không thực sự những gì bạn đang viết, chúng tôi sẽ không gọi cho bạn 778 00:37:47,650 --> 00:37:49,900 vào lúc nửa đêm vào ngày mai để con số ra những gì bạn đã viết. 779 00:37:49,900 --> 00:37:51,520 Chúng ta chỉ cần đi để cất cánh điểm. 780 00:37:51,520 --> 00:37:56,570 Viết rõ ràng vì vậy chúng tôi có thể nghe thấy, hay đúng hơn, chúng ta có thể đọc những gì bạn viết. 781 00:37:56,570 --> 00:38:00,230 >> Và nếu nó nói hai câu, không viết một đoạn văn. 782 00:38:00,230 --> 00:38:02,280 Thực hiện theo các hướng dẫn. 783 00:38:02,280 --> 00:38:03,500 Viết rõ ràng. 784 00:38:03,500 --> 00:38:07,720 Và viết những ý kiến ​​hay giả cho câu hỏi mà có thể 785 00:38:07,720 --> 00:38:10,270 giải thưởng tín dụng một phần. 786 00:38:10,270 --> 00:38:12,520 >> OK, chúng ta hãy đi đến factorial. 787 00:38:12,520 --> 00:38:15,000 Vì vậy, chúng ta có một chức năng thừa. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Nếu tôi được thực sự viết điều này trong C, những gì tôi cần phải đặt trước tên 790 00:38:21,550 --> 00:38:22,800 các chức năng? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Kiểu trả về, trong đó, điều này trường hợp, chúng tôi sẽ cung cấp cho nó int. 793 00:38:30,060 --> 00:38:35,450 Và sau đó bên trong dấu ngoặc nhọn, là những gì diễn ra bên trong các dấu ngoặc nhọn cho 794 00:38:35,450 --> 00:38:36,850 một chức năng? 795 00:38:36,850 --> 00:38:37,950 >> SINH VIÊN: Đối số loại. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: đối số của nó. 797 00:38:39,150 --> 00:38:42,680 Vì vậy, có thể sẽ thừa có một cuộc tranh luận. 798 00:38:42,680 --> 00:38:44,500 Nó sẽ có thể chỉ mất một đối số. 799 00:38:44,500 --> 00:38:49,450 Và chúng tôi sẽ nói nó sẽ mất một số nguyên được gọi là x. 800 00:38:49,450 --> 00:38:52,770 Và một lần nữa, khi viết nguyên mẫu của một chức năng hoặc bằng văn bản chức năng 801 00:38:52,770 --> 00:38:57,110 trong mã của bạn trước khi xác định nó, bạn viết các kiểu dữ liệu và tên của 802 00:38:57,110 --> 00:39:01,370 rằng biến cho chỉ có chức năng đó. 803 00:39:01,370 --> 00:39:06,350 Vì vậy, bạn có thể vượt qua một số số vào này chức năng, nó sẽ được gọi là x 804 00:39:06,350 --> 00:39:07,340 trong nội bộ. 805 00:39:07,340 --> 00:39:08,755 >> Chúng tôi có chức năng thừa của chúng tôi. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Chúng ta cần hai điều, một trường hợp cơ sở và một cuộc gọi đệ quy. 808 00:39:15,850 --> 00:39:20,900 Trường hợp cơ sở cho thừa là gì? 809 00:39:20,900 --> 00:39:24,850 Ai đó đã viết nó ra và những người không có nói chưa, các cơ sở là những gì 810 00:39:24,850 --> 00:39:26,100 trường hợp thừa? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> HỌC SINH: Nếu n là ít hơn 2, trả lại 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Nếu n là ít hơn 2, trả lại 1. 814 00:39:33,520 --> 00:39:37,216 Tôi thích điều đó, bởi vì đó chăm sóc của 0 và 1. 815 00:39:37,216 --> 00:39:45,290 Vì vậy, chúng tôi sẽ làm x <2, trả lại 1. 816 00:39:45,290 --> 00:39:47,870 Nếu chúng ta có được thông qua 0, nếu chúng ta có được thông qua 1, chức năng này sẽ 817 00:39:47,870 --> 00:39:49,790 ngay lập tức trở về 1. 818 00:39:49,790 --> 00:39:54,020 Nếu chúng ta có được thông qua một số số lượng lớn hơn hoặc bằng 2, chúng ta sẽ 819 00:39:54,020 --> 00:39:55,370 có cuộc gọi đệ quy của chúng tôi. 820 00:39:55,370 --> 00:39:57,855 >> Và vì vậy làm thế nào là đi làm à? 821 00:39:57,855 --> 00:40:01,070 Có thể ai đó làm việc này người đã không nói chuyện nhưng cho tôi 822 00:40:01,070 --> 00:40:07,380 gọi đệ quy cho chức năng này trong giả? 823 00:40:07,380 --> 00:40:10,770 Nếu chúng ta có được thông qua trong một số x và nó lớn hơn 2, những gì 824 00:40:10,770 --> 00:40:13,370 Chúng ta muốn làm gì? 825 00:40:13,370 --> 00:40:17,930 Chúng tôi cũng đã một ví dụ bằng văn bản về bên đó có thể cung cấp cho bạn một gợi ý. 826 00:40:17,930 --> 00:40:20,770 >> HỌC SINH: Gọi x lần thừa của x trừ đi 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Chính xác ngay. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Chúng tôi sẽ trở lại x lần giai thừa của x trừ đi 1. 830 00:40:37,750 --> 00:40:41,810 Và rằng, mặc dù tôi đã viết lên, về cơ bản, những gì bạn nói bằng tiếng Anh, 831 00:40:41,810 --> 00:40:44,580 chức năng thừa này sẽ được gọi một lần nữa. 832 00:40:44,580 --> 00:40:46,320 Nó sẽ thực hiện trên x trừ đi 1. 833 00:40:46,320 --> 00:40:49,320 Nó sẽ trở lại với một số nguyên, và sau đó nó sẽ nhân hai 834 00:40:49,320 --> 00:40:52,050 với nhau, và giá trị đó sẽ được quay trở lại bất cứ điều gì được gọi là này 835 00:40:52,050 --> 00:40:55,010 chức năng thừa, mà sức mạnh là một ví dụ của 836 00:40:55,010 --> 00:40:58,420 chức năng thừa này. 837 00:40:58,420 --> 00:41:01,360 >> Vì vậy, đó là một ví dụ của một đệ quy chức năng, rất 838 00:41:01,360 --> 00:41:02,530 hàm đệ quy đơn giản. 839 00:41:02,530 --> 00:41:04,530 Nhưng hầu hết trong số họ sẽ được như thế này. 840 00:41:04,530 --> 00:41:11,170 Nếu bạn muốn một đệ quy tốt thách thức cho các bài kiểm tra, thử mã hóa 841 00:41:11,170 --> 00:41:13,230 tìm kiếm nhị phân đệ quy. 842 00:41:13,230 --> 00:41:18,950 Bởi vì nếu bạn đã tìm kiếm nhị phân cho vấn đề thiết lập ba, có thể bạn đã làm nó 843 00:41:18,950 --> 00:41:21,730 lặp đi lặp lại trong một vòng lặp while. 844 00:41:21,730 --> 00:41:23,700 >> Nhưng nó cũng có thể được viết đệ quy. 845 00:41:23,700 --> 00:41:26,310 Bạn sẽ cần phải viết riêng của bạn chức năng riêng biệt mà phải mất một số 846 00:41:26,310 --> 00:41:29,020 đối số dòng lệnh khác nhau - hay không đối số dòng lệnh, một số 847 00:41:29,020 --> 00:41:30,910 khác nhau đối số chỉ thường xuyên. 848 00:41:30,910 --> 00:41:33,870 Nhưng bạn có thể viết tìm kiếm nhị phân đệ quy là tốt. 849 00:41:33,870 --> 00:41:36,190 >> HỌC SINH: Vì vậy, bạn có thể cũng đã viết, thay vì x trừ đi 1, bạn 850 00:41:36,190 --> 00:41:39,502 có thể cũng đã viết x trừ trừ, hoặc bạn có thể có 851 00:41:39,502 --> 00:41:40,830 bằng văn bản trừ trừ đi x. 852 00:41:40,830 --> 00:41:44,740 Bạn chỉ có thể giải thích lý do tại sao thực sự nhanh chóng những sẽ là những thứ khác nhau, 853 00:41:44,740 --> 00:41:49,510 giống như những gì là sự khác biệt giữa x trừ trừ và trừ trừ đi x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Không, tôi không sẽ đi vào đó. 855 00:41:51,320 --> 00:41:55,500 Nhưng tôi sẽ nói chuyện với bạn về nó sau lớp. x trừ trừ trừ trừ đi x 856 00:41:55,500 --> 00:41:57,780 giảm giá trị x 1. 857 00:41:57,780 --> 00:41:59,090 Nhưng họ làm điều đó một chút khác nhau. 858 00:41:59,090 --> 00:42:00,340 Nhưng tôi không muốn đi vào đó. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Câu hỏi khác về đệ quy hoặc chức năng này? 861 00:42:09,090 --> 00:42:10,140 Đó không phải là thực sự thậm chí giả. 862 00:42:10,140 --> 00:42:15,060 Đó là về cơ bản các mã trong C bạn sẽ viết cho việc này. 863 00:42:15,060 --> 00:42:19,393 >> OK, bất kỳ câu hỏi khác về các chủ đề ở đây? 864 00:42:19,393 --> 00:42:19,864 Yeah. 865 00:42:19,864 --> 00:42:23,130 >> HỌC SINH: Tôi có một tóm tắt nhanh chóng của điểm và độ chính xác nổi. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Nổi điểm và độ chính xác. 867 00:42:24,260 --> 00:42:26,920 Có thể ai đó thực sự nhanh chóng cho tôi một tóm tắt của 868 00:42:26,920 --> 00:42:28,210 dấu chấm động và độ chính xác? 869 00:42:28,210 --> 00:42:30,420 Tất cả các bạn phải làm điều này cho bạn vấn đề thiết lập, vì vậy bạn tất cả 870 00:42:30,420 --> 00:42:31,700 quen thuộc với nó. 871 00:42:31,700 --> 00:42:35,090 Hoặc có thể không phải tất cả các bạn. 872 00:42:35,090 --> 00:42:36,602 Bất cứ ai? 873 00:42:36,602 --> 00:42:39,530 Hãy cho tôi một điểm bắt đầu. 874 00:42:39,530 --> 00:42:40,750 Dấu chấm động và chính xác. 875 00:42:40,750 --> 00:42:42,380 Vấn đề là gì? 876 00:42:42,380 --> 00:42:42,960 Vâng. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> Vanessa: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Xin lôi. 881 00:42:45,680 --> 00:42:51,550 >> Vanessa: Chỉ có một số hữu hạn số có thể biểu diễn 882 00:42:51,550 --> 00:42:57,930 bởi vì bạn đang ở trên một trong của chúng tôi trường hợp, một hệ thống 32-bit. 883 00:42:57,930 --> 00:43:03,080 Vì vậy, bạn hẳn sẽ có những làm cho một số con số. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Vì vậy, đó là chính xác. 885 00:43:03,910 --> 00:43:08,110 Chỉ có một số tiền nhất định con số đó có thể được đại diện. 886 00:43:08,110 --> 00:43:11,770 Nếu bạn nhân hai con số rất lớn, nó có thể tràn số tiền 887 00:43:11,770 --> 00:43:13,950 không gian bạn có để đại diện cho một số nguyên. 888 00:43:13,950 --> 00:43:17,930 Đó là lý do tại sao đôi khi chúng ta sử dụng một lâu dài thay vì một int. 889 00:43:17,930 --> 00:43:19,210 Có không gian hơn. 890 00:43:19,210 --> 00:43:21,210 Có thể chứa một số lượng lớn. 891 00:43:21,210 --> 00:43:24,310 >> Dấu chấm động chính xác đã làm với đó, nhưng cũng đã làm với các 892 00:43:24,310 --> 00:43:29,300 thực tế là số thập phân là không luôn luôn đại diện. 893 00:43:29,300 --> 00:43:29,540 Xin lôi. 894 00:43:29,540 --> 00:43:31,280 Hãy để tôi đưa trở lại này lên. 895 00:43:31,280 --> 00:43:36,610 Số thập phân 1.0 không phải là luôn luôn đại diện như bạn mong đợi, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Đôi khi nó được biểu diễn như là 1,000000001 hoặc 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Nó có thể được thậm chí 89 ném ở đâu đó. 899 00:43:52,780 --> 00:43:56,560 Vì vậy, những con số thập phân không đại diện chính xác như bạn sẽ 900 00:43:56,560 --> 00:43:58,430 mong đợi họ được đại diện. 901 00:43:58,430 --> 00:44:00,010 >> Vì vậy, trong vấn đề thiết lập - 902 00:44:00,010 --> 00:44:00,860 là nó hai - 903 00:44:00,860 --> 00:44:05,290 vấn đề thiết lập hai, nơi mà chúng tôi xử lý số dấu chấm động, khi chúng tôi muốn 904 00:44:05,290 --> 00:44:08,690 họ đại diện cho chính xác những gì chúng tôi muốn họ đại diện, số lượng 905 00:44:08,690 --> 00:44:12,860 của đồng xu, hoặc số xu, chúng ta nhân chúng bằng 100. 906 00:44:12,860 --> 00:44:14,750 Chúng tôi làm tròn chúng. 907 00:44:14,750 --> 00:44:18,660 Và sau đó chúng tôi cắt đứt tất cả mọi thứ đằng sau dấu thập phân. 908 00:44:18,660 --> 00:44:22,020 Đó là để đảm bảo rằng họ sẽ thực sự bằng chính xác những gì chúng tôi muốn 909 00:44:22,020 --> 00:44:22,410 họ bằng. 910 00:44:22,410 --> 00:44:26,870 >> Bởi vì khi bạn có một cái gì đó một nổi và biến nó thành một int, bạn 911 00:44:26,870 --> 00:44:29,860 cắt đứt tất cả mọi thứ bên phải của các điểm thập phân. 912 00:44:29,860 --> 00:44:33,900 Bởi vì có một số điểm nổi không chính xác, có thể là 100.000 913 00:44:33,900 --> 00:44:37,440 biểu diễn như là 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Và nếu bạn chỉ cần cắt đứt tất cả mọi thứ để quyền ngay lập tức, bạn sẽ 915 00:44:40,350 --> 00:44:41,600 có được số lượng sai. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Yeah. 918 00:44:44,180 --> 00:44:45,290 >> HỌC SINH: Tôi có một câu hỏi về đúc. 919 00:44:45,290 --> 00:44:47,500 Để những gì nó xảy ra trong? 920 00:44:47,500 --> 00:44:54,480 Nếu bạn muốn làm nổi, dấu ngoặc đơn, 1 chia 10, nó làm 1 chia cho 10, 921 00:44:54,480 --> 00:44:58,910 sau đó nhận được 0,1, sau đó lần lượt vào một phao? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Nếu bạn làm nổi 1 chia cho 10 - 923 00:45:01,470 --> 00:45:02,550 >> HỌC SINH: Vâng, và sau đó bằng - 924 00:45:02,550 --> 00:45:04,240 tốt, nó sẽ bình thường có nó bình đẳng trong - 925 00:45:04,240 --> 00:45:04,690 Yeah. 926 00:45:04,690 --> 00:45:06,760 Bạn muốn làm cho nó một nổi, phải không? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, vì vậy chúng ta sẽ sử dụng để Segue vào tìm ra 928 00:45:12,790 --> 00:45:15,390 câu trả lời cho những câu hỏi này thông qua mã hóa. 929 00:45:15,390 --> 00:45:18,180 Bởi vì có thể bạn sẽ có rất nhiều những câu hỏi phút, và là một cách tốt 930 00:45:18,180 --> 00:45:19,100 để giải quyết chúng là thông qua mã hóa. 931 00:45:19,100 --> 00:45:21,320 Vì vậy, chúng tôi đang đi vào mã này ngay bây giờ, và sau đó chúng ta sẽ quay trở lại và 932 00:45:21,320 --> 00:45:24,020 mã câu hỏi mà bạn đã có. 933 00:45:24,020 --> 00:45:24,950 >> Vì vậy, dòng đầu tiên - 934 00:45:24,950 --> 00:45:29,390 Tôi không nên viết nó - là những gì điều đầu tiên chúng tôi muốn làm khi chúng ta 935 00:45:29,390 --> 00:45:32,250 mở ra một file mới trong gedit? 936 00:45:32,250 --> 00:45:34,190 >> HỌC SINH: Bao gồm. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Bao gồm những gì? 938 00:45:35,920 --> 00:45:37,952 >> HỌC SINH: thư viện CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Chúng ta nên bao gồm những gì khác? 941 00:45:42,590 --> 00:45:46,820 Chúng ta chỉ cần đi để kiểm tra những gì sẽ xảy ra khi bạn cast một cái gì đó nổi một. 942 00:45:46,820 --> 00:45:48,605 Nhưng những gì chúng ta cần phải bao gồm nếu chúng ta sẽ viết một chương trình C? 943 00:45:48,605 --> 00:45:49,300 >> HỌC SINH: Chuẩn I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Chúng tôi thực sự không cần, cho điều này chương trình, cs50.h, mặc dù nó 946 00:45:54,880 --> 00:45:55,920 luôn luôn hữu ích để bao gồm nó. 947 00:45:55,920 --> 00:45:58,260 Nhưng chúng tôi luôn luôn cần stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> HỌC SINH: Khi mã hóa trong C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Khi mã hóa trong C. 950 00:46:15,770 --> 00:46:17,090 >> Vì vậy, tôi lưu nó như này tập tin c.. 951 00:46:17,090 --> 00:46:18,590 Tôi nhận được một số cú pháp tô sáng tốt đẹp. 952 00:46:18,590 --> 00:46:22,890 Tôi đã viết khoảng trống bên trong chính. 953 00:46:22,890 --> 00:46:24,792 Không khoảng trống có nghĩa là gì? 954 00:46:24,792 --> 00:46:26,740 >> HỌC SINH: Không có bất kỳ đối số dòng lệnh. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: phương tiện Void, trong này trường hợp, chính không có bất kỳ 956 00:46:28,900 --> 00:46:29,700 đối số dòng lệnh. 957 00:46:29,700 --> 00:46:32,720 Trong trường hợp khác, nó có nghĩa là chức năng không có đối số dòng lệnh. 958 00:46:32,720 --> 00:46:36,560 Hoặc chức năng, nếu tôi đã viết khoảng trống main (void), mà có thể nói của chính 959 00:46:36,560 --> 00:46:38,460 không trở về bất cứ điều gì. 960 00:46:38,460 --> 00:46:39,960 Vì vậy, khoảng trống chỉ có nghĩa là không có gì. 961 00:46:39,960 --> 00:46:42,510 Tôi sẽ viết những gì nếu tôi có đối số dòng lệnh? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> HỌC SINH: int cung c chuỗi cung v 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc chuỗi argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Đúng không? 967 00:46:55,572 --> 00:46:58,720 >> HỌC SINH: Đó là char dấu ngoặc sao argv. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Vì vậy, bạn có thể viết khung chuỗi argv hoặc char sao argv 969 00:47:01,730 --> 00:47:03,710 dấu ngoặc đơn, nhưng bạn cần dấu ngoặc đơn. 970 00:47:03,710 --> 00:47:06,290 Vì argv là một mảng các chuỗi, hãy nhớ. 971 00:47:06,290 --> 00:47:07,360 Nó không chỉ là một chuỗi. 972 00:47:07,360 --> 00:47:10,350 Vì vậy, chuỗi argv là, ở đây ta một chuỗi được gọi là argv. 973 00:47:10,350 --> 00:47:13,630 Khung chuỗi argv được, đây là một mảng các chuỗi. 974 00:47:13,630 --> 00:47:17,865 Vì vậy, int argc dấu ngoặc chuỗi argv sẽ là một cái gì đó mà tôi 975 00:47:17,865 --> 00:47:18,810 có lẽ sẽ viết. 976 00:47:18,810 --> 00:47:23,050 >> Vì vậy, bạn muốn tiết kiệm trong một số nguyên? 977 00:47:23,050 --> 00:47:24,285 >> HỌC SINH: Vâng, số nguyên. 978 00:47:24,285 --> 00:47:25,840 Hoặc trong một phao. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: Trong một phao? 980 00:47:26,710 --> 00:47:30,790 Như, float x bằng 1 chia cho 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Làm thế nào để in ra một phao trong printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Những gì? 986 00:47:46,714 --> 00:47:47,560 >> HỌC SINH:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Một số nguyên là gì? 989 00:47:50,810 --> 00:47:52,110 d hoặc tôi. 990 00:47:52,110 --> 00:47:53,000 Một chuỗi là những gì? 991 00:47:53,000 --> 00:47:54,240 >> HỌC SINH: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Làm thế nào để có được một dòng mới? 994 00:47:57,550 --> 00:47:58,800 >> HỌC SINH: Dấu gạch chéo ngược n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Tôi trở lại gì nếu chạy chính một cách chính xác? 997 00:48:07,100 --> 00:48:08,360 >> HỌC SINH: 0. 998 00:48:08,360 --> 00:48:09,430 Tôi cần phải viết dòng đó, mặc dù? 999 00:48:09,430 --> 00:48:10,170 >> HỌC SINH: số 1000 00:48:10,170 --> 00:48:11,513 OK, chúng tôi sẽ không viết nó, sau đó. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Tất cả mọi người có thể đọc mà? 1003 00:48:17,190 --> 00:48:18,485 Nó có vẻ hơi nhỏ. 1004 00:48:18,485 --> 00:48:20,160 Tất cả mọi người có thể nhìn thấy, hoặc phải Tôi làm cho nó lớn hơn không? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Tôi nghĩ rằng cho máy ảnh, chúng tôi sẽ làm cho nó lớn hơn một chút, mặc dù. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Nếu tôi muốn tắt chức năng này . C tập tin vào một thực thi, những gì 1009 00:48:38,410 --> 00:48:39,260 để tôi viết? 1010 00:48:39,260 --> 00:48:41,610 >> HỌC SINH: Hãy kiểm tra. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Xin lỗi? 1012 00:48:42,080 --> 00:48:42,790 >> HỌC SINH: Hãy kiểm tra. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Hãy kiểm tra. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Chúng tôi đã nói về dòng này trước đó. 1016 00:48:48,410 --> 00:48:49,140 Kêu vang. 1017 00:48:49,140 --> 00:48:51,270 Kêu vang là gì? 1018 00:48:51,270 --> 00:48:52,200 Tên của trình biên dịch. 1019 00:48:52,200 --> 00:48:53,920 Dòng này là những gì? 1020 00:48:53,920 --> 00:48:55,580 >> HỌC SINH: Thiết lập nó lên để sử dụng của GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Bộ nó cho sử dụng GDB. 1022 00:48:59,230 --> 00:49:02,338 Dòng này, những gì vậy? 1023 00:49:02,338 --> 00:49:03,290 >> HỌC SINH: Source code. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Đó là tập tin nguồn, các tập tin c.. 1025 00:49:06,010 --> 00:49:08,150 Làm hai dòng làm gì? 1026 00:49:08,150 --> 00:49:10,245 Hoặc hai không đường. 1027 00:49:10,245 --> 00:49:12,300 >> HỌC SINH: Nó tên nó kiểm tra. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Vì vậy, các dấu gạch ngang o nói, đặt tên cho nó một cái gì đó khác nhau. 1029 00:49:15,410 --> 00:49:16,790 Và ở đây bạn đang gọi nó kiểm tra. 1030 00:49:16,790 --> 00:49:18,900 Nếu tôi không có trong, những gì nó sẽ đặt tên này? 1031 00:49:18,900 --> 00:49:20,260 >> HỌC SINH: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Điều này không làm những gì? 1034 00:49:25,366 --> 00:49:27,670 >> HỌC SINH: Liên kết các thư viện toán học. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Nó liên kết trong thư viện toán học. 1036 00:49:29,550 --> 00:49:32,880 Chúng tôi đã không bao gồm các thư viện toán học, nhưng vì đó là quá phổ biến, họ đã 1037 00:49:32,880 --> 00:49:35,780 có văn luôn luôn bao gồm các thư viện toán học. 1038 00:49:35,780 --> 00:49:39,050 Và tương tự, điều này bao gồm thư viện CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, vì vậy nếu chúng tôi danh sách, chúng ta có một thực thi được gọi là thử nghiệm. 1040 00:49:43,010 --> 00:49:45,150 Để thực hiện nó, tôi viết bài kiểm tra. 1041 00:49:45,150 --> 00:49:48,330 Tôi thấy rằng điểm nổi của tôi, như mong đợi, bằng 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Nào đó - 1044 00:49:51,590 --> 00:49:52,060 như vậy - 1045 00:49:52,060 --> 00:49:55,210 >> HỌC SINH: Sau đó, nếu bạn đặt nổi bây giờ, như bạn dùng nó như phao - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Diễn viên 1 nổi một? 1047 00:49:56,870 --> 00:49:59,180 >> HỌC SINH: Không, bỏ điều đầy đủ - 1048 00:49:59,180 --> 00:49:59,500 yeah. 1049 00:49:59,500 --> 00:50:02,460 Nếu bạn chỉ làm điều đó, sẽ mà làm cho nó 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, vì vậy thực sự nhanh chóng, 1 chia cho 10, những người đang có 1051 00:50:07,170 --> 00:50:08,690 số nguyên được chia. 1052 00:50:08,690 --> 00:50:13,580 Vì vậy, khi bạn chia số nguyên, chúng 0, và bạn đang tiết kiệm mà 0 trong một 1053 00:50:13,580 --> 00:50:17,170 nổi, bởi vì các dấu gạch chéo là chỉ phân chia số nguyên. 1054 00:50:17,170 --> 00:50:19,180 Vì vậy, bây giờ chúng tôi đang quay một cái gì đó vào một phao. 1055 00:50:19,180 --> 00:50:21,650 >> Hãy xem những gì sẽ xảy ra. 1056 00:50:21,650 --> 00:50:22,900 Chúng tôi sẽ thực hiện kiểm tra. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Vì vậy, bây giờ chúng tôi thấy rằng đó là dấu gạch chéo không phân chia số nguyên, nó đã nổi 1059 00:50:31,090 --> 00:50:32,640 phân chia điểm. 1060 00:50:32,640 --> 00:50:35,700 Bởi vì một trong những lập luận của mình đã được đúc nổi một. 1061 00:50:35,700 --> 00:50:38,380 Vì vậy, bây giờ nó đã nói, điều trị này bộ phận như chúng tôi đang làm việc với 1062 00:50:38,380 --> 00:50:40,140 điểm nổi, không có số nguyên. 1063 00:50:40,140 --> 00:50:42,760 Và do đó chúng tôi nhận được câu trả lời, chúng tôi mong đợi. 1064 00:50:42,760 --> 00:50:44,620 >> Hãy xem những gì sẽ xảy ra - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Nếu tôi muốn in số thập phân hơn điểm, làm thế nào tôi có thể làm điều đó? 1067 00:50:51,646 --> 00:50:55,550 >> HỌC SINH: điểm chấm f, hoặc như nhiều chữ số thập phân như bạn muốn. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Vì vậy, tôi in 10 điểm thập phân. 1070 00:51:04,440 --> 00:51:06,610 Và bây giờ chúng ta thấy chúng ta đang nhận được một số công cụ kỳ lạ. 1071 00:51:06,610 --> 00:51:09,650 Và đi trở lại câu hỏi của bạn về dấu chấm động không chính xác. 1072 00:51:09,650 --> 00:51:10,950 Có những thứ kỳ lạ được lưu trữ tại đây. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, không có trả lời câu hỏi của bạn? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Những gì người khác đã làm bạn muốn mã một cách nhanh chóng? 1077 00:51:20,200 --> 00:51:25,470 >> HỌC SINH: Tôi chỉ muốn xem có hay không, nếu bạn giải phóng một số con trỏ, 1078 00:51:25,470 --> 00:51:30,410 liệu con trỏ vẫn đã được lưu trữ trong nó là địa chỉ của những gì nó đã được 1079 00:51:30,410 --> 00:51:32,170 trỏ đến trước đó. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, vì vậy hãy làm điều đó. 1081 00:51:34,100 --> 00:51:38,030 Char ptr sao, điều này tạo ra một biến gọi là ptr kiểu char sao. 1082 00:51:38,030 --> 00:51:39,280 Làm thế nào để tôi viết malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Chỉ cần malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Nhưng sau đó nó đã được kích thước của, và trong trường hợp này, tôi đoán bạn muốn 1087 00:51:51,040 --> 00:51:52,465 được trỏ đến char. 1088 00:51:52,465 --> 00:51:54,450 Vì vậy, nó muốn được char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, vì vậy nhiều quát, bên trong - 1090 00:51:57,520 --> 00:51:58,770 chúng ta hãy chỉnh sửa. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Trong malloc, bạn muốn số của byte trên heap. 1093 00:52:09,260 --> 00:52:12,320 Nói chung, những gì chúng ta đã thấy rằng chúng tôi làm là chúng ta sẽ malloc 1094 00:52:12,320 --> 00:52:14,940 chuỗi, ví dụ, hoặc mảng các số nguyên. 1095 00:52:14,940 --> 00:52:21,600 Vì vậy, nếu chúng ta muốn 10 số nguyên, hoặc 10 ký tự, 10 sẽ cho chúng ta 10. 1096 00:52:21,600 --> 00:52:24,370 Và sau đó kích thước của ký tự sẽ cung cấp cho chúng ta biết rằng kích thước của ký tự, mà trong 1097 00:52:24,370 --> 00:52:25,120 trường hợp này là 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Chúng tôi nhận được 10 byte. 1099 00:52:26,250 --> 00:52:28,540 Nếu chúng ta viết kích thước của int, mà sẽ cung cấp cho chúng tôi 40 byte. 1100 00:52:28,540 --> 00:52:31,520 >> Vì vậy, tổng quát hơn, bên trong malloc là số byte mà bạn muốn. 1101 00:52:31,520 --> 00:52:34,620 Trong trường hợp này, chúng tôi đang nhận được 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Mà có vẻ như một sử dụng lạ malloc, nhưng đối với chúng tôi 1103 00:52:36,900 --> 00:52:38,470 mục đích có ý nghĩa. 1104 00:52:38,470 --> 00:52:40,420 Vì vậy, có đó. 1105 00:52:40,420 --> 00:52:43,420 >> Chúng ta sẽ gọi miễn phí. 1106 00:52:43,420 --> 00:52:47,040 Chúng tôi được thoát khỏi nó và chúng tôi sử dụng ptr một lần nữa. 1107 00:52:47,040 --> 00:52:48,750 Và những gì đã làm bạn muốn kiểm tra? 1108 00:52:48,750 --> 00:52:50,550 >> HỌC SINH: Tôi chỉ muốn kiểm tra xem hoặc không có bất cứ điều gì 1109 00:52:50,550 --> 00:52:51,900 bên trong của nó. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Vì vậy, liệu nó chỉ vào bất cứ điều gì? 1111 00:52:53,050 --> 00:52:57,740 >> HỌC SINH: Vâng, chính xác, cho dù nó vẫn có một địa chỉ bộ nhớ. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Vì vậy, bạn muốn kiểm tra giá trị của ptr? 1113 00:53:02,220 --> 00:53:03,470 >> HỌC SINH: Vâng, chính xác. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Tôi viết gì ở đây nếu tôi muốn kiểm tra giá trị của 1116 00:53:10,160 --> 00:53:11,880 điểm - là những gì, Jordan cho biết, giá trị? 1117 00:53:11,880 --> 00:53:13,720 Hoặc những gì được lưu trữ bên trong của ptr? 1118 00:53:13,720 --> 00:53:14,620 >> HỌC SINH: Một địa chỉ bộ nhớ. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: Một địa chỉ bộ nhớ. 1120 00:53:16,330 --> 00:53:20,520 Vì vậy, nếu tôi viết chỉ này, nó sẽ cho tôi giá trị của ptr. 1121 00:53:20,520 --> 00:53:22,800 Và làm thế nào để in ra một địa chỉ bộ nhớ? 1122 00:53:22,800 --> 00:53:26,470 Chuỗi định dạng là gì cho một địa chỉ bộ nhớ? 1123 00:53:26,470 --> 00:53:27,430 >> HỌC SINH:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S là một chuỗi. 1126 00:53:29,500 --> 00:53:30,750 % P cho con trỏ. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Đúng không? 1129 00:53:43,540 --> 00:53:44,790 Điều đó là đúng. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Vì vậy, ptr bằng - 1132 00:53:51,040 --> 00:53:53,350 nó vẫn có một cái gì đó trong nó. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Đây có lẽ là một hơn câu hỏi thú vị. 1135 00:53:57,645 --> 00:53:59,198 Không đường mà làm những gì? 1136 00:53:59,198 --> 00:54:00,830 >> HỌC SINH: lỗi Seg. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Cái gì? 1138 00:54:01,310 --> 00:54:02,678 >> HỌC SINH: Tôi nghĩ rằng nó seg lỗi. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> HỌC SINH: Tôi nghĩ rằng nó sẽ seg lỗi. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Vì vậy, dòng này mã, sao ptr, những gì 1142 00:54:08,265 --> 00:54:10,152 không ngôi sao nghĩa là gì? 1143 00:54:10,152 --> 00:54:11,240 >> HỌC SINH: Nội dung của. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Vâng. 1145 00:54:11,560 --> 00:54:13,910 Đi để có được nội dung của. 1146 00:54:13,910 --> 00:54:16,830 Vì vậy, đây sẽ đi vào bộ nhớ giải quyết đó và cho tôi đó. 1147 00:54:16,830 --> 00:54:21,030 Tôi đã sử dụng% c ở đây vì có được nhân vật được lưu trữ ở đó. 1148 00:54:21,030 --> 00:54:23,390 Vì vậy, chúng ta sẽ đi đến địa chỉ chúng tôi chỉ thấy - hoặc nó có thể sẽ là một 1149 00:54:23,390 --> 00:54:25,190 chút này khác nhau Hiện chúng tôi chạy chương trình. 1150 00:54:25,190 --> 00:54:28,010 Nhưng chúng tôi sẽ đi đến địa chỉ đó mà chúng ta biết vẫn còn tồn tại 1151 00:54:28,010 --> 00:54:29,260 và xem những gì đang có. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Vì vậy, nó không seg lỗi. 1154 00:54:37,110 --> 00:54:38,970 Nó chỉ không cho chúng tôi bất cứ điều gì. 1155 00:54:38,970 --> 00:54:43,350 Nó có thể đã thực sự cho chúng ta một cái gì đó, chúng ta không thể nhìn thấy nó. 1156 00:54:43,350 --> 00:54:45,110 Và quay ngược lại ý tưởng này - 1157 00:54:45,110 --> 00:54:47,270 và chúng tôi sẽ không nhận được quá nhiều vào này, bởi vì nó không nằm trong 1158 00:54:47,270 --> 00:54:48,460 phạm vi của khóa học này. 1159 00:54:48,460 --> 00:54:51,260 Nhưng chúng ta đã nói ở đây, nếu chúng ta đã vượt quá giới hạn của mảng bằng 1160 00:54:51,260 --> 00:54:54,890 1, chúng tôi có thể không gặp rắc rối. 1161 00:54:54,890 --> 00:54:58,550 >> Đôi khi, khi bạn chỉ cần đi ra bằng 1, bạn đang làm sai điều gì, và bạn 1162 00:54:58,550 --> 00:54:59,220 có thể gặp rắc rối. 1163 00:54:59,220 --> 00:55:00,820 Nhưng bạn không luôn luôn gặp rắc rối. 1164 00:55:00,820 --> 00:55:05,170 Nó phụ thuộc bao nhiêu là một điều xấu bạn làm, bạn sẽ gặp rắc rối. 1165 00:55:05,170 --> 00:55:07,790 Mà không phải là để nói, được cẩu thả với mã của bạn. 1166 00:55:07,790 --> 00:55:12,080 Nhưng nó là để nói, chương trình sẽ không luôn luôn bỏ thuốc lá, ngay cả khi bạn đi đâu đó 1167 00:55:12,080 --> 00:55:14,130 bạn không cần đến. 1168 00:55:14,130 --> 00:55:18,170 >> Một ví dụ đó là, rất nhiều người trong vấn đề của họ thiết lập 3, 1169 00:55:18,170 --> 00:55:22,350 là 15, không kiểm tra giới hạn của hội đồng quản trị. 1170 00:55:22,350 --> 00:55:25,860 Vì vậy, bạn nhìn sang bên trái, nhìn vào bên phải, nhìn lên trên, nhìn 1171 00:55:25,860 --> 00:55:27,000 để phía dưới. 1172 00:55:27,000 --> 00:55:31,540 Nhưng bạn đã không kiểm tra để xem nếu đầu đã thực sự sẽ là trên diễn đàn. 1173 00:55:31,540 --> 00:55:35,220 Và rất nhiều người đã làm điều đó và quay trong chương trình làm việc của họ 1174 00:55:35,220 --> 00:55:38,960 hoàn hảo, bởi vì nơi đó là hội đồng quản trị được lưu trữ trong bộ nhớ, nếu bạn đã đi một 1175 00:55:38,960 --> 00:55:42,300 ở trên nó hoặc kiểm tra trí nhớ địa chỉ, không có bất cứ điều gì 1176 00:55:42,300 --> 00:55:44,870 đặc biệt khủng khiếp về điều đó, chương trình của bạn không 1177 00:55:44,870 --> 00:55:45,970 sẽ hét vào mặt bạn. 1178 00:55:45,970 --> 00:55:48,870 >> Nhưng chúng tôi vẫn sẽ cất cánh nếu điểm bạn đã không kiểm tra, bởi vì bạn 1179 00:55:48,870 --> 00:55:50,850 đang làm một cái gì đó bạn không phải làm, và bạn có thể có 1180 00:55:50,850 --> 00:55:51,860 nhận gặp rắc rối. 1181 00:55:51,860 --> 00:55:54,040 Tỷ lệ cược là, mặc dù, bạn có thể không. 1182 00:55:54,040 --> 00:55:57,790 Vì vậy, đây là để cho thấy rằng, có, chúng tôi vẫn có thể đi với nó. 1183 00:55:57,790 --> 00:55:59,010 Và chúng tôi không nhận được trong rắc rối trong trường hợp này. 1184 00:55:59,010 --> 00:56:04,000 Nếu chúng ta cố gắng làm đọc 100 ký tự tiếp theo, chúng tôi 1185 00:56:04,000 --> 00:56:06,000 có thể gặp rắc rối. 1186 00:56:06,000 --> 00:56:09,400 Và bạn có thể mã đọc tiếp theo 100 ký tự nếu bạn muốn bằng cách làm một số 1187 00:56:09,400 --> 00:56:10,110 loại cho vòng lặp. 1188 00:56:10,110 --> 00:56:10,850 Yeah. 1189 00:56:10,850 --> 00:56:16,250 >> HỌC SINH: Từ khi chúng tôi được chỉ định mà không gian một giá trị thực tế, chúng tôi sẽ không 1190 00:56:16,250 --> 00:56:17,050 thực sự có thể nhìn thấy bất cứ điều gì. 1191 00:56:17,050 --> 00:56:21,740 Chúng ta nên thử nó với thiết lập đó bằng như c hay cái gì? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Great câu hỏi. 1193 00:56:22,640 --> 00:56:25,340 Làm thế nào để thiết lập giá trị đó - 1194 00:56:25,340 --> 00:56:28,980 những gì dòng mã để tôi viết trên dòng bảy để làm những gì bạn nói? 1195 00:56:28,980 --> 00:56:34,040 >> HỌC SINH: sao ptr bằng đơn quote c kết thúc giá duy nhất. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Vì vậy, đó là đặt một nhân vật, c, tại địa điểm đó, 1197 00:56:36,970 --> 00:56:40,200 bởi vì một lần nữa, ngôi sao có nghĩa là đi đến đó. 1198 00:56:40,200 --> 00:56:43,320 Và khi được sử dụng ở phía bên tay trái của một nhà điều hành phân công, mà bằng 1199 00:56:43,320 --> 00:56:47,270 đăng ký, chúng tôi sẽ không có được điều đó giá trị quá nhiều như thiết lập giá trị đó. 1200 00:56:47,270 --> 00:56:48,520 Bây giờ hãy xem những gì xảy ra. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Chúng tôi đặt một cái gì đó có và nó đã có. 1203 00:56:56,770 --> 00:56:58,000 Chúng tôi gọi là miễn phí. 1204 00:56:58,000 --> 00:57:00,100 Một số công cụ có thể xảy ra trên heap. 1205 00:57:00,100 --> 00:57:01,890 Vì vậy, nó không còn ở đó nữa. 1206 00:57:01,890 --> 00:57:07,440 Nhưng một lần nữa, chúng tôi không nhận được gặp khó khăn cho đến đó. 1207 00:57:07,440 --> 00:57:10,260 >> Tôi đang làm điều này trong mã để minh họa mà rất nhiều trong số này 1208 00:57:10,260 --> 00:57:12,410 câu hỏi mà bạn có, họ thực sự thú vị 1209 00:57:12,410 --> 00:57:13,650 câu trả lời rất nhiều thời gian. 1210 00:57:13,650 --> 00:57:15,260 Và họ đang câu hỏi thực sự tốt. 1211 00:57:15,260 --> 00:57:19,010 Và bạn có thể tìm chúng trên riêng nếu bạn, ví dụ, 1212 00:57:19,010 --> 00:57:19,990 chúng tôi đang không ở trong phần. 1213 00:57:19,990 --> 00:57:20,940 Yeah. 1214 00:57:20,940 --> 00:57:24,430 >> HỌC SINH: Bởi vì bạn không gửi con trỏ bất cứ nơi nào, bạn cần phải 1215 00:57:24,430 --> 00:57:26,530 sử dụng malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Vì vậy, đây đi lại cho câu hỏi ban đầu của bạn. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Là nó chỉ là một biến địa phương? 1219 00:57:29,980 --> 00:57:32,280 Malloc đây không phải là hấp dẫn. 1220 00:57:32,280 --> 00:57:35,260 Việc sử dụng malloc đây không phải là mà hấp dẫn bởi vì nó 1221 00:57:35,260 --> 00:57:36,500 chỉ là một biến địa phương. 1222 00:57:36,500 --> 00:57:40,970 >> HỌC SINH: Vì vậy, bạn có thể làm char sao ptr bằng nhỉ? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Vì vậy, chúng ta sẽ bây giờ quay trở lại cho câu hỏi ban đầu của bạn. 1225 00:57:43,300 --> 00:57:46,885 Tôi nghĩ rằng bạn không hài lòng với câu trả lời của tôi. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Như thế? 1228 00:57:49,226 --> 00:57:49,682 >> HỌC SINH: Vâng. 1229 00:57:49,682 --> 00:57:50,932 Chờ đợi. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Và nơi Bạn muốn in ra? 1232 00:57:57,850 --> 00:58:00,026 Vì vậy, chúng tôi sẽ in ra một chuỗi như thế? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> HỌC SINH: Thú vị. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Vì vậy, đây nói này tham số có kiểu của một nhân vật. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Vì vậy, đây phải là một nhân vật. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> HỌC SINH: Chỉ cần có một trong những đầu tiên. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Vì vậy, đây là những gì tôi đã nói. 1242 00:58:28,610 --> 00:58:34,240 Như tôi đã nói, nó không lưu trữ chuỗi bên trong con trỏ biến. 1243 00:58:34,240 --> 00:58:35,120 Nó lưu trữ - 1244 00:58:35,120 --> 00:58:36,350 >> HỌC SINH: Giá trị đầu tiên của chuỗi. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Địa chỉ của giá trị đầu tiên của chuỗi. 1246 00:58:40,810 --> 00:58:46,940 Nếu chúng ta in ra này, chúng tôi nhận được giá trị bên trong con trỏ. 1247 00:58:46,940 --> 00:58:51,005 Và chúng ta sẽ thấy nó là, thực sự, một địa chỉ bộ nhớ. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Điều đó có ý nghĩa? 1250 00:58:56,440 --> 00:58:56,940 Xin lôi. 1251 00:58:56,940 --> 00:58:58,996 Chờ đợi, không có trả lời của bạn câu hỏi, mặc dù? 1252 00:58:58,996 --> 00:58:59,790 >> HỌC SINH: Vâng. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: dòng mã này là tạo ra một chuỗi và sau đó một 1254 00:59:05,830 --> 00:59:09,115 con trỏ biến trỏ để chuỗi, mảng đó. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Yeah. 1257 00:59:14,980 --> 00:59:19,200 >> HỌC SINH: Vì vậy, nếu chúng tôi đã đi một bộ nhớ giải quyết hơn nữa, chúng ta sẽ nhận được h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Nó đã được lưu trữ như là một chuỗi? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Giống như, chúng tôi đã làm - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 vì vậy đây là có giá trị để làm. 1263 00:59:30,790 --> 00:59:33,780 Đây là điểm số học, mà các bạn đã thấy trước và phải được 1264 00:59:33,780 --> 00:59:35,550 tương đối thoải mái. 1265 00:59:35,550 --> 00:59:36,905 Điều này cũng giống như viết - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 nếu chúng ta viết dòng mã này, chúng tôi đã nhìn thấy ký hiệu mảng trước. 1268 00:59:46,350 --> 00:59:55,900 Điều này sẽ cho chúng ta thứ hai giá trị trong mảng này, h. 1269 00:59:55,900 --> 01:00:05,010 >> Nếu chúng ta đã làm điều này, điều này cũng sẽ cung cấp cho chúng tôi giá trị thứ hai trong mảng đó. 1270 01:00:05,010 --> 01:00:08,320 Bởi vì nó sẽ không vào bộ nhớ địa chỉ của điều đầu tiên, nhưng các 1271 01:00:08,320 --> 01:00:10,530 địa chỉ bộ nhớ của một điều hơn. 1272 01:00:10,530 --> 01:00:14,360 Và sau đó là dereferences điều hành sao rằng con trỏ. 1273 01:00:14,360 --> 01:00:16,940 Và một lần nữa, chúng ta hãy xem. 1274 01:00:16,940 --> 01:00:18,664 Chúng tôi nhận được h một lần nữa. 1275 01:00:18,664 --> 01:00:20,980 >> HỌC SINH: Chính xác là gì dereference nghĩa là gì? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: tham chiếu đến là một từ ưa thích cho đi. 1277 01:00:23,650 --> 01:00:26,390 Đi đến đó và nhận được những gì đang có là dereference một con trỏ. 1278 01:00:26,390 --> 01:00:28,240 Nó chỉ là một từ ưa thích cho điều đó. 1279 01:00:28,240 --> 01:00:29,986 >> HỌC SINH: Nếu chúng ta muốn in toàn bộ chuỗi, có thể chúng tôi 1280 01:00:29,986 --> 01:00:31,930 làm con trỏ ký hiệu? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, chúng tôi sẽ tạm dừng ở đây. 1282 01:00:33,490 --> 01:00:35,480 Chúng ta sẽ kết thúc ở đây. 1283 01:00:35,480 --> 01:00:41,760 Ký hiệu cung cấp cho bạn địa chỉ của một vị trí, vì vậy khi bạn làm ký hiệu của 1284 01:00:41,760 --> 01:00:44,080 một biến, nó sẽ cho bạn địa chỉ nơi biến được lưu trữ. 1285 01:00:44,080 --> 01:00:48,580 Con trỏ ký hiệu sẽ cung cấp cho bạn địa chỉ của ptr nơi ptr là trong bộ nhớ. 1286 01:00:48,580 --> 01:00:50,140 >> Chúng tôi sẽ không đi vào với ví dụ này. 1287 01:00:50,140 --> 01:00:52,640 Bạn có thể tìm ra những những việc riêng của bạn. 1288 01:00:52,640 --> 01:00:55,740 Nhưng một lần nữa, điều này có thể thậm chí được gần gần một bit xa hơn những gì bạn cần phải biết 1289 01:00:55,740 --> 01:00:58,000 phạm vi này giữa kỳ - 1290 01:00:58,000 --> 01:00:59,070 hoặc bài kiểm tra này, chứ không phải. 1291 01:00:59,070 --> 01:01:00,270 Xin lôi. 1292 01:01:00,270 --> 01:01:03,770 >> Chúng tôi sẽ tiếp tục, bởi vì tôi sẽ muốn làm một mã hóa vấn đề 1293 01:01:03,770 --> 01:01:05,100 trước khi thời gian là lên. 1294 01:01:05,100 --> 01:01:09,340 Và chúng tôi đang đi vào mã những gì tôi nghĩ là hấp dẫn nhất của các 1295 01:01:09,340 --> 01:01:11,020 ví dụ, atoi. 1296 01:01:11,020 --> 01:01:14,520 Vì vậy, đây là một câu hỏi về một bài kiểm tra hai năm trước đây. 1297 01:01:14,520 --> 01:01:17,810 Và tôi có nó trên diễn đàn đây. 1298 01:01:17,810 --> 01:01:20,680 >> Người đã hỏi về các bài kiểm tra - 1299 01:01:20,680 --> 01:01:23,640 họ được tesxt nhiều hơn một chút trong các câu hỏi, nhưng tôi đã loại bỏ 1300 01:01:23,640 --> 01:01:26,640 văn bản vì nó là không cần thiết cho các mục đích của chúng tôi bây giờ. 1301 01:01:26,640 --> 01:01:29,180 Đó chỉ là một số nền tảng về những gì đã làm atoi. 1302 01:01:29,180 --> 01:01:31,425 Nhưng tất cả các bạn biết và rất quen thuộc với atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Tôi đề nghị bạn mã này trên một tờ giấy. 1304 01:01:35,620 --> 01:01:39,310 Tôi cũng đề nghị bạn sử dụng chiến lược mà chúng tôi đã đi qua 1305 01:01:39,310 --> 01:01:41,040 rất nhiều trong phần của chúng tôi. 1306 01:01:41,040 --> 01:01:44,130 Trước tiên, hãy chắc chắn rằng bạn hiểu những gì atoi của làm. 1307 01:01:44,130 --> 01:01:47,580 Vẽ một bức tranh hoặc đến với một số hình ảnh tinh thần của nó trong đầu của bạn. 1308 01:01:47,580 --> 01:01:51,120 Tiếp theo, viết ra giả cho việc này. 1309 01:01:51,120 --> 01:01:53,120 Trên các bài kiểm tra, nếu tất cả các bạn nhận được là giả, ít nhất bạn 1310 01:01:53,120 --> 01:01:54,550 đặt một cái gì đó xuống. 1311 01:01:54,550 --> 01:02:00,070 Và sau đó bản đồ giả mà lên C. Nếu bạn có một kiểm tra trong của bạn 1312 01:02:00,070 --> 01:02:03,760 giả, như kiểm tra xem một cái gì đó là 1, mà các bản đồ vào một nếu 1313 01:02:03,760 --> 01:02:05,750 điều kiện và vv. 1314 01:02:05,750 --> 01:02:07,850 Và cuối cùng, mã chương trình trong C. 1315 01:02:07,850 --> 01:02:15,000 >> Vì vậy, trở lại atoi và mất năm phút mã này trên một tờ 1316 01:02:15,000 --> 01:02:19,480 giấy, mà có lẽ là về số lượng thời gian bạn sẽ đi trên một 1317 01:02:19,480 --> 01:02:21,260 đố để atoi mã. 1318 01:02:21,260 --> 01:02:27,060 Năm đến 15 phút, năm 12, năm tới 10 phút, là về số lượng 1319 01:02:27,060 --> 01:02:30,150 thời gian bạn muốn chi tiêu này câu hỏi trong bài kiểm tra. 1320 01:02:30,150 --> 01:02:31,670 Vì vậy, mất năm phút bây giờ, xin vui lòng. 1321 01:02:31,670 --> 01:02:35,957 Và nếu bạn có bất kỳ câu hỏi, nâng cao bàn tay của bạn và tôi sẽ đi xung quanh. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [Đàm thoại SIDE] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, vì vậy đó là năm phút. 1326 01:08:37,580 --> 01:08:39,880 Đó có lẽ là về số lượng thời gian bạn muốn chi tiêu trên mà trên một bài kiểm tra, 1327 01:08:39,880 --> 01:08:42,120 có thể kết thúc thấp thời điểm đó. 1328 01:08:42,120 --> 01:08:44,010 Chúng tôi sẽ tóm tắt lại trong một chút. 1329 01:08:44,010 --> 01:08:45,740 Chúng ta hãy bắt đầu viết mã này. 1330 01:08:45,740 --> 01:08:49,479 Và nếu chúng ta không có được tất cả các cách thức thông qua, câu trả lời cho điều này và điều này 1331 01:08:49,479 --> 01:08:54,189 câu hỏi bài kiểm tra có sẵn, một lần nữa, Mùa thu năm 2011 là khi câu hỏi này 1332 01:08:54,189 --> 01:08:54,913 xuất hiện trên các bài kiểm tra. 1333 01:08:54,913 --> 01:08:57,830 >> Và nó là giá trị tám điểm trên các bài kiểm tra sau đó. 1334 01:08:57,830 --> 01:09:01,140 Tám điểm là trên cao, kết thúc của số lượng các điểm một cái gì đó có giá trị. 1335 01:09:01,140 --> 01:09:04,790 Hầu hết các câu hỏi trong phạm vi của 1-6 điểm. 1336 01:09:04,790 --> 01:09:08,500 Vì vậy, đây là một khó khăn hơn câu hỏi, chắc chắn. 1337 01:09:08,500 --> 01:09:09,750 Ai cũng có thể cho tôi bắt đầu? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Nói chung, những gì chúng ta đang đi muốn làm với điều này 1340 01:09:15,380 --> 01:09:17,550 chức năng atoi, hợp lý? 1341 01:09:17,550 --> 01:09:19,569 Những gì chúng ta muốn làm gì? 1342 01:09:19,569 --> 01:09:22,279 Vì vậy, chúng ta sẽ viết một số giả. 1343 01:09:22,279 --> 01:09:24,090 >> HỌC SINH: Chuyển đổi ký tự vào số nguyên. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Chuyển đổi ký tự vào số nguyên. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Vì vậy, có bao nhiêu nhân vật chúng tôi sẽ cần phải đi qua? 1347 01:09:30,870 --> 01:09:32,295 >> HỌC SINH: Tất cả trong số họ. 1348 01:09:32,295 --> 01:09:34,100 >> HỌC SINH: Tất cả các nhân vật trong chuỗi. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Tất cả các ký tự trong chuỗi. 1350 01:09:35,540 --> 01:09:42,180 Vì vậy, nếu chúng tôi muốn đi qua tất cả nhân vật trong một chuỗi, một điều là những gì 1351 01:09:42,180 --> 01:09:44,560 trong C, chúng tôi đã nhìn thấy rằng đã cho phép chúng tôi phải đi qua tất cả các 1352 01:09:44,560 --> 01:09:45,939 nhân vật trong một chuỗi? 1353 01:09:45,939 --> 01:09:46,819 >> SINH VIÊN: Một vòng lặp. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: Một vòng lặp. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Vì vậy, chúng ta sẽ lặp qua mỗi nhân vật trong s. 1357 01:09:55,330 --> 01:10:00,940 >> Sau đó, những gì chúng ta sẽ muốn làm khi chúng ta có được một nhân vật cụ thể? 1358 01:10:00,940 --> 01:10:02,480 Nói rằng chúng tôi đang nhận được thông qua 90. 1359 01:10:02,480 --> 01:10:03,460 Chúng tôi nhận được 9. 1360 01:10:03,460 --> 01:10:04,240 Đó là một nhân vật. 1361 01:10:04,240 --> 01:10:07,440 Những gì chúng tôi muốn làm gì với nhân vật 9? 1362 01:10:07,440 --> 01:10:10,082 >> HỌC SINH: Trừ từ nhân vật 0? 1363 01:10:10,082 --> 01:10:11,860 >> HỌC SINH: Thêm 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Trừ từ nhân vật 0? 1365 01:10:13,350 --> 01:10:13,800 >> HỌC SINH: Vâng. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Tại sao bạn muốn làm điều đó? 1367 01:10:15,573 --> 01:10:16,560 >> HỌC SINH: [nghe được] 1368 01:10:16,560 --> 01:10:17,010 giá trị. 1369 01:10:17,010 --> 01:10:18,380 Giá trị int của nó. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, vì vậy chúng ta lấy nhân vật 9, trừ nó từ 1371 01:10:21,580 --> 01:10:25,820 nhân vật 0 để có được một thực tế số nguyên 9. 1372 01:10:25,820 --> 01:10:27,070 Ngọt ngào. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Và làm thế nào để bạn biết nhân vật đó 9 trừ đi 0 nhân vật là 9? 1375 01:10:37,000 --> 01:10:39,222 Biểu đồ những gì bạn đã nhìn vào? 1376 01:10:39,222 --> 01:10:43,130 >> HỌC SINH: Có hợp lý chín nơi từ 9 đến 0. 1377 01:10:43,130 --> 01:10:44,620 Hoặc bạn có thể nhìn vào bảng ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: bảng mã ASCII. 1379 01:10:45,120 --> 01:10:46,490 Nhưng có, bạn đã đúng là tốt. 1380 01:10:46,490 --> 01:10:47,780 Vì vậy, chúng ta trừ đi 0. 1381 01:10:47,780 --> 01:10:49,010 Vì vậy, bây giờ chúng tôi có số nguyên 9. 1382 01:10:49,010 --> 01:10:49,970 Và làm những gì chúng tôi muốn làm với điều đó? 1383 01:10:49,970 --> 01:10:54,970 Nếu chúng ta có 90, đó là số nguyên đầu tiên chúng tôi đã, những gì chúng ta muốn làm gì? 1384 01:10:54,970 --> 01:10:58,180 >> HỌC SINH: Tôi muốn đưa vào một số nguyên tạm thời mảng, sau đó làm toán với nó 1385 01:10:58,180 --> 01:11:02,088 sau đó để làm cho nó vào một kết thúc. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> HỌC SINH: Bạn có thể bắt đầu vào cuối năm mảng và sau đó di chuyển về phía trước để 1388 01:11:06,990 --> 01:11:10,350 rằng mỗi khi bạn di chuyển về phía trước, bạn nhân nó bằng 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 Nghe có vẻ giống như một khá ý tưởng hấp dẫn. 1391 01:11:12,250 --> 01:11:16,040 Chúng ta có thể bắt đầu vào cuối mảng của chúng tôi, và chúng ta có thể sử dụng strleng. 1392 01:11:16,040 --> 01:11:17,030 Chúng ta có thể sử dụng strleng ở đây. 1393 01:11:17,030 --> 01:11:18,870 Chúng tôi sẽ có được chiều dài của chuỗi của chúng tôi. 1394 01:11:18,870 --> 01:11:20,100 Chúng tôi bắt đầu từ kết thúc. 1395 01:11:20,100 --> 01:11:29,170 Và + đầu tiên, chúng tôi chỉ đi mà số nguyên, và có lẽ chúng ta tạo ra như một 1396 01:11:29,170 --> 01:11:32,270 biến số nguyên mới lên hàng đầu nơi chúng tôi đang lưu trữ tất cả mọi thứ. 1397 01:11:32,270 --> 01:11:37,340 Vì vậy, chúng ta lặp qua tất cả các char trong s từ trở lại phía trước, chúng ta trừ 0, và 1398 01:11:37,340 --> 01:11:42,790 sau đó chúng tôi mang nó, và tùy thuộc vào nó ở đâu, chúng ta nhân nó 1399 01:11:42,790 --> 01:11:45,860 bởi một sức mạnh của 10. 1400 01:11:45,860 --> 01:11:50,644 Bởi vì một trong những đầu tiên, những gì chúng tôi nhân vật ngoài cùng bên phải của? 1401 01:11:50,644 --> 01:11:51,440 >> HỌC SINH: 10 đến 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 đến 0. 1403 01:11:53,170 --> 01:11:56,010 Những gì chúng ta nhân thứ hai nhân vật ngoài cùng bên phải của? 1404 01:11:56,010 --> 01:11:57,450 >> HỌC SINH: [nghe được]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Cái gì? 1406 01:11:57,960 --> 01:11:59,150 >> HỌC SINH: 10 đến 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 đến 1. 1408 01:12:00,420 --> 01:12:03,754 Các ký tự bên phải thứ ba? 1409 01:12:03,754 --> 01:12:04,580 >> HỌC SINH: 10 đến 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 đến 2. 1411 01:12:05,350 --> 01:12:07,200 >> HỌC SINH: Xin lỗi, tôi không hiểu những gì chúng ta đang làm ở đây. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, chúng ta hãy quay trở lại, sau đó. 1413 01:12:08,640 --> 01:12:12,500 Vì vậy, chúng tôi sẽ nhận được thông qua trong một chuỗi. 1414 01:12:12,500 --> 01:12:14,470 Bởi vì chúng tôi đang viết atoi. 1415 01:12:14,470 --> 01:12:15,260 Vì vậy, chúng tôi nhận được thông qua trong một chuỗi. 1416 01:12:15,260 --> 01:12:17,640 Nói rằng chúng tôi đang nhận được thông qua trong chuỗi 90. 1417 01:12:17,640 --> 01:12:19,930 >> Điều đầu tiên chúng ta sẽ làm là thiết lập một biến số nguyên mới mà chúng tôi 1418 01:12:19,930 --> 01:12:22,150 chỉ cần đi để tạo ra là số nguyên mới của chúng tôi. 1419 01:12:22,150 --> 01:12:24,630 Đó là những gì chúng ta sẽ trở lại ở cuối. 1420 01:12:24,630 --> 01:12:30,110 Chúng tôi cần phải đi qua tất cả các nhân vật trong chuỗi bởi vì chúng tôi đã xác định 1421 01:12:30,110 --> 01:12:34,430 rằng chúng ta cần phải chạm vào mỗi một và sau đó thêm nó vào nguyên mới của chúng tôi. 1422 01:12:34,430 --> 01:12:36,330 >> Nhưng chúng ta không thể chỉ cần thêm nó như là một số. 1423 01:12:36,330 --> 01:12:38,270 Chúng ta không thể chỉ mất 9 và thêm 9 đến số nguyên của chúng tôi. 1424 01:12:38,270 --> 01:12:40,560 Nó phụ thuộc vào những gì diễn ra nó đang ở trong chuỗi. 1425 01:12:40,560 --> 01:12:42,960 Chúng ta sẽ cần phải nhân nó bằng một sức mạnh của 10. 1426 01:12:42,960 --> 01:12:45,580 Vì đó là cách cơ bản 10 công trình. 1427 01:12:45,580 --> 01:12:49,050 >> Vì vậy, chúng ta sẽ nhận được thực tế nhân vật hoặc các số nguyên thực tế 1428 01:12:49,050 --> 01:12:53,860 số, bằng cách trừ nhân vật 0 từ nhân vật 9 như chúng tôi đã làm với 1429 01:12:53,860 --> 01:12:57,560 trừ vốn ký tự A từ bất kỳ nhân vật chúng tôi đã có trong một trong 1430 01:12:57,560 --> 01:12:58,120 những vấn đề. 1431 01:12:58,120 --> 01:13:04,190 Vì vậy, chúng tôi sẽ thực sự có được một số từ 0 đến 9 lưu như một số thực, và chúng tôi sẽ 1432 01:13:04,190 --> 01:13:07,590 nhân với một sức mạnh của 10 phụ thuộc vào nơi chúng tôi đang trong chuỗi. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Và sau đó chúng ta sẽ thêm nó trở lại vào biến số nguyên mới của chúng tôi. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Vì vậy, điều này sẽ như thế nào sẽ được - chúng ta sẽ rút ra ở đây. 1437 01:13:37,890 --> 01:13:40,086 Nếu chúng ta có được thông qua trong chuỗi 90 - 1438 01:13:40,086 --> 01:13:41,336 >> HỌC SINH: [nghe được]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Nhưng atoi mất một chuỗi. 1441 01:13:45,540 --> 01:13:46,350 Vì vậy, chúng ta sẽ đi qua việc tổ chức. 1442 01:13:46,350 --> 01:13:49,900 Chúng tôi sẽ có được thông qua trong 90. 1443 01:13:49,900 --> 01:13:51,540 Chúng tôi đi từ phía sau ra phía trước. 1444 01:13:51,540 --> 01:13:53,920 Chúng ta lấy 0. 1445 01:13:53,920 --> 01:13:55,080 >> HỌC SINH: Tôi xin lỗi. 1446 01:13:55,080 --> 01:13:55,880 Có lẽ đây là ngu ngốc. 1447 01:13:55,880 --> 01:13:59,440 Nếu chúng ta nhận được thông qua trong một chuỗi, tại sao là 90 điều chúng ta 1448 01:13:59,440 --> 01:14:00,260 nhận được thông qua trong? 1449 01:14:00,260 --> 01:14:03,160 Vì 90 là một số nguyên. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Bởi vì atoi mất chuỗi và biến nó thành số nguyên 1451 01:14:06,820 --> 01:14:08,320 đại diện của chuỗi. 1452 01:14:08,320 --> 01:14:13,650 Nhưng chuỗi 90 không phải là số nguyên 90 hoặc 90 số. 1453 01:14:13,650 --> 01:14:17,920 Chuỗi 90 là một mảng của hai hoặc ba nhân vật, chứ không phải, 9 1454 01:14:17,920 --> 01:14:22,740 nhân vật, nhân vật 0, và các dấu gạch chéo ngược 0 ký tự. 1455 01:14:22,740 --> 01:14:26,260 >> Và chúng tôi đang viết atoi bởi vì, cho Ví dụ, khi bạn thực hiện lệnh 1456 01:14:26,260 --> 01:14:30,230 đối số dòng, và nó sẽ được lưu trong argv, nó sẽ được lưu như một chuỗi. 1457 01:14:30,230 --> 01:14:32,940 Nhưng nếu bạn muốn xử lý nó như một số, bạn cần phải chuyển đổi nó vào một 1458 01:14:32,940 --> 01:14:34,700 nguyên thực tế. 1459 01:14:34,700 --> 01:14:37,210 Mà chúng tôi đã làm một bộ vấn đề của chúng tôi. 1460 01:14:37,210 --> 01:14:38,800 Mà chúng tôi đã làm trong một số bộ vấn đề của chúng tôi. 1461 01:14:38,800 --> 01:14:41,690 Tất cả mọi người mà mất một số nguyên như là một đối số dòng lệnh. 1462 01:14:41,690 --> 01:14:46,490 Vì vậy, đó là lý do tại sao chức năng atoi của chúng tôi phải mất một chuỗi. 1463 01:14:46,490 --> 01:14:51,910 >> Vì vậy, một lần nữa, trong ví dụ của chúng tôi ở đây, chúng tôi sẽ mất người cuối cùng. 1464 01:14:51,910 --> 01:14:55,050 Chúng ta sẽ trừ nhân vật 0 từ nó, bởi vì các ký tự 0 1465 01:14:55,050 --> 01:14:58,810 trừ đi các nhân vật 0 cung cấp cho bạn con số thực tế 0, theo 1466 01:14:58,810 --> 01:15:00,950 toán học ASCII mà chúng ta làm. 1467 01:15:00,950 --> 01:15:04,870 >> Bởi vì nhân vật được biểu diễn như là khác với thực tế của họ - 1468 01:15:04,870 --> 01:15:08,830 nhân vật một, ví dụ, chữ thường một là 97. 1469 01:15:08,830 --> 01:15:10,260 Nó không phải là - oops! 1470 01:15:10,260 --> 01:15:13,290 Nó không phải bất cứ điều gì bạn mong đợi nó được, 0, ví dụ. 1471 01:15:13,290 --> 01:15:16,200 Vì vậy, bạn phải trừ đi nhân vật một để có được 0. 1472 01:15:16,200 --> 01:15:18,950 >> Vì vậy, chúng ta sẽ làm điều đó đây để có được con số thực tế. 1473 01:15:18,950 --> 01:15:22,560 Và sau đó chúng ta sẽ nhân với một sức mạnh của 10 tùy thuộc vào nơi nó 1474 01:15:22,560 --> 01:15:27,030 là trong chuỗi, và sau đó đi mà và thêm nó vào giữ chỗ của chúng tôi 1475 01:15:27,030 --> 01:15:32,520 biến vì vậy chúng tôi có thể đến với nguyên mới của chúng ta. 1476 01:15:32,520 --> 01:15:35,080 Điều đó có ý nghĩa với tất cả mọi người? 1477 01:15:35,080 --> 01:15:37,730 >> Vì vậy, chúng tôi sẽ không để mã này ngay bây giờ, vì chúng tôi 1478 01:15:37,730 --> 01:15:38,830 nhận được nhiều thời gian. 1479 01:15:38,830 --> 01:15:40,860 Tôi xin lỗi vì thời gian đó. 1480 01:15:40,860 --> 01:15:44,620 Nhưng đây là những gì, hy vọng, bạn sẽ có thể làm trên các bài kiểm tra - ở 1481 01:15:44,620 --> 01:15:47,710 Ít nhất, có được giả này viết ra. 1482 01:15:47,710 --> 01:15:50,840 >> Và sau đó, nếu chúng ta viết giả, trên thực tế, chúng ta có thể làm điều này 1483 01:15:50,840 --> 01:15:51,490 khá nhanh chóng. 1484 01:15:51,490 --> 01:15:55,230 Mỗi dòng ý kiến ​​chúng tôi, chúng tôi đã viết đây dịch để về 1485 01:15:55,230 --> 01:15:56,970 một dòng mã C. 1486 01:15:56,970 --> 01:16:01,780 Khai báo một biến mới, bằng văn bản một vòng, một số trừ, một số 1487 01:16:01,780 --> 01:16:07,070 nhân, và một số nhiệm vụ. 1488 01:16:07,070 --> 01:16:09,020 Chúng tôi có lẽ cũng muốn viết một dòng trở lại. 1489 01:16:09,020 --> 01:16:12,040 Chúng tôi cũng có thể muốn đặt một số kiểm tra ở đây. 1490 01:16:12,040 --> 01:16:12,655 Yeah. 1491 01:16:12,655 --> 01:16:15,720 >> HỌC SINH: Vì vậy, chúng ta có thể điều trị s là chuỗi thực tế? 1492 01:16:15,720 --> 01:16:18,730 Bởi vì tôi biết nó chỉ là một địa chỉ. 1493 01:16:18,730 --> 01:16:22,090 Như, làm thế nào bạn sẽ nhận được chiều dài của chuỗi được thông qua thông qua? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Vậy làm thế nào đã làm chiều dài của một chuỗi? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> HỌC SINH: strlen, yeah. 1497 01:16:26,660 --> 01:16:30,550 Nhưng bạn có thể đặt làm các Lập luận cho rằng? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Vì vậy, strlen có một ngôi sao char. 1499 01:16:34,620 --> 01:16:38,090 Và nó sau đó sao char, và nó giữ đếm cho đến khi nó được đến một 1500 01:16:38,090 --> 01:16:41,865 dấu gạch chéo ngược 0. strlen đã thực sự một trong những chương trình khác mà chúng tôi 1501 01:16:41,865 --> 01:16:42,850 đã đi vào mã. 1502 01:16:42,850 --> 01:16:44,560 Đó là một trong những tốt để mã. 1503 01:16:44,560 --> 01:16:47,270 Một trong đó là một chút dễ dàng hơn, bởi vì nếu bạn sẽ nghĩ về điều đó 1504 01:16:47,270 --> 01:16:47,830 khái niệm - 1505 01:16:47,830 --> 01:16:51,620 Tôi chỉ nói ra - strlen sau một con trỏ và giữ đi và 1506 01:16:51,620 --> 01:16:54,210 đếm và theo dõi cho đến khi bạn đạt đến một dấu gạch chéo ngược 0. 1507 01:16:54,210 --> 01:16:56,530 >> HỌC SINH: OK, đã nhận nó. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Vì vậy, tốt nhất may mắn trên bài kiểm tra 0 vào ngày mai. 1509 01:17:00,200 --> 01:17:03,170 Nếu bạn có bất kỳ câu hỏi, tôi sẽ được bên ngoài sau này. 1510 01:17:03,170 --> 01:17:05,610 Cảm thấy tự do để gửi email cho tôi. 1511 01:17:05,610 --> 01:17:08,480 Tiếp cận với TF của riêng bạn nếu bạn không trong phần của tôi, hoặc có được của tôi 1512 01:17:08,480 --> 01:17:10,005 email nếu bạn muốn nó. 1513 01:17:10,005 --> 01:17:13,140 >> Nếu bạn muốn freak ra và chỉ cần gửi cho tôi một email, một email freakout, tôi sẽ 1514 01:17:13,140 --> 01:17:16,710 gửi cho bạn trở lại, như một khuôn mặt cười, hoặc, như một trò đùa hoặc một cái gì đó. 1515 01:17:16,710 --> 01:17:18,190 Vì vậy, cảm thấy tự do để làm điều đó là tốt. 1516 01:17:18,190 --> 01:17:20,750 Chúc may mắn một lần nữa, và tôi sẽ xem tất cả các bạn vào tuần tới. 1517 01:17:20,750 --> 01:17:23,435