[MUSIC CHƠI] Camille REKHSON: Hi, tất cả mọi người. Chào mừng bạn đến đố CS50 zero phiên xét. Tôi Camille. Và tôi sẽ được đi trên một số chủ đề với bạn kẻ ngày hôm nay để giúp bạn chuẩn bị cho bài kiểm tra. Vì vậy, đây là chúng ta không thấu đáo danh sách các chủ đề mà bạn nên quen thuộc với các bài kiểm tra. Chúng được lấy trực tiếp từ các giáo trình. Tôi biết nó có vẻ như rất nhiều. Nhưng tôi tin tưởng, bạn đã học được tất cả những điều này trong vài tuần qua. Vì vậy, chúng tôi chắc chắn sẽ được đi hơn rất nhiều trong số này ngày hôm nay. Nhưng cũng có một số thời gian trên của bạn riêng để xem xét những điều này. Và nếu bạn không quen thuộc với những gì một số những điều này là, chắc chắn rằng bạn hỏi một người trong chúng ta. Ngoài ra, đối với từ chính thức trên các bài kiểm tra, đi đến liên kết này. Điều này sẽ có tất cả các thông tin mà căn phòng bạn cần phải đi ở, chia theo thứ tự abc, và cũng có một số lời khuyên về những gì vật liệu bạn nên được học tập, và những gì sắp xếp các câu hỏi đố bạn có thể mong đợi. Vì vậy, hãy chắc chắn kiểm tra mà ra. Ngoài ra, một số lời khuyên cho bạn khi đang chuẩn bị cho kỳ thi. Thực hành mã hóa trên giấy. Tôi biết bạn đã nhận được sử dụng để có kiểm tra IDE cho lỗi của bạn cho bạn, và it's-- khi bạn đang gõ nó lên, đó là một chút khác nhau hơn so với việc để viết những điều trên. Vì vậy, thực hành làm một số mã hóa. Một số chức năng tốt để thực hành làm là strlen và atoi, nhìn thấy nếu bạn có thể viết những người ra vào của riêng bạn. Hãy làm quen với các bài tập. Hầu hết các năm có câu hỏi có liên quan để một số vật liệu vấn đề thiết lập. Vì vậy, hãy chắc chắn rằng bạn hiểu làm thế nào để làm tất cả các bài tập. Hãy thử làm một số các câu đố cũ theo thời hạn 75 phút. Rất nhiều các câu đố có thể được loại dài. Vì vậy, đó là một cách tốt để cung cấp cho cho mình một số thực hành, và bao lâu nó sẽ đưa bạn, và làm thế nào bạn nên phân chia thời gian của bạn để đảm bảo bạn hoàn thành tất cả mọi thứ bởi cuối. Và cũng có thể, bạn sẽ có được một trang một, hai tấm chiếu mặt bạn có thể viết bất cứ điều gì bạn muốn về để sử dụng trong các bài kiểm tra. Vì vậy, khi bạn đang tạo rằng, đó cũng là cách thực sự tuyệt vời để nghiên cứu vì bạn sẽ loại được xem xét điều như bạn đang viết nó. Vì vậy, bất kỳ câu hỏi chung về các bài kiểm tra, hoặc làm thế nào nó hoạt động? Yeah. Đung Will rằng danh sách các chủ đề mà bạn chỉ thấy được có sẵn cho chúng tôi Trực tuyến? Camille REKHSON: toàn bộ Slide này chương trình sẽ được đăng tải trên website. Ngoài ra, những video của xét ngày nay Phiên họp sẽ được trên trang web. Vì vậy, đừng lo lắng quá nhiều về viết những điều xuống suốt. Tất cả nó sẽ ở đó. Bất kỳ câu hỏi khác? OK, vì vậy, hãy bắt đầu. Vì vậy, có một điều phải làm quen với là các kiểu dữ liệu khác nhau và kích thước mà họ đảm nhận. Đây cũng có thể là một điều tuyệt vời để viết xuống trên tấm chiếu của bạn, chỉ để chắc chắn rằng bạn nhớ tất cả các. But-- vậy chars là 1 byte. Ints là 4 byte. Một dài, dài, đó là cơ bản hơn không gian cho một số nguyên, là 8 byte. Một float là 4 byte. Một đôi, mà về cơ bản cung cấp cho bạn thêm không gian để lưu trữ một phao, là 8 byte. Và sau đó là một con trỏ cũng là 8 byte. Bất kỳ câu hỏi nào về những? Vì vậy, nhị phân là một chủ đề chúng tôi đã bao phủ một chút trong học kỳ này. Vì vậy, chúng ta hãy làm một số thực hành với chuyển đổi giữa nhị phân và thập phân. Vì vậy, bất cứ ai có bất cứ ý tưởng gì rằng một trong những đầu tiên sẽ là gì? Bất cứ người nào? Vâng, đó là 42. Vì vậy, nếu bạn nhớ, mỗi những nơi trong hệ nhị phân về cơ bản là giống như 2 quyền lực của nơi đó. Vì vậy, mà vị trí đầu tiên là 2 đến sức mạnh 0. Và chúng ta có 0 có, vì vậy không có gì ở đó. Địa điểm tiếp theo là 2 đến sức mạnh đầu tiên. Và chúng tôi có một 1 có, vì vậy đó là cơ bản một 2. Địa điểm tiếp theo là 2 thứ hai, đó là 4. Chúng tôi không có bất cứ điều gì ở đó. Địa điểm tiếp theo trên là từ 2 đến thứ ba, đó sẽ là 8. Và chúng ta có ai ở đó. Và chúng tôi tiếp tục đi. Đó last-- xa nhất đến một trái nhất là nơi chúng tôi có 32. Và như vậy, chúng tôi về cơ bản có 32 cộng với 8 cộng với 2 để có được 42. Bất kỳ câu hỏi? Đung subscript để làm gì? Camille REKHSON: subscript về cơ bản cho chúng ta biết nó nhị phân. Vì vậy, có một 2 có. Nếu có like-- trong tiếp theo một, hoặc khi chúng ta đang chuyển đổi số thập phân sang nhị phân, có một 10 cho ta thấy rằng con số này là ban đầu trong hệ thập phân. Đung Cảm ơn bạn. Camille REKHSON: Yeah. Bất kỳ câu hỏi khác trên một trong những? OK, vì vậy hãy thử tiếp theo một sau đó, số thập phân sang nhị phân. Vì vậy, lấy 50 và đưa rằng trong hệ nhị phân. Làm thế nào bạn sẽ làm điều đó? Yeah. Đung 110.010. Camille REKHSON: Yes. Vì vậy one-- một cách dễ dàng để suy nghĩ về chuyển đổi từ thập phân sang nhị phân là đối với: nó thường giúp để viết ra những gì các quyền hạn khác nhau của 2 thì có. Và sau đó đi qua nó, và xem bất cứ ai cao nhất của những người là bạn có thể đặt vào số thập phân mà không đi qua nó. Vì vậy, trong trường hợp này, một trong những các quyền hạn của 2 là 32. Vì vậy, 32 đi vào 50. Nhưng sức mạnh tiếp theo lên sẽ là 64, mà rõ ràng là không phù hợp với 50. Vì vậy, các cao nhất chúng tôi có được là 32. Người tiếp theo xuống đến 16. Và 32 cộng với 16 chỉ có 48 là. Vì vậy, mà vẫn phù hợp với 50. Vì vậy, chúng tôi có 1 trong hai loại trên. Và sau đó, nếu chúng ta tiếp tục đi xuống, điều duy nhất chúng ta không cần rời là 2 nhiều hơn để có được 48-50. Vì vậy, sau đó chúng tôi có một 1 ở vị trí đó, và một 0 ở vị trí cuối cùng. Bởi vì không có gì trong 2 đến nơi 0-th. Câu hỏi về chuyển đổi số thập phân thành dạng nhị phân? Vì vậy, bây giờ hãy thử làm Ngoài ra một số nhị phân. Làm thế nào khi bạn thêm những hai lên? Yeah. Đung 11100. Camille REKHSON: Yes. Vì vậy, làm Ngoài ra trong hệ nhị phân là khá nhiều giống như làm nó trong hệ thập phân. Ngoại trừ nếu bạn có hai con 1 của thêm vào với nhau, 1 + 1 là 2, nhưng 2 trong hệ nhị phân là 1 0. Vì vậy, bạn phải mang theo 1, và giữ mang nó cho những cặp đôi cột. Và khác với đó, chỉ cần thêm bình thường. Bất kỳ câu hỏi về điều đó? Yeah. Đung Xin lỗi, nơi cuối cùng là gì? Có sáu số. Vì vậy, các cột ngoài cùng bên trái, những gì giá trị của nó là? Camille REKHSON: Trên một mức đáy này? Đung Trên đỉnh một, cho 50. Camille REKHSON: Đối với 50? Oh, vì vậy ngoài cùng bên trái là một trong 32. Đung 32? Camille REKHSON: Yeah, vì vậy nó sẽ là 32, 16, sau đó 8, 4, 2, 0-- hoặc 1. Vâng, đó là 2 0, đó là 1. Yeah. Bất kỳ câu hỏi khác về điều này? OK, vậy thì chúng ta sẽ làm một chút với thập lục phân. Vì vậy, đây có thể là một chút ít quen thuộc, vì tôi biết chúng tôi đã thực hiện nhiều hơn với nhị phân. Nhưng một cách thực sự tốt để suy nghĩ về hệ thập lục phân là để phá vỡ một nhị phân số lượng thành 4 khối bit. Bởi vì mỗi 4 bit của một số nhị phân là cơ bản một trong các số thập lục phân. Vì vậy, nếu chúng ta có một đầu tiên này, chúng tôi về cơ bản đã tám 1. Vì vậy, những người có thể được chia up-- Đung 255. Camille REKHSON: Nói rằng một lần nữa. Đung 255 trong số thập phân, hoặc 0xFF trong hệ thập lục phân. Camille REKHSON: Vâng, đúng vậy. Vì vậy, nếu bạn chia mà lên thành hai khối 4-bit, chúng tôi về cơ bản có bốn bộ 1. Đó là maximum-- về cơ bản là tối đa chúng ta có thể nhận được với 4-bit trong hệ nhị phân. Và tối đa chúng tôi có thể nhận được cho rằng trong hệ thập lục phân sẽ là một F. Vì vậy, chúng ta sẽ có hai F. Bất kỳ câu hỏi về điều đó? Yeah? Đung Bạn có thể lặp lại điều đó. Camille REKHSON: Chắc chắn rồi. Vì vậy, mỗi, về cơ bản, nơi thập lục phân là tương đương với 4-bit của một số nhị phân. Vì vậy, cách đơn giản nhất để làm điều này là để phá vỡ nó ra thành những phần 4-bit. Vì vậy, trong trường hợp này, chúng tôi có tám 1. Vì vậy, nếu chúng ta chia những thành hai khối 4-bit, chúng ta sẽ có hai bộ bốn 1. Và mỗi một trong những tương đương với F. Nếu bạn nghĩ rằng about-- Tôi biết bộ não của chúng ta loại dây để suy nghĩ hơn thông qua chữ số thập phân, bởi vì đó là những gì chúng tôi đang sử dụng để. Vì vậy, một cách để bạn có thể nghĩ về nó như là bốn 1 là tương đương với 15 trong số thập phân. Và 15 trong hệ thập lục phân là F. Vì vậy, đó là Cách khác, bạn có thể nghĩ rằng thông qua nó. Yeah. Đung 0x là cho cái gì? Camille REKHSON: Các 0x biểu thị rằng nó là hệ thập lục phân. Vì vậy, chúng ta chỉ cần đặt mà tiền tố có, bình thường. Các câu hỏi khác về điều đó. OK, vì vậy hãy thử đi cách khác sau đó. Trong trường hợp này, chúng tôi xin lỗi have--? Đung [không nghe được]. Camille REKHSON: Chúng tôi đang đi để nhị phân. Vì vậy, đi theo cách khác. Nhưng trong trường hợp này, chúng tôi có 5 và A. Vì vậy, nếu chúng ta suy nghĩ về điều này, nếu mỗi those-- 5 và A là cả hai sẽ đại diện cho một đoạn 4-bit, làm thế nào bạn có thể nói 5 trong hệ nhị phân? Đung 0101. Camille REKHSON: Yeah, vì vậy đó là một phần 0101. Và sau đó làm thế nào bạn sẽ nói A in-- Đung 10. Camille REKHSON: Say it-- xin lỗi? Đung 10. Camille REKHSON: Yeah, vì vậy đó là phần thứ hai của nó. Và sau đó, nếu bạn đặt hai với nhau, đó là làm thế nào bạn có được đầy đủ nhị phân cho các hệ thập lục phân. Yeah? Đung Để biết rằng A là 1010, bạn phải ghi nhớ nó? Hoặc bạn có thể like-- Camille REKHSON: Vì vậy, nếu you-- các differe-- vậy khi bạn đang đi qua nhị phân, về cơ bản nhị phân có 0 tới 9 và sau đó A đến F là 16 điều của nó. Vì vậy, nếu tất cả các cách từ 0 đến 9-- nếu you-- 9 và sau đó A, về cơ bản nếu chúng ta chuyển đổi nó sang thập phân A sẽ như 10, B sẽ giống như 11. Và nếu bạn nghĩ về nhị phân 1010 là 8 và 2, bởi vì những người là hai nơi mà thêm đến 10, trong đó là chính xác những gì A là tương đương. Vì vậy, đó là loại một cách dễ dàng cách để suy nghĩ về điều đó. Các câu hỏi khác về hệ thập lục phân. OK, vì vậy bây giờ chúng ta sẽ mất một nhìn vào toán tử trên bit. Vì vậy, những có thể chắc chắn đi lên trên các bài kiểm tra. Tôi biết chúng tôi có không làm việc với họ rất nhiều. Nhưng chúng tôi chỉ cần đi làm một chút xem xét trong số này. Vì vậy, hy vọng đây sẽ là một chút quen thuộc hơn với bạn. Vì vậy, sáu nhà khai thác Bitwise rằng chúng tôi đã được liệt kê ở đây. Và họ cho chúng tôi thao tác bit riêng lẻ. Vì vậy, các toán tử AND là một ký hiệu duy nhất. Đừng nhầm lẫn rằng với dấu và đôi, đó là hợp lý và có cho phép chúng ta so sánh hai điều. Các đơn VÀ là làm thế nào chúng ta có thể thao tác điều trên bit. Vì vậy, điều này sẽ cho chúng ta những kết quả của 1 nếu cả hai của các đối số mà chúng ta đang so sánh là same-- hoặc là 1. Và các thanh dọc, OR, sẽ cung cấp cho chúng tôi 1 nếu ít nhất một trong số họ là 1. Vì vậy, về cơ bản chính xác những gì những lời ám chỉ. AND, nếu hai bit là 1, 1 và 1 cho chúng ta 1. Nhưng với sự OR, nếu nó là 0 hoặc 1, hoặc 1 hoặc 1, trong cả hai trường hợp, chúng tôi có 1 như là một trong số họ. Vì vậy, sau đó chúng ta sẽ có được một 1. Đung bạn có ý nghĩa gì mà nó nói nó sẽ cho 1? Camille REKHSON: Các kết quả. Loại, giống như bạn would-- nếu bạn đã làm 0 và 1, Kết quả đó sẽ là 1-- hoặc 0 và 1 với kết quả của đó sẽ là 0, xin lỗi. Vâng, đó là loại của Kết quả của biểu thức. Và sau đó, biểu tượng caret này là XOR, OR hoặc độc quyền. Vậy có nghĩa là độc quyền một hoặc chính xác một trong hai đối số bằng 1. Và sau đó nó sẽ cung cấp cho bạn 1. Ít dòng nguệch ngoạc là toán tử NOT. Vì vậy, không giống như phần còn lại của họ, hoạt động trên một cặp bit, các nhà điều hành không chỉ mất một chút, và sẽ lật nó. Vì vậy, nếu bạn give-- nếu bạn làm KHÔNG 0, nó sẽ cung cấp cho bạn 1. Và nếu bạn làm KHÔNG 1, nó sẽ cho bạn 0. Yeah? Đung sự khác biệt là gì giữa OR với một dòng và OR với hai? Camille REKHSON: Vậy OR với hai dòng là OR logic. Vì vậy, đó là để so sánh hai số nguyên đầy đủ, hoặc two-- để xem mọi việc đều bình đẳng. Hay như việc này là bằng này, HOẶC này là tương đương với loại điều này. Trong khi đó, một thanh OR, là để làm những việc trên bit. Yeah. Đung bạn có ý nghĩa gì bởi bitwise? Camille REKHSON: Vậy bitwise đang làm việc trực tiếp với các bit trong hệ nhị phân. Đung Oh, tôi nhìn thấy. Camille REKHSON: Yeah, vì vậy làm việc với 0 và 1. Chúng tôi sẽ làm một vài ví dụ về điều này sau khi, chỉ vì vậy nó không quá khó hiểu. Và sau đó hai người cuối cùng là dịch trái và dịch phải. Đó là cơ bản hai ít hơn dấu hiệu hoặc hai lớn hơn dấu hiệu. Và họ chuyển sang bit số lượng nhất định các địa điểm mà bạn cung cấp cho nó trong hướng. Vì vậy, nó có thể sẽ thay đổi nó sang trái, hoặc sang phải. Yeah? Đung cú pháp cho chạy là gì? Camille REKHSON: Chúng ta sẽ đi qua một ví dụ trong một giây. Vì vậy, hy vọng, mà sẽ giúp đỡ. Bất kỳ câu hỏi trên chỉ những gì lên đây, before-- OK. Vì vậy, đi qua một số ví dụ. Hãy bắt đầu với những VÀ những người thân. Những gì chúng ta sẽ nhận được nếu chúng ta đã làm 0 AND 1? Đung 0. Camille REKHSON: OK, và nếu chúng ta đã làm 1 VÀ 1? Đung 1. Camille REKHSON: Yeah, nếu những gì chúng tôi đã làm 0 HOẶC một? Đung 1. Camille REKHSON: Làm thế nào về 1 OR 1? Đung 1. Camille REKHSON: OK, làm thế nào về 0 XOR 1? Đung 1. Camille REKHSON: Và 1 XOR 1? Đung 0. Camille REKHSON: Các bạn là tốt. Làm thế nào về NOT 0? Đung 1. Camille REKHSON: Và KHÔNG 1? Đung 0. Camille REKHSON: OK, và sau đó điều này cuối cùng một là một một chút với sự chuyển dịch. Vì vậy, nếu chúng ta bước đầu thiết lập x là 8, và sau đó y là x chuyển sang trái 3, gì mà có thể cung cấp cho chúng ta? Đung [không nghe được]. Camille REKHSON: Nói rằng một lần nữa. Đung [không nghe được]. Camille REKHSON: Vì vậy, điều này thực sự cho chúng ta 64. Đung [không nghe được]. Camille REKHSON: Vì vậy, tôi chỉ sẽ viết này lên đây, vì vậy điều này làm cho một chút cảm giác. Nếu chúng tôi có 2 đến 0, 2 1, 2 đến 2, 2-3 là có được 8. Và nếu chúng ta muốn thay đổi nó nhiều hơn 3 bit bên trái, đó sẽ là 2 đến 4, 2 đến 5, và 2 cho 6, và 2 đến 6 là 64. Điều đó có ý nghĩa? Vâng. Đung Liệu sự thay đổi đó tất cả của 1 và 0 của các số nhị phân để the-- Camille REKHSON: Yes. Và bạn sẽ không phải lo lắng về đố vui về những việc tiêu cực. Chúng tôi sẽ không làm cho bạn đối phó với thay đổi tiêu cực trong bất kỳ cách nào. Bất kỳ câu hỏi khác về việc này? Vâng. Đung Nếu nó chuyển sang bên phải, là bất cứ điều gì mà wasn't-- bất cứ điều gì đã không được ban một phần của điều 0? Camille REKHSON: Yeah, bạn sẽ chỉ cần thêm 0 trên trong bản gốc. Yeah. Đung Vì vậy, những gì mà 100 chuyển sang phải ba lần? Camille REKHSON: 100 chuyển sang phải, do đó sẽ mất tất cả các 1 và 0 của và chỉ chuyển chúng bên phải nhiều lần như bạn nó chuyển sang bên phải. Đung [Không nghe thấy]? Camille REKHSON: Vâng, 100-- là bạn nói về 100 trong hệ nhị phân, hoặc 100 trong hệ thập phân? Đung Tôi xin lỗi, 100 trong hệ nhị phân. Camille REKHSON: 100 trong hệ nhị phân, nếu bạn chuyển nó vào right-- nếu bạn chuyển sang bên phải một lần, nó sẽ trở thành 10. Nếu bạn chuyển nó sang bên phải hai lần, nó sẽ trở thành 001. Và sau đó, nếu bạn thay đổi nó một lần nữa, bạn loại mất chút. Yeah, đó chỉ là 0. Bất kỳ câu hỏi khác về điều này? Vâng. Đung Vì vậy, sau đó nó sẽ trở thành 000. Camille REKHSON: Yes. OK, vì vậy chúng ta hãy đi qua một chút chút về toán học ASCII. Vì vậy, nhân vật có thể chất được coi là số nguyên dựa trên các giá trị ASCII của họ. Vì vậy, nếu chúng tôi ngồi int A bằng 65, int B bằng A cộng với 1, int char C bằng D trừ đi 1, và char D bằng 68, điều gì sẽ in ra ở phía dưới? Vì vậy, chúng tôi đang in these-- chúc lành cho you-- chúng tôi in ấn các tất cả ra như ký tự dựa trên phần trăm C. Vì vậy, chúng tôi về cơ bản đã in ra các giá trị đặc trưng của tất cả bốn của các biến này. Như một gợi ý, 65 là giá trị ASCII vốn A. Có lẽ đó giúp. Gì? Đung ABCD. Camille REKHSON: Yeah, vì vậy này sẽ in ra chính xác ABCD bởi vì chúng tôi thiết lập int A bằng giá trị ASCII của A. Vì vậy, nếu chúng ta in mà ra như là một nhân vật, chúng ta chỉ có được vốn A, Một cộng 1 có thể là vốn B trong ASCII. D trừ đi 1 có thể là vốn C trong ASCII. Và 68 là giá trị ASCII D. Các câu hỏi về ASCII? Vâng. Đung Vì vậy, các dấu ngoặc kép quanh A, không có sự thay đổi A đến ASCII? Camille REKHSON: Nó uses-- nó dấu nháy đơn count-- quanh A làm cho nó một ký tự. Và nếu bạn đang đối phó với nó trong số form-- vì vậy khi, như trong trường hợp này, đó là được xử lý như một int-- sau đó nó sẽ đối phó với nó là giá trị ASCII. Vâng. Đung Bạn có khuyên chúng ta có một bảng tham chiếu ASCII? Camille REKHSON: Tôi không think-- Đung Hoặc sẽ chỉ nó được giao dịch với những? Camille REKHSON: Tôi nghĩ chúng tôi sẽ làm điều đó với những điều dễ dàng. Tôi không nghĩ rằng nó sẽ tổn thương để viết ra có lẽ những gì vốn A và chữ thường Một là, chỉ những gì những phạm vi đang bắt đầu với. Nhưng tôi không nghĩ rằng bạn cần phải thực hiện tất cả không gian để đưa toàn bộ bảng ASCII. Yeah. Đung sự khác biệt là gì giữa nói int A và char C, như bạn làm ở đầu trang? Camille REKHSON: Vì vậy, nó chỉ làm thế nào mà được lưu trữ trong bộ nhớ. Nhưng bạn có thể xử lý nó một trong hai cách. Giống như chúng ta thấy ở đây, chúng tôi làm print ra A như một nhân vật. Đung Vì vậy, đó là tương tự như A? Camille REKHSON: Yeah. Bất kỳ câu hỏi khác? Đung Vì vậy, phần trăm C đang nói in một char? Camille REKHSON: Yes. Đung Vì vậy, ngay cả khi A chỉ có được định nghĩa là một số nguyên, nếu chúng ta cố gắng in một char là 65, nó would-- Camille REKHSON: Nó sẽ đi đến về cơ bản đi đến biểu đồ ASCII và nhận được bất cứ ký tự trong biểu đồ ASCII cho rằng 65. Đung Cảm ơn bạn. Camille REKHSON: Yeah. Vâng? Đung Vì vậy, nếu bạn đã làm tôi%,% I, % I, I%, có đúng không chỉ print-- Camille REKHSON: Yeah, nếu bạn đã làm tất cả 4% I, nó sẽ in ra các ASCII giá trị của tất cả bốn trong số này. Bất kỳ câu hỏi khác? OK, vì vậy phạm vi, về cơ bản này giúp chúng ta xác định nơi một biến tồn tại trong chương trình của bạn. Vì vậy, chúng tôi đã nói chuyện về hai khác nhau loại phạm vi, toàn cầu và địa phương. Nếu một biến được scoped trên toàn cầu, nó có nghĩa là toàn bộ chương trình của bạn có quyền truy cập vào biến đó. Và nếu bạn trên toàn cầu phạm vi một biến, bạn khai báo nó trước khi chức năng chính của bạn. Vì vậy, nó được thực hiện ngay lập tức. Và sau đó toàn bộ của bạn chương trình có thể truy cập nó. Nếu nó scoped chỉ trong nước, mà biến giới hạn trong một khu vực cụ thể. Vì vậy, nếu bạn khai báo trong vòng lặp for, chỉ rằng đối với vòng lặp có thể truy cập nó. Hoặc nếu bạn khai báo trong vòng một chức năng cụ thể, chỉ có chức năng đó có thể truy cập nó. Các câu hỏi về phạm vi. OK, vì vậy chức năng tạo mẫu. Về cơ bản, vì C, khi nó biên dịch, đọc từ trên xuống. Nếu bạn khai báo một hàm cuối trong mã của bạn, trình biên dịch không biết mà chức năng mà tồn tại. Vì vậy, những gì chúng tôi sử dụng là nguyên mẫu, mà cơ bản cho trình biên dịch, Chức năng này tồn tại, đi tìm cho nó sau này trong mã. Vì vậy, cách mà bạn làm một mẫu thử nghiệm chức năng chính là cách bạn bắt đầu off viết một chức năng. Bạn hãy đưa ra kiểu trả về, tên của các chức năng, và sau đó bất kỳ đối số mà chức năng mà mất. Vì vậy, để nhìn vào một ví dụ nhanh chóng, trong này là trường hợp chức năng của chúng ta mà chúng ta đang sử dụng tại đây về cơ bản là một chức năng lập phương. Vì vậy, tham gia trong một số nguyên và trở về lập phương của số nguyên đó. Vì vậy, bởi vì chúng tôi đã viết mà Hàm dưới đây các chức năng chính, và chúng tôi muốn sử dụng đầu ra của that-- hoặc chúng tôi muốn đến chức năng mà chức năng chính của chúng tôi, chúng ta nói một cách nguyên mẫu của nó ở đầu chương trình của chúng tôi. Và sau đó khi chúng ta gọi nó trong chức năng chính của chúng tôi, trình biên dịch biết rằng chức năng đó là bằng văn bản sau, và sẽ đi tìm nó, và sẽ sử dụng nó đúng cách. Các câu hỏi về tạo mẫu? Vâng. Đung điểm là Vì vậy, những gì? Tôi không nhận được điểm của mẫu. Tại sao không chỉ có nó ở dưới đó? Camille REKHSON: Vâng, nếu nó down ở đây, sau đó khi bạn nhận được đến dòng cube của x trong chức năng chính của bạn, trình biên dịch sẽ không có ý tưởng rằng các chức năng lập phương thực sự tồn tại. Đung Không thể bạn chỉ cần đặt nó ở phía trước? Camille REKHSON: Đó là thực hành mã hóa tốt hơn để đặt nó dưới chức năng chính của bạn. Vì vậy, đó là lý do tại sao chúng tôi sẽ làm mẫu. Chỉ vì, nếu bạn đã có rất nhiều chức năng, nó sẽ thực sự lộn xộn để đọc qua tất cả những chức năng trước khi bạn nhận được để thịt của chương trình của bạn. Yeah, và bạn đã có một q-- Đung Vì vậy, được khai báo biến của bạn lên ở đầu vì vậy bạn có thể truy cập vào nó, làm cho nó một biến toàn cầu? Là tương tự như này mà nó tuyên bố nó lên đó, để nó biết mà nó sẽ truy cập nó sau và bạn có thể sử dụng nó? Camille REKHSON: Yeah. Vâng. Đung nên the-- bất kỳ thêm chức năng mà bạn tạo khóa bên ngoài điều này, or-- Camille REKHSON: Vâng, nếu bạn tạo chính functions-- khác chính nó là function-- vì vậy nếu bạn đang tạo ra các chức năng khác, họ nên được bên ngoài. Vâng? Đung trăm D là gì? Camille REKHSON: Tỷ lệ D là điều tương tự như phần trăm I. Nó đề cập đến một số nguyên. Vâng. Đung vậy, int đang làm chính là những gì? Khoảng trống đó là gì? Camille REKHSON: Void nói nó mất trong không có đối số. Đung [không nghe được]. Camille REKHSON: Có thể bạn nói to hơn một chút, xin lỗi? Đung Vâng, xin lỗi, tại sao bạn đặt làm mất hiệu lực cho các đầu tiên, và sau đó int đầu vào cho một thứ hai? Camille REKHSON: Oh, cho hai different-- cho các chức năng chính so với các chức năng lập phương? Vì vậy, trong các chức năng chính, chúng tôi sử dụng void vì có Không có thông số được đưa vào. Trong khi đó ở các khối lập phương chức năng, chúng tôi có một đầu vào. Đó là lý do tại sao nó nói int, đầu vào, vì có những lý lẽ mà chúng tôi có tính đến chạy chức năng của chúng tôi. Yeah. Có phải có câu hỏi? OK, và sau đó nhanh chóng nổi điểm thiếu chính xác. Vì vậy, chúng ta có vô hạn các số thực. Nhưng chỉ có một là số hữu hạn các bit rằng chúng ta có thể sử dụng để hiển thị các số, và đại diện cho họ. Vì vậy, sau đó chúng tôi kết thúc với một số thiếu chính xác. Và con số của bạn sẽ không luôn được khá chính xác những gì bạn nghĩ rằng họ là khi bạn đang đối phó với dấu chấm động. Đây chỉ là một cái gì đó tốt để biết. Các câu hỏi về điều này? Vâng. Đung là này đề cập với ý tưởng của bit tràn đó là trong bài giảng? Là một điều gì đó tách biệt? Camille REKHSON: Họ đang hoàn toàn riêng biệt, yeah. Tuyệt. PULAK Goyal: Hi, tất cả mọi người. Tên tôi là Pulak, và tôi sẽ được đi qua con trỏ. OK, vì vậy hãy suy nghĩ đầu tiên về những gì trông giống như bộ nhớ. Vì vậy, như bạn có thể thấy ở đây, chúng tôi mất trí nhớ và chúng tôi chia nó lên vào một loạt các khối. Và chúng tôi tham khảo mỗi chặn bởi một địa chỉ, đúng không? Và không ai nhớ những gì loại ký hiệu, chúng tôi sử dụng để biểu thị một địa chỉ? Đung Hexadecimal, 0X. PULAK Goyal: Hexadecimal, phải không? Vì vậy, các 0X nghĩa là chúng tôi nói về hệ thập lục phân. OK, vậy làm thế nào để chúng ta tạo ra con trỏ? Vì vậy, chúng tôi có loại, chúng tôi đặt it-- thêm một ngôi sao với nó, và sau đó chúng ta thêm tên biến. Vì vậy, ví dụ, chúng tôi đã nhìn thấy là int sao x, char sao y, và bắt đầu nổi z. Vì vậy, khi tôi nói int sao x, ai đó có thể cho tôi biết những gì tôi đang nói về loại đó? Đung Các vị trí của các đĩa. PULAK Goyal: Xin lỗi, những gì? Bạn có thể lặp lại điều đó? Đung Các vị trí của đĩa. PULAK Goyal: Vậy actually-- vì vậy những gì Tôi có nghĩa là, khi chúng ta có int sao x, chúng ta đang nói là tạo một con trỏ, và nó có thể lưu trữ các địa chỉ của một biến đó là một int, phải không? Vì vậy, với char sao y, chúng tôi đang tạo ra một con trỏ có thể lưu trữ địa chỉ của một biến đó là một char. Vì vậy, đó có ý nghĩa với tất cả mọi người? OK, mát mẻ OK, vì vậy với con trỏ, có hai hoạt động quan trọng, chúng tôi có thể làm. Có tham khảo, và có của dereferencing. Yeah? Đung bạn có thể đi một chút chậm hơn? PULAK Goyal: Chắc chắn rồi. Yeah, so-- Yeah, đặt câu hỏi như tôi đi cùng nếu you-- nếu có điều gì là không rõ ràng. Vì vậy, chúng tôi đã tham khảo và dereferencing. Vì vậy, khi bạn muốn có được địa chỉ của một biến, sau đó sử dụng các ký hiệu. Vì vậy, hãy nói rằng tôi tuyên bố int x một nơi nào đó. Và tôi muốn có được địa chỉ đó và vượt qua nó, tôi sẽ làm dấu và x. Và khi bạn muốn để có được giá trị kết hợp với một con trỏ, bạn sử dụng tới đích điều hành, đó là một ngôi sao. Vì vậy, cho phép nói rằng tôi có int x sao, và Tôi đã có nó trỏ đến một cái gì đó. Nếu tôi muốn có được giá trị của những gì nó trỏ đến, tôi sẽ chỉ làm sao x. Rõ chưa? Bất kỳ câu hỏi về điều đó? Yeah. Đung Vì vậy, nói chung, bạn sẽ không có thể làm tại x và ngôi sao x với cùng x. Đúng không? Bởi vì nếu x là một biến, sau đó bạn có làm tại x để nhận được rằng đó là một con trỏ. Nhưng nếu x là một con trỏ, sau đó bạn cần làm sao để có được x biến. PULAK Goyal: Có, vì vậy các Câu hỏi là khi chúng ta sử dụng một star-- khi bạn sẽ sử dụng các ngôi sao, và khi chúng ta sử dụng các ký hiệu, và có thể chúng ta sử dụng nó với cùng một loại biến? Vì vậy, thông thường nếu bạn có, Ví dụ, một int x, bạn chủ yếu sẽ được sử dụng ký hiệu để có được địa chỉ đó. Bởi vì nó không làm cho ý nghĩa để tôn kính vào x. Trong khi đó, nếu chúng ta có int sao x, bạn muốn được sử dụng hoạt động tới đích bởi vì nó sẽ làm cho không có ý nghĩa để sử dụng tại x trong trường hợp đó. Điều đó có ý nghĩa? Đung Vì vậy, bạn có thể không và, và sau đó một con trỏ? PULAK Goyal: Vì vậy bạn về mặt kỹ thuật, thực sự có thể làm dấu và một con trỏ. Nhưng đó là ra khỏi phạm vi của lớp này. Đối với các purpose-- cho guys của bạn ' mục đích, bất cứ khi nào bạn có con trỏ, bạn muốn sử dụng các toán tử tham chiếu để có được các giá trị kết hợp với điều đó. Và khi bạn có thường xuyên biến, giống như một int x, bạn muốn sử dụng các ký hiệu điều hành để có được địa chỉ đó. ĐƯỢC? OK, vì vậy chúng ta hãy nhìn vào con trỏ và những gì xảy ra dưới mui xe. Vì vậy, điều đầu tiên tôi đã làm ở đây là int x tuyên bố là bằng 5. Các địa chỉ của biến này là 0x04, và giá trị là 5. Vì vậy, chúng ta hãy xem những gì sẽ xảy ra với các dòng tiếp theo. Vì vậy, bây giờ chúng ta khai báo một con trỏ. Địa chỉ của nó là 0x08, và nó giá trị là địa chỉ của x. Điều đó có ý nghĩa với tất cả mọi người? Bất kỳ câu hỏi về điều đó? OK, và bây giờ chúng ta hãy xem những gì xảy ra với các dòng tiếp theo. Vì vậy, với dòng tiếp theo này, chúng tôi có địa chỉ của bản sao là 0x10, và giá trị của nó là 5. Vì vậy, lý do chúng tôi có năm là chúng tôi đã nói, chúng ta tới đích con trỏ, mà chúng tôi tuyên bố một ngôi sao int. Và do đó, nó went-- khi chúng ta tới đích của nó, nó nói, OK, những gì là trong 0x04 khe. Và nó đã đi đến đó. Và những gì x là một x0-- 0x04, và giá trị là 5. Điều đó có ý nghĩa? Yeah? Đung Tại sao là địa chỉ của bản sao chỉ 4 byte trên các con trỏ x? PULAK Goyal: Vâng, đây là một sai lầm on-- Camille REKHSON: Vì vậy, có, hãy nhớ này được viết trong hệ thập lục phân. PULAK Goyal: Oh, yeah. Camille REKHSON: Vì vậy, đây thực sự là 8 và sau đó 16 bởi vì chúng tôi biết rằng, con trỏ, nhớ, trong IDE của chúng tôi là có được dài 8 byte. PULAK Goyal: Yeah. Vì vậy, chỉ để được rõ ràng, con trỏ dài 8 byte. An int là 4 byte. Vì vậy, lý do tại sao những gì nhảy từ 0x04 đến 0x08 là vì chúng tôi phải làm một bước nhảy của 8 bytes. Và sau đó for-- từ bản sao chỉ là một int, đó là 4 byte, mà là một nửa của 8 bytes. Vì vậy, chúng tôi chỉ nhảy đến 0x10, đó là hai đi từ 0x08. Bất kỳ câu hỏi khác? OK, let's-- yeah? Đung Tại sao không phải là giá trị của int bản sao chỉ the-- lý do tại sao nó là 5 thay vì 0x04? PULAK Goyal: OK, lý do tại sao nó là 5? OK, vì vậy khi the-- vậy trước tiên hãy nghĩ về điều này trong các điều khoản của các loại. Vì vậy, tôi đang nói int bản sao bằng sao con trỏ. Vì vậy, các loại con trỏ là gì? Đó là một ngôi sao int. Và khi tôi tới đích đó, các loại trở thành một int. Vì vậy, những gì chúng tôi mong đợi để lưu trữ đây thực sự là một int. Điều đó có ý nghĩa? Đung Chắc chắn, chút chút. PULAK Goyal: Vì vậy, thường khi bạn nghĩ về chủng loại, nó sẽ giúp bạn hiểu những gì là kiểu của giá trị mà nên đi đến đó. Vì vậy, bạn thường có thể loại trừ rất nhiều những lỗi phổ biến bằng cách nghĩ về chủng loại. Hãy để tôi đi qua một chút các trang khác. Và chúng ta có thể nhận được câu hỏi tại sự kết thúc của phần con trỏ. OK, vì vậy chúng tôi có một chương trình lỗi ở đây. Và do đó, một người nào đó có thể nói anyone-- tôi biết những gì là sai với chương trình này? Phải, vì vậy những gì chúng tôi mong để làm ở đây is-- những gì chúng tôi muốn làm là tham biến int x và biến it-- làm cho nó bằng 5 thay vì 3 và sau đó in đó. Nhưng điều đó đã không xảy ra. Ai đó có thể cho tôi biết tại sao? Vâng? Đung Khi chức năng to_five mất x như nó đối số, nó không mất x chính nó, nhưng thay vì tạo ra một bản sao, một, của nó. Và nó hình hoạt động trên đó. Nhưng vì lý do đó, bạn không thay đổi giá trị thực tế của x. Vì bạn đang [không nghe được]. PULAK Goyal: Đúng, đúng, vì vậy khi chúng ta gọi chức năng to_five, những gì chúng tôi đang làm là suy nghĩ, cho tôi một bản sao của giá trị cho chức năng đó. Đó là chức năng, sau đó, sẽ và làm một số thao tác. Nhưng một khi nó trở về, bây giờ ra phạm vi của các chức năng chính ở đây. Và như vậy x vẫn là, trên thực tế, bằng 3, và chúng tôi in 3. OK, vì vậy chúng ta hãy xem làm thế nào điều này xảy ra. OK, vì vậy không có gì là tuyên bố. Sau đó, ở đây, x là bằng 3. Và bây giờ nó is-- ở vị trí hai, một vẫn là không ở trong phạm vi. Và bây giờ chúng ta đi đến vị trí của ba, nơi mà một doanh nghiệp thừa nhận giá trị của 3. Tại bốn, bây giờ chúng ta thay đổi một đến 5. Nhưng bây giờ, khi chúng tôi nhảy trở lại năm, đó là tuyên bố in, một giờ là ra khỏi phạm vi. Và x là vẫn chỉ bằng 3. Liệu điều này có ý nghĩa với tất cả mọi người? OK, vì vậy bây giờ chúng ta hãy nói về cách chúng ta có thể sử dụng con trỏ để sửa lỗi này. Có ai có bất kỳ ý tưởng làm thế nào chúng tôi có thể sửa lỗi này bằng cách sử dụng con trỏ? Đung Bạn lấy một ngôi sao int thay vì một int cho to_five. PULAK Goyal: Xin lỗi, bạn có thể lên tiếng? Đung Bạn lấy một ngôi sao int thay vì một int cho to_five. PULAK Goyal: OK, yes. Vì vậy, hãy pass-- thay vì đi qua chỉ giá trị, chúng ta hãy vượt qua nó bằng cách tham khảo. Chức năng này mới, phải không? Và như vậy bằng cách đi qua các địa chỉ trong, chúng tôi có thể làm các thao tác trên địa chỉ. Và vì vậy chúng tôi đang thực sự, trong thực tế, thay đổi x. Vì vậy, chúng ta hãy xem làm thế nào mà làm việc. OK, vì vậy trong ví dụ này, chúng tôi cố định nó. Chúng tôi đã thay đổi chữ ký của chúng tôi của to_five để có trong một int ngôi sao thay vì chỉ một int đây. Sau đó chúng tôi tới đích này một và chỉ định 5 đến nó. Và bây giờ ý này, trên thực tế, in 5. Vì vậy, chúng ta hãy xem làm thế nào các bước làm việc ở đây. Vì vậy, với những bước đầu tiên, không có gì là tuyên bố nào. Vì vậy, ở đây, với bước thứ hai, chúng tôi đã nói x là bằng 3, nhưng vẫn còn một là ra khỏi phạm vi. Bây giờ bởi dòng thứ ba, chúng tôi có x là vẫn chỉ bằng ba. Và bây giờ, chúng tôi đã thông qua in-- gì được lưu trữ trong một doanh nghiệp là địa chỉ của x. Điều đó làm cho tinh thần để tất cả mọi người, làm thế nào chúng ta có mà? Phải, chúng ta có amper-- đó là cách chúng tôi thông qua một dấu x để các chức năng to_five. Và sau đó vào dòng tiếp theo, những gì chúng tôi làm, là chúng ta tới đích của một. Và bởi dereferencing một, chúng tôi có thể để thay đổi giá trị của x 3-5. Bởi vì x sống tại địa chỉ 0x12. Và sau đó, cuối cùng, khi chúng ta trở về với chính, mặc dù bây giờ một điều này là ngoài phạm vi, chúng tôi đã, trên thực tế, thay đổi x. Và nó là 5. Bất kỳ câu hỏi nào về điều này? Yeah? Đung bạn có thể cho tôi những gì các ký hiệu x là? Tôi nghĩ rằng ký hiệu giống như AND. PULAK Goyal: Có, vì vậy chúng tôi sử dụng cùng một biểu tượng cho nhiều điều khác nhau. Vì vậy, ở đây, khi bạn have-- trong trường hợp này, khi bạn có, Tôi guess-- vậy trong trường hợp này, khi bạn đang làm việc với con trỏ, khi bạn đặt các ký hiệu ở phía trước của một int, int một biến, hoặc một char, hay một dòng chảy, những gì bạn đang nói là, cho tôi địa chỉ này. Nhưng những gì bạn đang nghĩ đến việc, khi khác bạn sẽ sử dụng ký hiệu là, hãy nói, trong một tuyên bố nếu. Bạn có một sự thật, và một số biến mà đánh giá một số Boolean, và một số biến khác đó xác nhận một số Boolean và bạn muốn có được và điều đó. Sau đó, bạn sẽ sử dụng các ký hiệu. SPEAKER 1: Yeah, vì vậy chỉ cần ngày hôm nay, chúng tôi đã nói về ba cách sử dụng khác nhau các ký hiệu. Chúng tôi có hai ký hiệu, đó là những gì Pulak vừa mô tả. Chúng tôi có một ký hiệu, mà là những gì Camille mô tả trước đó, mà là một ký hiệu. Và đó là cho phép toán AND. Và nhận thấy rằng cả hai và- có điều kiện, xin lỗi, các logic AND và bitwise AND, những người có hai số, phải không? Nó đã được một cái gì đó ký hiệu một cái gì đó ký hiệu, một cái gì đó một cái gì đó ký hiệu. Ở đây, khi chúng tôi chỉ có ký hiệu một cái gì đó, đó là dereferencing. PULAK Goyal: Vâng, câu hỏi lớn. Yeah. Đung Tại sao trong dòng 5a và một ngôi sao trở thành N / A? Tại sao họ không chỉ là loại giữ lại giá trị tương tự từ các dòng trước đó? PULAK Goyal: Vì chúng tôi đã đi ra khỏi chức năng. Và vì vậy những gì happens-- vì vậy what-- giờ chúng tôi ra khỏi phạm vi của chức năng đó, những gì xảy ra thực sự là những người được đưa ra khỏi bộ nhớ. Yeah. Đung giữa 3 hoặc 4 sao một bằng 5. PULAK Goyal: Yes. Đung gì mà chính xác biểu thị? PULAK Goyal: Vậy nghĩa là gì? Đung Yeah. PULAK Goyal: Vì vậy, các Câu hỏi là, là những gì that-- được những gì bạn làm trực tuyến khi chúng ta nói, sao bằng 5? Vì vậy, hãy nhớ những ngôi sao toán tử tham chiếu. Vì vậy, khi một, trong trường hợp này, là một con trỏ. Đó là một ngôi sao int. Vì vậy, khi chúng tôi tới đích của một bởi sử dụng các ngôi sao, những gì chúng ta đang nói được, đi đến bất cứ điều gì được lưu trữ tại địa chỉ, được lưu trữ trong a-- vậy take-- do đó, một, ngay bây giờ, có một số địa chỉ lưu trong đó. Tới nơi mà điểm đến địa chỉ, và bây giờ thay đổi bất cứ điều gì đó là đến năm. Yeah. Đung Bạn có thể nói nó trong điều kiện đơn giản? Thay đổi địa chỉ của một đến 5. PULAK Goyal: Chúng tôi không thay đổi địa chỉ của một đến 5. Một số địa chỉ có trong nó, đó là địa chỉ của biến của lãi suất. Và vì vậy những gì chúng ta đang nói khi chúng ta tới đích là, bây giờ chúng tôi muốn change-- Hiện tại chúng tôi đang tham khảo lãi suất của biến trực tiếp. Điều đó có ý nghĩa? SPEAKER 1: Một cách khác để suy nghĩ của nó được go-- do đó, một là một địa chỉ. Các sao nói đi đến đó giải quyết và nhìn vào giá trị của nó. Và bây giờ thiết lập giá trị của nó đến 5. Vì vậy, nó nói, đi đến địa chỉ của x, là có được những gì được lưu trữ trong một, và thay đổi nó để 5. PULAK Goyal: Yeah? Đung Vì vậy, vị trí là nơi con trỏ đang đi, địa chỉ. Nhưng giá trị là một giao giá trị dựa trên địa chỉ. PULAK Goyal: Yeah. Bất kỳ câu hỏi khác về việc này? Đung Tôi có một câu hỏi. PULAK Goyal: Vâng, xin lỗi. Đung Vì vậy, khi bạn store-- vậy nếu bạn đang nói [không nghe được] một. PULAK Goyal: Yes. Đung Bạn phải lưu trữ các x với một dấu? Tại sao có thể không phải bạn chỉ cần nói x trước int của bạn [Không nghe thấy]? PULAK Goyal: So-- Đung [không nghe được]. PULAK Goyal: Vậy là bạn question-- oh. Vì vậy, câu hỏi của bạn, tại sao có thể không we-- đến chức năng to_five, tại sao có thể chúng tôi chỉ cần vượt qua một x, phải không? Đung phải. PULAK Goyal: OK, yeah, vì vậy điều này một lần nữa đi trở lại cuộc thảo luận của chúng tôi trên các loại. Vì vậy, các chức năng to_five tại là mong đợi một loại int sao. Vì vậy, các loại x là gì? X chỉ là một int. Nhưng điều này có chức năng hy vọng sẽ là một ngôi sao int. Vì vậy, họ hy vọng một biến có một địa chỉ lưu trong đó. Vì vậy, đó là cách you-- đặt ký hiệu, và vì vậy đó là làm thế nào chúng ta vượt qua trong địa chỉ, mà là now-- và giải thích rằng như một ngôi sao int, yeah. Great câu hỏi. Bất kỳ câu hỏi khác về điều này? OK, mát mẻ. OK, vì vậy bây giờ chúng ta hãy nói về con trỏ số học. Vì vậy, ở đây, cộng và trừ i điều chỉnh con trỏ bởi tôi lần kích thước của các loại con trỏ byte. Vì vậy, chúng ta hãy xem làm thế nào mà trông như thế nào. Vì vậy, ở đây, chúng ta đã khai báo int x = 5. Và bây giờ chúng ta sẽ khai báo một con trỏ y, và vượt qua trong các địa chỉ của x có. Vì vậy, chúng tôi có điều đó. Vì vậy, x được lưu trữ tại 0x04. Vì vậy, bây giờ y là bằng đó. Và ai đó có thể cho tôi biết những gì họ nghĩ sẽ xảy ra khi chúng ta làm y cộng bằng 1? Yeah? Đung nó có thay đổi đến 0 lần 0 8? PULAK Goyal: Kích thước, và type-- Đung Bạn đang di chuyển địa chỉ. PULAK Goyal: Yeah nó was-- yes. Quá đúng. Vì vậy, nó sẽ thay đổi để 0x08. Và because-- vì vậy bạn nên sử dụng này công thức, 1 lần kích thước của con trỏ và các con trỏ là của size-- [SINH Murmur] PULAK Goyal: Đúng vậy. [SINH Murmur] SPEAKER 1: Vì vậy, các loại đó các con trỏ trỏ đối với: PULAK Goyal: Liệu, yeah, yeah, đó là 4 byte. SPEAKER 1: Vậy ints là 4 byte. PULAK Goyal: Vì vậy, nếu chúng ta đã a-- hãy nói chúng ta tuyên bố, tôi đoán, một char. Điều gì sẽ that-- vậy hãy nói chúng tôi có x char bằng một hoặc một cái gì đó. Và chúng tôi đã có địa chỉ đó ở 0x04, điều gì sẽ y cộng bằng với 1 làm gì bây giờ? Xin lỗi, những gì? Đung 0x05. PULAK Goyal: 0x05, phải. Có phải mọi người nhìn thấy không? OK, và bây giờ chúng ta hãy nói rằng đó là một phao. Chuyện gì sẽ xảy ra? Bất cứ người nào? Vì vậy, phao nổi là bao nhiêu byte? Đung 4 byte. PULAK Goyal: Đúng vậy. Vì vậy, nó sẽ được điều tương tự như thế này. Mát. OK, và bây giờ chúng ta hãy nói về con trỏ và mảng. Vì vậy, bạn thấy điều này trên trước hai bộ p, nơi chúng ta có thể treat-- mảng như vậy và con trỏ không phải là những điều tương tự. Nhưng chúng ta có thể đối xử với các mảng như là con trỏ. Vì vậy, ở đây, chúng ta có mảng này ở đây, trong đó có ba khe. Trong chúng ta slot-- đầu tiên có một, hai, ba người. Vì vậy, nếu we-- vì vậy chúng tôi có thể gán đó bằng cách nói, chúng ta có mảng, tới đích đó. Và sau đó khi chúng ta tới đích rằng, những gì chúng tôi đang thực sự làm là đề cập đến các khe cắm cùng. Vì vậy, mảng sao bằng 1. Chúng tôi could- thế nào có thể chúng tôi viết that-- gì một cách khác chúng ta có thể viết đó? ĐỐI TƯỢNG: Array 0 bằng 1. PULAK Goyal: Chính xác, sao mọi người nhìn thấy không? Vì vậy, điều tương tự với ở đây. Vì vậy, khi chúng ta có mảng cộng với 1, chúng tôi do-- vậy even-- nhớ với số học mà chúng ta vừa nói đến, khi chúng ta làm cộng 1 hoặc di chuyển nó qua bằng 4 byte, phải. Có phải mọi người nhìn thấy không? Và phía đó, khi chúng tôi tới đích rằng, chúng ta có thể thiết lập đó để 2. Và đó là cách mà chúng tôi đặt khối bên cạnh 2. Và như vậy là một cách khác để viết đó cũng sẽ là khung mảng 0 khung bằng 1. Đung Bạn có cần các dấu ngoặc đơn? PULAK Goyal: Vâng, bởi vì bạn dereferencing toàn bộ lượng mảng cộng thêm 1. OK, và điều tương tự cho mảng cộng 2. Bất kỳ câu hỏi nào về điều này? Yeah. Đung vậy, mảng là tự động đặt ở 0? PULAK Goyal: Array is-- xin lỗi, những gì? Đung Array là 0. Các địa chỉ của mảng chỉ là 0. PULAK Goyal: Vậy câu hỏi là, là địa chỉ của mảng chỉ là 0? Vì vậy, không, mảng có một số địa chỉ. Vì vậy, khi chúng tôi tới đích của nó, that's-- vì vậy bạn có thể nghĩ about-- nghĩa là giống như một con trỏ trỏ đến đầu của một mảng. Vì vậy mà có một số địa chỉ. Chúng tôi không biết nó là gì. Nhưng khi chúng ta tới đích của nó, chúng ta biết đó là sự khởi đầu của mảng. Và như vậy khi chúng tôi di chuyển bằng 1, chúng ta chỉ cần di chuyển so với nơi mà địa chỉ đó là. Bất kỳ câu hỏi khác? Yeah? Đung Vì vậy, nếu bạn làm khung mảng cộng 1-- PULAK Goyal: Xin lỗi, I-- bạn có thể lên tiếng? Đung Yeah, nếu bạn làm khung array [không nghe được]. Vì vậy, sau đó nếu bạn đặt pointer-- PULAK Goyal: Xin lỗi, tôi không thể nghe bạn. Bạn có thể nói thêm một lần nữa? Đung Bạn đang OK. PULAK Goyal: OK, xin lỗi. OK, mát mẻ. Any-- yeah. Vì vậy, khi bạn đi trong khung mảng 3-- PULAK Goyal: Yeah. Đung --isn't there-- sẽ không nó được bốn điểm như 0, 1, 2, và 3? Tại sao nó không int array 2? PULAK Goyal: Không, vì vậy chỉ cần ước của C is-- khi chúng ta khai báo mảng, we-- số chúng tôi đặt ở đó là bao nhiêu khe chúng ta muốn. Nhưng các chỉ số của mảng là thực sự mảng 0, mảng 1 và mảng 2. Vì vậy, nó chỉ là ước vào cách chúng ta khai báo mảng. Vâng, bất kỳ câu hỏi nào khác không? Yeah. Đung Vì vậy, chúng tôi vẫn nói về con trỏ, phải không? PULAK Goyal: Yeah. Đung bạn có thể vẫn làm sao cho mảng 0 bằng 1? PULAK Goyal: Không, không, so-- OK, vì vậy câu hỏi là có thể bạn chỉ cần làm khung mảng sao bằng không, và sau đó nói rằng bằng 1. Vì vậy, không có, những gì chúng ta đang nói ở đây là chúng ta có thể think-- chúng ta có thể đối xử với các mảng như là con trỏ. Vì vậy, chúng tôi have-- những gì chúng tôi nói là chúng ta có hai cách đến nay tham chiếu đến cùng một khối. Vì vậy doing-- nếu bạn có mảng không, loại mà bây giờ là một int. Và nếu bạn có những ngôi sao đó, bạn nhận được một điều không hợp lệ. Vì vậy, những gì chúng ta đang nói ở đây, là có hai cách thay thế để chỉ cùng một khối. Bạn có thể làm mảng khung 0 bằng 1. Hoặc bạn có thể làm tới đích mảng, và đã có bằng 0. Vì vậy, chỉ hai cách làm điều tương tự. Yeah. Đung Tại sao không phải là nó kích thước của int 1 để thêm đối với: PULAK Goyal: Kích thước của int 1. Đung Bởi vì đó là di chuyển một off. PULAK Goyal: Bởi vì đó là chỉ cách C hoạt động. Đó chỉ là cách con trỏ số học được định nghĩa. Nó sẽ đưa con trỏ. Và sau đó bất cứ điều gì bạn thêm với nó, nó sẽ nhân đó bởi kích thước của bất cứ điều gì các cửa hàng là con trỏ, yeah. Yeah. Đung Vì vậy, bạn nói rằng chúng ta có thể điều trị con trỏ và mảng giống nhau, nhưng mà chúng khác nhau. Vì vậy, những gì làm cho chúng khác nhau? Những gì chúng ta không thể làm với một trong nhưng không phải là khác? PULAK Goyal: Với mục đích này lớp, tôi nghĩ rằng những gì làm you-- it's-- SPEAKER 1: Vì vậy, we-- OK, vì vậy, cho Ví dụ, nếu bạn phân bổ bộ nhớ và bạn có một con trỏ trỏ tới một số nguyên, ví dụ. Nếu bạn cố gắng để bắt đầu làm con trỏ số học và đi xa hơn số lượng bộ nhớ mà bạn được giao, bạn sẽ chạy vào các lỗi. Chúng tôi biết với mảng, chúng tôi nói trước thời hạn, OK, tôi muốn allocate-- này cơ bản nói, tôi muốn phân bổ đủ chỗ cho ba số nguyên. Và bây giờ chúng ta có thể đối xử như thể bộ nhớ chúng tôi có tất cả ba trong số các số nguyên. Liệu rằng loại ý nghĩa? PULAK Goyal: Yeah. Yeah. Đung vậy, một ngôi sao mảng, đó là gán 1 các chỉ số của mảng là 0? PULAK Goyal: Yes. Đung Vì vậy, những gì là sau khi Hai dòng tiếp theo về the-- tôi hiểu rằng bạn đang cố gắng sử dụng con trỏ số học ở đây, nhưng một lần nữa, tôi không hiểu những gì con trỏ số học. Vì vậy, các mảng cộng với 1, bạn nói rằng bây giờ bạn sẽ muốn nói về chỉ số đầu tiên vào mảng. PULAK Goyal: Right, và do đó Lý do mà các công trình là mảng, ở đây, chúng ta có thể nghĩ đến như một ngôi sao int. Và như vậy khi chúng tôi con trỏ số học vào nó, nhớ những công thức, nơi chúng ta lấy the-- tôi đoán bất cứ điều gì địa chỉ hiện tại là, và sau đó khi chúng ta thêm 1 đến nó, chúng tôi thực sự 1 nhân bởi kích thước của điều chúng ta đang thao tác. Vì vậy, trong trường hợp này, kích thước của một int. Và sau đó chúng tôi di chuyển nó chuyển tiếp bởi nhiều. SPEAKER 1: Vì vậy, giả vờ bạn có b mảng sao. PULAK Goyal: OK, yeah. SPEAKER 1: Với bàn tay của bạn. Đến đây. PULAK Goyal: Hoặc tôi có thể just-- yeah. OK Vì vậy here--, vì vậy mảng tại bắt đầu, chỉ là quyền ở đây. Vì vậy, khi chúng tôi tới đích của mảng, chúng tôi đã chỉ đề cập đến khối đầu tiên ở đây. Nhưng bây giờ khi tôi làm mảng cộng với 1, mà is-- mũi tên mà bây giờ là phải ở đây. Điều đó có ý nghĩa? Đúng, bởi vì khối này là kích thước của int, mà là 4 byte. Và như vậy, những gì chúng tôi đang làm chúng tôi là di chuyển con trỏ mà bởi 4 byte trên. Bất cứ khi nào chúng ta làm phép tính vào nó, nó sẽ luôn luôn di chuyển nó bằng cách gia tăng của 4 byte. Bởi vì điều này giống như một ngôi sao int. Điều đó có ý nghĩa? ĐƯỢC. Đung Vì vậy, những điều trong mảng là 5 bytes, chúng tôi di chuyển nó 5 bytes-- PULAK Goyal: Phải, vì vậy nếu chúng ta có một sao char, chúng tôi di chuyển nó bằng cách chỉ 1 byte. Vì vậy, trong trường hợp của các ngôi sao char, nó chỉ muốn được di chuyển nó qua 1. Đung Để có được tiếp theo bạn cần một ngôi sao. PULAK Goyal: Yeah, yeah, không có ý nghĩa? SPEAKER 1: Chúng tôi có thể trò chuyện về nó nhiều hơn sau này. PULAK Goyal: Yeah, yeah, chắc chắn. OK, mát mẻ. Chúng ta hãy chuyển sang phần tiếp theo. SPEAKER 1: Oh, OK mát. Vâng đó là tôi. Tất cả các quyền, tuyệt vời. OK, mát mẻ, vì vậy bây giờ chúng tôi lên một chút thông tin tổng quát hơn về bộ nhớ. Ngoài ra, tôi đánh giá cao thực tế là họ đã đi khá nhanh chóng. Đó là rất nhiều vật liệu để có được thông qua trong một giờ và một nửa. Nhưng nếu có bất kỳ chủ đề mà bạn muốn đi sâu hơn vào, chúng ta sẽ có giờ làm việc trong tuần này nơi bạn có thể trò chuyện với chúng tôi một ngày một. Hoặc bạn chỉ có thể đến ở kết thúc và chúng tôi sẽ trò chuyện về mọi thứ. Và như mọi khi, cảm thấy tự do để đặt câu hỏi. Thật tuyệt vời. Vì vậy, đây là hình ảnh của chúng ta về bộ nhớ chúng ta đã thấy trong bài giảng một tỷ lần. Và chúng ta biết rằng chồng này lớn lên từ đáy và heap mọc xuống. Và sự khác biệt giữa các sự vật là những gì mà chúng tôi giữ trên heap và điều mà chúng tôi giữ trên stack? Một người nào đó ném một cái gì đó ra khỏi đó. Yeah. Đung là nó ngăn xếp cho những thứ mà chỉ là biến vô thường mà chúng tôi chỉ khai báo sử dụng các chức năng nhất định? SPEAKER 1: Beautiful, yeah. Vì vậy, bất cứ lúc nào ở đâu, chúng ta hãy nói chúng ta đang ở trong một chức năng, và chúng ta chỉ có một số biến địa phương. Những người sẽ kết thúc trên stack. Nếu, thay vào đó, chúng ta gọi malloc và thực sự cấp phát bộ nhớ, mà luôn luôn xuất phát từ đống. Vì vậy, yeah mát? Và vì vậy hãy nhớ rằng bất kỳ bộ nhớ bạn cấp phát bởi malloc, đó là sẽ kết thúc trên heap. Và nếu bạn quên nó miễn phí, máy tính của sẽ không biết rằng bạn đang thực hiện với nó. Vì vậy, nó chỉ cần đi treo lên đó trong bộ nhớ. Và bạn cơ bản rò rỉ bộ nhớ. Bạn đang mất nó. Bởi vì bạn không bao giờ nói với máy tính, hey Tôi đang hoàn tất sử dụng nó, cảm thấy miễn phí để sử dụng, các thứ khác ở đó. Mát. Bất kỳ câu hỏi đó? Vâng. Đung Vì vậy, loại bộ nhớ là stack? Thức ăn động thuốc, ủy? Những gì bạn sẽ gọi nó? SPEAKER 1: Chắc chắn rồi, vì vậy bạn có thể nghĩ về nó như là các biến địa phương. Các cuộc gọi thực tế để chức năng sẽ chồng lên. Bất cứ điều gì khác? Yeah? Đung Làm thế nào để bạn miễn phí bộ nhớ bạn thêm vào the-- SPEAKER 1: Chắc chắn rồi, vì vậy khi bạn phân bổ bộ nhớ trên heap, bạn gọi malloc. Và như vậy thì cung cấp cho bạn trở lại một con trỏ đến một số địa chỉ trong bộ nhớ. Vì vậy, nói rằng bạn được gọi là con trỏ mà, phải không? Sau đó, bạn chỉ cần nói con trỏ miễn phí. Và điều đó giải phóng bộ nhớ. Mát. Các câu hỏi khác? Vâng. Đung gì cấp phát động có ý nghĩa? SPEAKER 1: phân bổ Tự động có nghĩa là, trong quá trình chương trình của bạn. Vì vậy, khi bạn gọi malloc giữa chương trình của bạn, ở phần đầu của chương trình, không có bộ nhớ được phân bổ. Và như máy tính bước qua mã, nó sẽ cấp phát bộ nhớ. Vì vậy, đó là những gì chúng tôi có nghĩa là bằng cách tự động. Câu hỏi hay. Yeah? Đung Khi bạn xác định một mảng với các dấu ngoặc vuông, nào đó vẫn còn [Không nghe thấy]? SPEAKER 1: Đó là một câu hỏi hay. Tôi nghĩ rằng khi bạn phân bổ một mảng, nó thực sự đặt nó trên stack. Tôi không tích cực về rằng, do đó, không báo cho tôi. SPEAKER 2: Tôi nghĩ it-- vâng nó đặt nó trên stack. SPEAKER 1: Đặt nó trên stack. OK, mát mẻ, khẳng định. Các câu hỏi khác? Yeah? Đung Khi bạn đại biểu malloc, không máy tính tự động cấp phát bộ nhớ cho các biến của bạn? SPEAKER 1: Yeah, cho biến cục bộ của bạn, nó sẽ tự động đặt bộ nhớ trên stack. Đung Vì vậy, những gì là điểm của việc sử dụng malloc? SPEAKER 1: là gì điểm của sử dụng malloc? Vì vậy, chúng tôi thấy một loạt các ví dụ, như thế, ví dụ, sử dụng hoán đổi, nơi mà chúng tôi muốn các phạm vi biến để được cái gì ngoài chỉ cần gọi chức năng của nó. Và chúng tôi muốn một cái gì đó rằng chúng ta có thể vượt qua xung quanh và rằng chúng ta có thể truy cập từ những nơi khác nhau. Đó là nơi mà chúng tôi muốn đặt bộ nhớ trên heap. Vì vậy, mà tất cả những khác nhau chức năng có thể truy cập nó. Đung bạn có thể chỉ cần giải thích điều đó không? SPEAKER 1: Vì vậy, một lựa chọn is-- nên Câu hỏi là, có thể chúng ta chỉ allocate-- xin lỗi, chúng ta có thể khai báo một biến toàn cầu, về cơ bản. Đó là một lựa chọn. Nhưng với rất nhiều những người, những có xu hướng để có được thực sự lộn xộn. Và chúng ta thường nghĩ của kiểu dáng như xấu. Yeah. Cool, bất kỳ câu hỏi nào khác không? Thật tuyệt vời. OK, di chuyển trên. Vì vậy, đây thực sự là làm thế nào chúng tôi phân bổ bộ nhớ. Chúng tôi nói về điều này một chút. Chúng tôi sử dụng chức năng này được gọi là malloc. Và bạn nói với nó bao nhiêu byte trong bộ nhớ, do đó, có bao nhiêu byte trên heap, bạn muốn. Và nó sẽ trở về địa chỉ, do đó, một con trỏ tới, một mảnh bộ nhớ mà nó được giao cho bạn. Vì vậy, các loại là có được khoảng trống sao. Nó sẽ là một con trỏ trỏ tới bất cứ điều gì bạn quyết định đặt ở đó. Bất cứ lúc nào bạn gọi malloc, chúng tôi đã nói bạn có để giải phóng nó vì vậy chúng tôi không có rò rỉ bộ nhớ. Điều khác là những gì rằng bạn hoàn toàn phải làm mỗi đơn thời gian bạn gọi malloc? OK, bạn phải giải phóng nó. Điều khác là gì? Kiểm tra cho null, xinh đẹp. Vì vậy, yeah, nó ở ngay có lên trên diễn đàn. Nếu bạn muốn thử để phân bổ bộ nhớ và bạn đã không có bộ nhớ còn lại, máy tính là sẽ nói, Tôi không có gì để cung cấp cho bạn. Và nó sẽ cho bạn trở lại null. Các câu hỏi về điều đó? Yeah. Đung Tại sao bạn đã bao giờ muốn khai báo một con trỏ với một loại hình cụ thể khi khoảng trống sao có thể xử lý tất cả các loại con trỏ anyways? SPEAKER 1: Câu hỏi rất hay. Tại sao chúng ta sẽ nói int sao như trái ngược void sao khi khoảng trống sao có thể xử lý tất cả mọi thứ? Vì vậy, chúng tôi không muốn bao giờ rõ ràng đúc con trỏ. Nó chỉ xấu thực hành. Nhưng chúng ta sẽ nói về int sao chỉ là một sự hiểu biết về, đây là một con trỏ đến một số nguyên. Đung OK. SPEAKER 1: Yeah, và nó cho phép bạn thao tác các giá trị trong nó là số nguyên. Đung Oh, OK. Hiệu ngôi sao sẽ không cho phép bạn làm điều đó? SPEAKER 1: Nó phụ thuộc vào bối cảnh Yeah, do đó, không lo lắng đừng lo lắng quá nhiều về loại đó. Chỉ cần biết rằng, nói chung, malloc trả về một con trỏ đến một cái gì đó. Câu hỏi hay. Đung Tại sao bạn nhân nó lần 10? [Không nghe thấy]. SPEAKER 1: Chắc chắn rồi, vì vậy tôi đã chỉ làm ví dụ ngẫu nhiên ở đây, nơi Tôi muốn bố trí đủ phòng để lưu trữ 10 số nguyên. Chỉ cần một sự lựa chọn ngẫu nhiên. Yeah. Vâng, có chuyện gì thế? Đung gì làm bạn có nghĩa là bằng cách kiểm tra null? Bạn có muốn kiểm tra con trỏ null hoặc malloc? SPEAKER 1: Vâng, chính xác. Vì vậy, câu hỏi là, những gì Chúng ta hiểu bằng séc bằng null? Chúng tôi muốn đối với: bất cứ lúc nào chúng tôi gọi malloc và chúng tôi đang trở về một con trỏ, chúng tôi muốn nói, là con trỏ bằng null? Vì vậy, theo nghĩa đen PTR. Là PTR bằng null. Vâng. Đung Vì vậy, tôi đã loại của tự hỏi, nếu bạn khởi tạo con trỏ vào malloc, hiện nó trỏ đến đầu của malloc? Bởi vì nếu nó là một array-- SPEAKER 1: Đó là một câu hỏi lớn. Vâng, nếu bạn gọi malloc, sự con trỏ đó it-- hãy nói, vì vậy ở đây chúng tôi phân bổ 10 byte của bộ nhớ. Vì vậy, tôi xin lỗi, đủ phòng trong 10 số nguyên, chúng ta sẽ có được địa chỉ của mà phần đầu tiên của bộ nhớ. Đó là một câu hỏi hay. Yeah. Đung Bằng cách phân bổ 10 nguyên phổ biến rộng rãi, có thể bạn thực sự sử dụng con trỏ như like-- gần giống như một mảng các số nguyên? SPEAKER 1: Yeah, vì vậy có thể bạn sử dụng nó như một mảng các số nguyên? Vâng, chính xác, đây là những gì Pulak chỉ cho thấy bạn on-- một vài slide trước, nơi chúng ta nói, OK, đây là thực sự chỉ là loại of-- chúng tôi có thể nghĩ về nó như một mảng 10 số nguyên. Nó chỉ xảy ra là trên heap. Đung Nhưng bạn không thể truy cập nó với ký hiệu khung vuông? SPEAKER 1: Bạn thực sự có thể truy cập nó với ký hiệu khung vuông, yeah. Bạn có thể đối xử với họ như vậy. Vâng. Đung Tại sao con trỏ bao giờ là vô giá trị? SPEAKER 1: Tại sao con trỏ bao giờ là vô giá trị? Nếu bạn sẽ sử dụng tất cả các bộ nhớ trên heap của bạn. Nếu chương trình của bạn được ăn lên, ăn lên, ăn lên bộ nhớ, và không có gì là trái, sau đó malloc sẽ say-- nếu bạn nói, Tôi muốn nhiều hơn 100 byte, nó sẽ phải nói, tôi không có 100 byte. Dưới đây là null. Điều đó có nghĩa, tôi đã thất bại. Vâng. Đung Trong trường hợp đó, null là gì, phải không? SPEAKER 1: Có, trong đó trường hợp, null là không có gì. Bạn không có địa chỉ. Không có bộ nhớ. Tất cả các bên phải, di chuyển trên. OK, chúng ta hãy nói chuyện thật sự nhanh chóng về tràn bộ đệm. Khi chúng ta có thể gặp tràn bộ đệm? Hãy nói rằng chúng tôi có a-- chúng tôi phân bổ một đoạn bộ nhớ, và chúng ta sẽ viết các chuỗi trong. Và chúng ta sẽ nói, OK, tôi sẽ phân bổ đủ chỗ cho sáu nhân vật. Và tôi sẽ phải hỏi người sử dụng đối với một số đầu vào. Và các yếu tố đầu vào người sử dụng, ví dụ, xin chào. Và điều đó hoàn toàn phù hợp tốt bởi vì chúng tôi có phòng cho tất cả các nhân vật của hello, và các nhân vật chấm dứt null. Rất nhiều phòng, không có vấn đề. Nhưng nếu chúng ta cung cấp cho các cơ hội cho một người sử dụng ác để sử dụng chương trình của chúng tôi, và họ gõ vào không sáu ký tự hay không năm nhân vật, nhưng một triệu. Họ giữ cho đánh máy, và đánh máy, và đánh máy, những gì sẽ xảy ra? Vâng, chúng tôi chỉ cung cấp cho các enough-- máy tính hoặc xin lỗi, chúng tôi chỉ cho chuỗi này đủ không gian cho 5 ký tự. Vì vậy, chúng ta sẽ có được một cái gì đó như này, nơi người xấu xa của những người gõ vào đầu vào có thể ghi đè lên kích thước của bộ đệm, và có thể đi qua thực sự số tiền mà nó ban đầu được phân bổ. Và sau đó những gì bạn có thể làm, Điều thực sự ác bạn có thể làm, là ghi đè lên địa chỉ trả lại. Mà về cơ bản có nghĩa là bạn có thể loại mất kiểm soát các hành vi của chương trình. Vì vậy, ở một mức độ rất cao tràn bộ đệm là khi bạn phân bổ một số lượng bộ nhớ. Và sau đó you-- này vì bạn lấy đầu vào người dùng hay cái gì như that-- bạn đi quá giới hạn những gì bạn đã phân bổ ban đầu và bắt đầu rối tung lên chương trình của bạn. Vâng? Đung Tại sao không phải là chỉ trả về một lỗi phân khúc? SPEAKER 1: Tại sao không phải là trả về một lỗi phân khúc? Nó có thể. Đôi khi các trình biên dịch hay trong một thời gian chạy của bạn đang thực sự đi vào kiểm tra xem. Nếu điều đó sẽ xảy ra, và đây là loại cấp độ thấp hơn, sau đó bạn cần phải biết. Nhưng nếu bạn không thiết kế các hệ thống đúng cách, sau đó bạn có cơ hội không bắt nó và chỉ cho phép các máy tính take-- sự người xấu xa để điều khiển máy tính của bạn. Yeah. Đung [Không nghe thấy]? SPEAKER 1: Chắc chắn rồi. Oh, khi tôi nói đệm, tôi chỉ có nghĩa là số lượng bộ nhớ mà bạn đã phân bổ. Vì vậy, ở đây tôi nói, oh, chúng tôi đã phân bổ sáu char-- đủ chỗ cho sáu nhân vật. Và tôi chỉ cần gọi là bộ đệm của tôi nơi tôi có thể ghi thông tin. Yeah. Bất kỳ câu hỏi khác về điều này? Yeah. Đung Làm thế nào để bạn ngăn chặn nó? Làm thế nào để bạn ngăn chặn nó? SPEAKER 1: Awesome câu hỏi. Làm thế nào để bạn ngăn chặn nó? Làm thế nào để bạn ngăn chặn tràn bộ đệm? Cũng là một cách để làm điều đó là một cái gì đó như GetString, nơi mà chúng tôi không ngừng tăng số lượng bộ nhớ mà chúng tôi phân bổ nếu người dùng nhập vào rất nhiều văn bản. Một điều là, nếu bạn chỉ muốn sáu nhân vật, làm một kiểm tra nhanh chóng. Nói chỉ nhập sáu ký tự. Yeah. Vì vậy, chúng ta hãy nói rằng bạn là làm việc on-- chúng ta đang đi để đi đến công cụ web một chút sau đó trong course-- nhưng chúng ta hãy nói rằng bạn đang làm việc trên một mẫu, bạn sẽ chỉ giới hạn bao nhiêu có thể tay trong. Yeah. Đung GetString kéo bộ nhớ từ đống, phải không? Chỉ cần làm rõ? SPEAKER 1: Một lần nữa? Đung Liệu GetString có bộ nhớ từ stack? SPEAKER 1: Tôi tin Getm-- get int chiếm nhiều bộ nhớ từ đống vì nó gọi alloc. Đung Oh. ĐƯỢC. SPEAKER 1: Yeah, malloc và realloc. Các câu hỏi khác? Yeah. Đung Vì vậy, bằng cách xác định kích thước của bộ nhớ đệm, bạn ngăn chặn người việc có thể để đưa mã có thể trượt qua các [không nghe được]. SPEAKER 1: Vì vậy, bằng cách xác định kích thước của bộ đệm, bạn đã nói, OK đây là cách nhiêu bộ nhớ chúng ta có thể sử dụng. Nếu bạn cho phép người dùng ghi trên nó, sau đó bạn sẽ gặp vấn đề. Có lý. Thật tuyệt vời. Hãy di chuyển dọc. Được rồi. Phát biểu của các lỗi, đây là một số thông báo lỗi phổ mà có thể đã hiện lên trong khi bạn là mã hóa, làm việc trên bộ vấn đề của bạn. Cơ hội tốt mà một trong các hiện trên các bài kiểm tra nếu năm qua là bất kỳ dấu hiệu. Vì vậy, câu trả lời là những loại lên đây trên diễn đàn. Nhưng cảm thấy tự do để hét ra một số chi tiết. Tại sao có thể một lỗi phân khúc xảy ra? Tại sao bạn có thể nhận được một lỗi phân khúc khi bạn đang chạy chương trình của bạn? Đung [không nghe được]. SPEAKER 1: Tốt. Vâng, nếu chúng ta cố gắng truy cập bộ nhớ đó là không ban cho chúng ta. Nếu chúng ta tới đích của một con trỏ null. Ví dụ, nếu chúng ta gọi malloc, và quên đi để kiểm tra xem nó là null, và chúng tôi chỉ cố gắng sử dụng nó, máy tính của sẽ cung cấp cho chúng ta một lỗi phân khúc. Tốt. Còn tiềm ẩn Tờ khai chức năng? Điều đó có nghĩa là gì? Đung Bạn đang cố gắng sử dụng một chức năng mà bạn chưa xác định. SPEAKER 1: Tốt. Bạn đang cố gắng sử dụng một chức năng mà bạn chưa xác định. Vì vậy, đó có thể là một trong hai điều. Có lẽ nó là giống như ví dụ Camille đã được nói đến. Và bạn có một hàm chính mà các cuộc gọi một cái gì đó gọi là khối lập phương. Và chúng ta hãy nói rằng bạn quên để viết mẫu thử nghiệm này. Bạn quên nói, hey máy tính, Tôi có chức năng này được gọi là khối lập phương. Bạn sẽ thấy nó sau này. Hãy nói rằng bạn quên viết nguyên mẫu, bạn có thể nhận được lỗi này. Một điều là, chúng ta hãy nói bạn cố gắng sử dụng printf, và quên bao gồm thư viện chuẩn, sau đó nó sẽ nói ngầm khai chức năng. Và cuối cùng nhưng không kém phần quan trọng, nhận dạng không khai báo. Yeah. Đung Bạn đã có một phạm vi vấn đề. Giống như thể bạn đang cố gắng để gọi một biến địa phương đó là trong một loại khác nhau của khu vực. SPEAKER 1: Great, vì vậy nếu bạn có một biến mà không có trong phạm vi, và bạn đang cố gắng sử dụng nó, bạn sẽ gặp rắc rối. Và chỉ hơn thường, chúng ta hãy nói bạn cố gắng sử dụng x, với bao giờ nói int x = 5, sau đó bạn sẽ chạy vào rắc rối. Xin lỗi, câu hỏi về điều này? Awesome, chugging phải dọc. OK, đệ quy, tại sao chúng ta hãy might-- see-- tôi đã mất của tôi sch-- oh đây chúng tôi đi, chỉ cần đảm bảo chúng tôi khoảng trên lịch. Tất cả các bên phải, thoáng mát. OK, đệ quy, ý tưởng chung đệ quy, một hàm đệ quy là một chức năng mà tự gọi mình. OK, vì vậy đó là những gì tôi có nghĩa là bằng một khái niệm chương trình theo đó một chức năng tự gọi mình. Điều gì sẽ là some-- gì một lý do tốt để sử dụng đệ quy? Khi nó có thể có ích? Hoặc Whats một chương trình thực sự vay chính nó để đệ quy? Đung tìm kiếm nhị phân. SPEAKER 1: tìm kiếm nhị phân vay chính nó để đệ quy, bởi vì bạn có vấn đề này mà bạn có thể phá vỡ thành những mảnh nhỏ, và liên tục thực hiện cùng một thuật toán trên nó. Điều này dẫn đến, trong nhiều trường hợp, nhiều mã thanh lịch đó là chính xác hơn. Chúng tôi chỉ là những ví dụ tìm kiếm nhị phân. Một ví dụ khác là hợp nhất phân loại. Đôi khi, khi bạn nghĩ về một thuật toán, như thừa, nó chỉ cảm thấy đệ quy, phải không? Bởi vì chúng ta biết rằng giai thừa 5 là một nhân tố 4 lần 5. Và như vậy khi bạn thiết lập một vấn đề theo cách đó, nó chỉ cảm thấy đệ quy. Vì vậy, đó sẽ là một cách tuyệt vời để viết nó. Câu hỏi? Vâng. Đung một trường hợp cơ sở là gì? SPEAKER 1: Oh một trường hợp cơ sở là gì? Tôi nói, không quên để bao gồm một trường hợp cơ sở. Hãy nói rằng chúng tôi đang viết một chức năng thừa, và chúng tôi đã làm thừa của 5. Và chúng ta biết một giai thừa của 5 là 5 lần một thừa của 4, blah, blah, blah, blah. Làm thế nào để chúng ta biết khi nào dừng lại? Làm thế nào để chúng ta biết rằng chúng ta thực sự có một số? Bởi vì nếu chúng ta cứ liên tục gọi điện thoại thừa, sau đó chúng ta sẽ không bao giờ có được một câu trả lời, phải không? Vì vậy, khi chúng ta biết làm thế nào để dừng lại ở giai thừa dụ. Bất cứ ai, yeah. Đung Khi 1 giai thừa là 1. SPEAKER 1: Tốt. Vì vậy, chúng tôi biết. Chúng tôi có thể đưa cho các cấp mà 1 giai thừa bằng 1. Vì vậy, nếu chúng tôi nhận được đến điểm mà chúng ta đang gọi điện thoại thừa trên 1 chỉ cần đi trước và trả lại 1. Và đó là trường hợp cơ sở của bạn. Bởi vì chúng ta biết một khi chúng ta đạt điều đó, và chúng tôi sẽ luôn luôn nhấn đó, chúng tôi sẽ never-- chúng tôi sẽ không chỉ tiếp tục đi mãi mãi. Bất kỳ câu hỏi khác về đệ quy? Vâng. Đung Vì vậy, khi bạn quay trở lại 1, nó chỉ tự động sẽ dừng chương trình, phải không? SPEAKER 1: Yeah vì vậy khi bạn gọi trở lại 1, if-- hãy nói, hãy nói thừa của 2 cuộc gọi thừa của 1, thừa của 1 chỉ sẽ trao lại 1. Và bây giờ thừa của 2 sẽ nói OK, 2 lần 1 là 2, và trở lại câu trả lời đó. Vâng. Đung Do chúng tôi phải lo lắng về phạm vi trong đệ quy khi bạn đi vào một thuật toán? SPEAKER 1: Ah, vâng. Vâng, bạn không phải lo lắng về phạm vi trong bối cảnh của đệ quy. Vì vậy, chỉ có các biến được định nghĩa trong đó chạy các chức năng sẽ có ích. Vâng câu hỏi hay. Được rồi, chúng ta hãy tiếp tục di chuyển dọc. Bởi vì chúng tôi có rất nhiều nguyên liệu để có được thông qua. Nhưng như tôi đã nói, cảm thấy tự do để nhấn lên giờ làm việc, hoặc chúng ta sau khi thực tế. Đây chỉ là một slide thực sự nhanh chóng. Chúng tôi đã học được rất nhiều về tìm kiếm và các loại. Làm ơn làm ơn làm ơn, các phần này là trực tuyến, Tôi tin rằng ở cs50.net/quizzes. Vì vậy, đi lấy bảng xếp hạng này và đặt nó trên tờ nhận xét của bạn, bởi vì sẽ có một câu hỏi về điều này. Xin vui lòng không nhận được nó sai. Chỉ cần rất nhanh chóng, những biểu đồ này có nghĩa là, là nó nói o khoảng lớn, mà chúng tôi biết là trên ràng buộc của một thuật toán chạy thời gian. Và chúng tôi có omega, đó là có được những ràng buộc thấp hơn của một thời gian chạy thuật toán. ĐƯỢC? Đung [không nghe được]. SPEAKER 1: Yeah, điều cuối cùng là những gì? Theta là gì? Đó là nếu we-- chúng tôi sẽ chỉ quan tâm trong lớp này trong trường hợp nơi chúng tôi trên ràng buộc và ràng buộc thấp hơn của chúng tôi đều giống nhau. Vâng, đó là lần duy nhất đó là sẽ đi lên trong lớp này. OK, tôi sẽ tiếp tục đi. Nếu bạn đã không đưa hình ảnh của bạn, Tôi hứa này sẽ được trực tuyến. OK, tuyệt vời, cấu trúc. Tại sao chúng ta có thể muốn cấu trúc? Một lý do hữu ích là gì chúng ta có thể muốn cấu trúc. Một người nào đó hét lên một cái gì đó. Vâng chúng ta hãy nhìn vào Ví dụ trên bảng. Hãy nói rằng chúng tôi đang làm việc với tất cả các học sinh. Nếu chúng ta đang thực hiện một chương trình cho CS50, có như 800 người. Chúng tôi cần phải write-- chúng ta sẽ cần phải xử lý rất nhiều thông tin về sinh viên. Nó sẽ được tốt đẹp nếu chúng ta có thể loại nhóm this-- tất cả các thông tin mà đã làm với một sinh viên đặc biệt thành một kiểu dữ liệu. Nhưng chúng ta biết không có dữ liệu gõ tên, Sinh viên, phải không? Chúng tôi có một số nguyên, chúng tôi có một phao, chúng ta có một chuỗi, hoặc một ngôi sao char, nhưng chúng tôi không có, một học sinh. Vì vậy, chúng ta có thể làm là loại thực sự xác định cấu trúc riêng của chúng tôi, gọi nó là sinh viên, và chúng tôi có thể liên kết một số các lĩnh vực khác nhau với các cấu trúc đó. Vì vậy, trong trường hợp này, chúng ta hãy chúng ta có một học sinh. Và những điều mà chúng tôi quan tâm về là số ID của học sinh và tên của học sinh. Và bây giờ chúng tôi có thể kết hợp ID này và tên này với một học sinh nhất định. Vì vậy, chúng ta hãy xem một số ví dụ. OK, vì vậy ở đây tôi nói, OK, chúng ta hãy nói chúng tôi muốn làm cho một học sinh. Tôi gọi anh ta là học sinh 1. Và số ID của mình, trong trường hợp này, chúng ta có thể truy cập bởi chỉ cần làm tên của học sinh chấm lĩnh vực chúng tôi muốn truy cập. Vì vậy, đây sẽ chỉ là học sinh 1 dot ID, và chúng tôi thiết lập nó bằng 1. Bởi vì nhớ, chúng tôi cho rằng ID là có được một số nguyên. Và rất tương tự như vậy, chúng ta có thể nói, đây tên học sinh là có được Davin, Ví dụ như. Vì vậy, chúng tôi chỉ có thể truy cập vào lĩnh vực của một cấu trúc bằng cách sử dụng dấu chấm này. Các câu hỏi về điều đó? Yeah. Đung Có cách nào để bảo vệ các biến của bạn? Có cách nào để bảo vệ các biến khỏi bị truy cập từ bên ngoài? SPEAKER 1: Liệu có cách nào để bảo vệ các biến của bạn khỏi bị truy cập từ bên ngoài? Không có trong phạm vi của CS50. Các câu hỏi khác? Yeah. Đung typedef struct là gì? Mỗi thành phần không có ý nghĩa gì? SPEAKER 1: Ah, typedef struct là gì? Những gì hiện mỗi thành phần nghĩa của anh chàng này? Đung Yeah. SPEAKER 1: OK, mát mẻ. Vì vậy, điều này nói, hey máy tính, tôi muốn tạo ra một cấu trúc mới. Và tôi sẽ xác định một định nghĩa cho nó, như vậy mà tôi có thể sử dụng nó như thể nó là một loại trong suốt chương trình của tôi. OK, vì vậy tôi muốn xác định một cấu trúc. Và bây giờ tôi sắp bị có thể sử dụng nó như là một loại. Và tên của nó là sinh viên. Và đây là lĩnh vực của mình. Đung vậy là typedef struct [Không nghe thấy]? SPEAKER 1: Nếu bạn muốn để có thể sử dụng cấu trúc này trong suốt chương trình của bạn, và trong hầu hết các trường hợp, chúng tôi CS50 làm, chúng ta phải nói loại Def. Và cho phép nó sử dụng nó cùng cách mà chúng ta sử dụng như int hay float. Các máy tính sẽ luôn biết nó là gì. Yeah. Đung chúng ta có thể viết này trong tập tin tiêu đề? SPEAKER 1: Oh, xin lỗi. Do chúng tôi viết điều này trong các tập tin tiêu đề? Bạn có thể viết ở trên cùng của bạn chương trình, ở đầu chương trình của bạn c. Vâng, đó sẽ là nhiều nhất nơi hợp lý cho nó. Trở lại ở đó. Đung Câu hỏi tương tự, vì vậy trước khi chính? SPEAKER 1: Phải, bạn cần điều này để có một nơi nào đó mà tất cả mọi người có thể truy cập nó. Vì vậy, trước khi chính trong trường hợp của bạn, yeah. Đung Có một sự khác biệt giữa đưa sinh viên vào đầu và trên dưới? SPEAKER 1: Ah, là có một sự khác biệt giữa việc đưa sinh viên trên hay phía dưới? Let-- lưu câu hỏi đó, và khi chúng tôi nhận được danh sách liên kết, chúng ta sẽ thấy rằng, OK? Vì vậy, giữ cho rằng trong một giây. Điều cuối cùng tôi muốn đề cập ở đây, là thay vì có một cấu trúc, chúng ta có một con trỏ đến một cấu trúc, chúng ta có thể thay đổi ký hiệu của chúng tôi để được một ít đẹp hơn. Chúng tôi có thể nói, chúng ta hãy nói rằng chúng ta có một con trỏ đến một sinh viên thay vì chỉ một học sinh. Nếu chúng ta muốn truy cập vào một lĩnh vực, thay vì làm, cũng đi tới đích của con trỏ, và sau đó truy cập vào tên trường. Ký hiệu này có vẻ hơi lộn xộn với các ngôi sao trong dot này. Hoàn toàn chính xác, nhưng một loại của cách sạch hơn để làm điều đó, chỉ là để nói tên con trỏ mũi tên. Và đó thực sự kết hợp dereferencing và truy cập vào một biểu tượng đẹp. Các câu hỏi về điều đó? Đung Chỉ cần nói rằng một lần nữa. SPEAKER 1: Giả sử một lần nữa. Đung Chính xác những gì bạn vừa nói. SPEAKER 1: Chắc chắn, chính xác những gì tôi vừa nói. Nếu chúng ta có một con trỏ đến một sinh viên chứ không phải là học sinh bản thân, chúng tôi can-- một cách mà chúng ta có thể truy cập trường là để tới đích của nó, và sau đó Tên truy cập. Một, cách đẹp hơn chúng tôi có thể làm điều đó, mà chỉ là một chút đường cú pháp, chỉ được làm con trỏ tên mũi tên. Và có nghĩa là sẽ kết hợp dereferencing và việc truy cập. Yeah, đẹp, thoáng mát. Được rồi. Vì vậy, chúng ta hãy nói về những câu hỏi khác. Hãy nhảy với các nút, mà chúng ta sẽ sử dụng trong danh sách liên kết chỉ trong một giây. Vì vậy, ở đây, bạn sẽ nhận thấy rằng có là nút từ cả hai phía dưới, và trên đầu trang. Trước đây, khi chúng tôi đã xác định học sinh, chúng ta chỉ có sinh viên ở phía dưới. Chúng tôi không có học sinh lên hàng đầu. Bất cứ ai biết lý do tại sao mà có thể được? Sự khác biệt là gì? Yeah. Đung Vì vậy, bạn sử dụng nút là định nghĩa của nút, do đó, nó là một điều đệ quy? SPEAKER 1: Tốt. Vâng, chúng ta cần các nút của chúng tôi để có con trỏ đến các nút khác. Vì vậy, kể từ khi chúng tôi sử dụng loại này trước khi nó thực sự được xác định, chúng ta cần phải đặt nó ở đầu chỉ để nó biết nó là gì. Đung Vì vậy, chúng tôi vẫn cần nó ở phía dưới? SPEAKER 1: Yes. Đung Vì vậy, luôn luôn ở phía dưới. SPEAKER 1: Luôn ở phía dưới. Vì vậy, tất cả các bạn sẽ có nó ở phía dưới. Bất kỳ câu hỏi khác? Tất cả các quyền, do đó cho phép thực sự nói chuyện về danh sách liên kết thực sự nhanh chóng. Vì vậy, danh sách liên kết are-- chúng ta sử dụng chúng thay vì mảng trong một số trường hợp, bởi vì chúng ta biết rằng mảng là một chiều dài cố định, trong khi danh sách liên kết chúng ta có thể phát triển và co như chúng ta muốn. Vì vậy, đây là một ví dụ về những gì một danh sách liên kết có thể trông như thế nào. Những gì chúng ta cần phải thấy là người đứng đầu danh sách. Vì vậy, nơi danh sách khởi động. Và sau đó ông nút, mỗi nút theo sau, trách nhiệm phải biết nơi mà các nút tiếp theo là. Vì vậy, trong trường hợp này, nút mà các cửa hàng 1 là trách nhiệm phải biết nơi 3 là. Người mà các cửa hàng là 3 trách nhiệm phải biết nơi 9 là. Và 9 không có ai khác để trỏ đến. Nó là sự kết thúc của danh sách, vì vậy nó chỉ nói null. ĐƯỢC? Đung điểm này là gì? SPEAKER 1: quan điểm này là gì? Đung Yeah. SPEAKER 1: Bởi vì, chúng ta hãy nói rằng chúng tôi có một số dữ liệu. Và chúng ta không biết chính xác như thế nào nhiều dữ liệu, chúng tôi muốn đi trước thời đại. Vì vậy, với một mảng, chúng ta hãy nói nơi chúng tôi muốn đếm người ở hàng đầu tiên. Rất có thể nó sẽ không thay đổi. Chúng tôi chỉ có thể nói, OK, tôi muốn một mảng có kích thước sáu. Nhưng nếu chúng ta muốn một cái gì đó đó là sẽ thay đổi. Ví dụ, hãy nói rằng tôi đã cố gắng để theo dõi các sinh viên khi họ đi vào phòng cho phiên xét. Tôi không có ý tưởng bao nhiêu bạn mọi người sẽ hiện lên. Vì vậy, tôi có thể muốn có một cấu trúc dữ liệu mà tôi có thể mở rộng và thu nhỏ. Bởi vì có thể ai đó sẽ rời, có thể ai đó sẽ đến. Và do đó, bất cứ lúc nào, chúng tôi có thể thêm hoặc loại bỏ các nút. Cool, câu hỏi lớn. Yeah. Đung Nếu bạn có thể sử dụng một cái gì đó giống như GetString mà giữ phép bạn có được nhiều dữ liệu như bạn cần nó, tại sao bạn cần này quá? SPEAKER 1: Tại sao bạn sử dụng danh sách liên kết khi bạn có thể sử dụng giống như GetString? Đó là một câu hỏi hay. Hãy nhớ rằng một trong Get-- sự suy sụp của GetString là chúng ta đã không làm một rất tốt công việc giải phóng bộ nhớ, và chúng tôi đã giới thiệu một loạt các bộ nhớ bị rò rỉ vào chương trình của bạn? Bạn có thể mang nó một tĩnh mảng có kích thước và tiếp tục phát triển nó. Nhưng bạn phải tìm địa điểm mới trong bộ nhớ. Nó sẽ chỉ được rất nhiều chi phí. Một trong những điều tốt đẹp về liên kết danh sách như trái ngược với mảng, là mảng là tất cả trong cùng một vị trí trong bộ nhớ. Nó phải được liên tục khối của bộ nhớ. Trong khi đó, danh sách liên kết, 2 và 3 có thể được hoàn toàn tại các địa điểm khác nhau. Like 2 là ở đây, và 3 là ở đây. Và miễn là họ có một con trỏ với nhau, đó là tốt. Chúng tôi biết chúng tôi có thể tìm thấy chúng. Câu hỏi đó không? Đung GetString là một chức năng trong thư viện CS50, phải không? Nó không tồn tại trong chương trình thực tế. SPEAKER 1: Đúng. Phải, đó là điều khác. GetString không tồn tại bên ngoài bối cảnh của CS50. Yeah. Đung Vì vậy, không thực tế mà hai có thể được thực sự xa nhau, không tác động hiệu quả truy cập vào các phần tử trong danh sách? SPEAKER 1: Đó là một câu hỏi lớn. Câu hỏi là, có phải nó tác động hiệu quả của việc truy cập các yếu tố khác nhau trong danh sách. Trên thực tế, có. Bởi vì chúng ta biết chúng ta hãy if-- nói rằng chúng ta muốn truy cập yếu tố thứ hai của mảng, chúng ta biết chúng ta chỉ có thể làm khung mảng 1, bên phải. Nó luôn luôn đi có cùng một vị trí. Nhưng nếu chúng ta muốn nhận được để mà 3, chúng ta không thể chỉ nói, hãy lấy đó 3. Chúng tôi có thể nói, OK, bắt đầu từ đầu của danh sách, và bây giờ chúng tôi thực sự có đi qua cho đến khi chúng tôi tìm số chúng tôi quan tâm. Vì vậy, trong trường hợp này chúng ta nói, OK đây là số đầu tiên. Vì vậy, về cơ bản, đó là chỉ số 0. Bây giờ chúng ta phải tìm số thứ hai. Đó là chỉ số 1. Vì vậy, đó là thực tế sẽ chỉ đối với: truy cập, sẽ mất thời gian tồn tại. Cool, N. tuổi lớn Yeah. Đung mỗi danh sách là gì? Có phải họ từng mảng, hoặc những gì? SPEAKER 1: Đó là một câu hỏi lớn. Từng là gì cấu trúc mà tôi đã rút ra? Họ là các nút. Vì vậy, mỗi người trong số các bé cấu trúc có hai phần. Nó có một số nguyên chứa. Đó là số liệu thực tế mà nó nắm giữ. Đó là các loại phần hữu ích. Và, đây là những gì làm cho nó một danh sách liên kết, nó có một con trỏ đến nút tiếp theo. Tuyệt vời câu hỏi. Tất cả các quyền, vì vậy chúng ta hãy nhìn rất nhanh chóng xem xét một số ví dụ về những gì chúng ta có thể làm gì với danh sách liên kết. Vì vậy, một ví dụ rất là nhanh chóng, giả sử chúng ta muốn làm một tìm kiếm. Những loại tìm kiếm có thể không chúng tôi làm trên danh sách liên kết? Đung nhị phân. SPEAKER 1: Binary. Tại sao chúng ta không thể sử dụng tìm kiếm nhị phân? Đung [không nghe được]. SPEAKER 1: Phải, bởi vì với nhị phân tìm kiếm, chúng tôi phải dựa vào thực tế rằng chúng ta chỉ có thể nhảy vào mảng tại bất kỳ điểm nào. Chúng tôi chỉ có thể nói, đi đến các yếu tố trung. Với ở đây, khi chúng tôi nói một chút trước đó, chúng tôi không thể nhảy tới các yếu tố trung. Để tìm thấy bất kỳ yếu tố, chúng tôi thực sự phải đi qua toàn bộ danh sách của chúng tôi. Vì vậy, nếu chúng ta muốn làm một tìm kiếm, tốt nhất chúng tôi có thể làm chỉ là một tìm kiếm tuyến tính. Chúng tôi bắt đầu từ đầu, chúng tôi check-- hãy nói chúng tôi tìm 9-- chúng tôi bắt đầu từ đầu. Chúng ta nói, là 9 này? Không. Là 9 này? Không. Là 9 này? Vâng, chúng tôi tìm thấy nó. OK, đó là tất cả. Dưới đây là một chút của pseudo-code. Tôi sẽ để lại điều này cho bạn kẻ khuấy tung lên trên của riêng bạn, chỉ vì chúng tôi đang chạy một chút ngắn về thời gian. Cho phép nói về chèn. Chúng tôi đã nhìn thấy một bản demo thực sự mát mẻ của này trong bài giảng mà chúng tôi đã nói, OK, chúng tôi có danh sách này liên kết nơi mọi người chỉ vào nhau, và một người nào đó đi lên trên sân khấu. Làm thế nào để chúng ta chèn rằng người vào danh sách liên kết của chúng tôi? Vâng, một cách sai lầm để làm, mà là tôi nghĩ rằng những gì chúng ta nhìn thấy đầu tiên, là khi người phụ phía trước tự động chỉ cho người mới. Và sau đó chúng tôi loại bỏ nửa thứ hai của danh sách, phải không? Bởi vì chúng tôi không biết nơi nó đang ở trong bộ nhớ nữa. Vì vậy, phải rất cẩn thận về thứ tự mà chúng ta chèn những thứ. Vì vậy, ở đây, chúng ta hãy nói rằng chúng ta muốn đặt 1 ở phía trước của danh sách của chúng tôi. Đầu tiên, chúng tôi có 1 điểm tại element-- thứ hai hoặc các phần tử có chứa 1. Vì vậy, chúng tôi làm điều đó, chỉ nên chúng tôi không sẽ mất đi một nửa thứ hai. Và bây giờ, chúng ta có thể có điểm đầu đến 1. Vì vậy, một lần nữa, đây chỉ là như mức độ siêu cao. Đây là cách chúng ta sẽ chèn một nút. Chúng tôi có rất nhiều pseudo-code here-- xin lỗi, Tôi không biết tại sao tôi gọi đó là pseudo-code. Đó là mã thực tế. Bạn có thể đi kiểm tra xem nó ra sau đó. Được rồi, chúng ta hãy rất quickly-- bất kỳ câu hỏi thêm trên danh sách liên kết trước khi tôi di chuyển lên trên một vài dữ liệu khác cấu trúc trong 10 phút cuối cùng của chúng tôi. Đung Nào chúng ta cần bây giờ làm thế nào để viết nó vào một thử nghiệm? SPEAKER 1: Chúng ta cần phải biết làm thế nào đối với: Đung Viết nó trên một thử nghiệm. SPEAKER 1: Chúng ta cần đối với: bạn nên chuẩn bị để viết, chèn, xóa, và tìm kiếm các danh sách liên kết trong bài thi. Đó là một cái gì đó mà chúng ta có thể mong đợi bạn làm. Chỉ cần đi qua nó. Nếu bạn có bất kỳ câu hỏi trên mã, bắn TF của bạn một email, đến giờ làm việc. Vẫn còn rất nhiều thời gian để nghiên cứu, không phải lo lắng. Tất cả các quyền, bất kỳ sự khác câu hỏi về danh sách liên kết? Vâng. Đung Vì vậy, nếu bạn không sử dụng con trỏ để đi đến một bên phải trước khi bạn sử dụng các con trỏ cho một bên trái, đó là tương đương với việc xóa tất cả mọi thứ, đúng không? SPEAKER 1: Yeah. Đung [không nghe được]. SPEAKER 1: Phải, vì chúng ta không thể có được nó, nó thực sự còn tồi tệ hơn. Không chỉ bởi vì chúng ta không biết nó ở đâu, chúng ta không còn có thể sử dụng nó, nhưng we've-- chúng tôi không giải phóng bộ nhớ đó nữa. Vì vậy, nó chỉ treo xung quanh và không có ích bởi vì chúng tôi không thể tìm thấy nó. Vâng, câu hỏi mát. Được rồi, chúng ta hãy nói về ngăn xếp. Chúng tôi đã nhìn thấy đống rất nhanh chóng. Họ là lần đầu tiên trong cuối cùng ra các cấu trúc dữ liệu. Vì vậy, chúng tôi nghĩ rằng các giá sách trong Annenberg khay nơi chúng tôi ngăn xếp mọi thứ trên đầu trang. Và nếu bạn đang đi để đi được một khay, bạn luôn luôn đi để có một trên hàng đầu, mà là recently-- nhất đó là điều mà chúng ta nhất gần đây đã đưa trên đỉnh của ngăn xếp. Vì vậy, bạn có thể loại suy nghĩ của loại hình ảnh khi bạn đang nghĩ đến việc ngăn xếp. Và sau đó, chúng tôi đã xuất hiện một cái gì đó ra khỏi đỉnh của ngăn xếp. Nếu chúng ta are-- oh, và những từ mà chúng ta sử dụng khi chúng ta đang nói về những dữ liệu này cấu trúc thường là, nếu chúng ta đặt cái gì đó trên stack, chúng ta nói rằng chúng ta đang đẩy nó vào stack. Và nếu chúng ta lấy một cái gì đó ra khỏi ngăn xếp, chúng ta nói rằng chúng ta đang popping ra khỏi stack. Nếu bạn đang đi để thực hiện một stack-- mà tôi chắc chắn khuyên bạn hãy thử out-- bạn sẽ muốn theo dõi, chúng ta hãy nói rằng bạn đang sử dụng một mảng. Tôi biết trong bài giảng của chúng tôi nói chuyện về việc sử dụng cả hai mảng hoặc danh sách liên kết để thực hiện một chồng. Nếu bạn đang sử dụng một mảng, bạn cần phải keep-- cái cớ me-- chúng ta cần phải theo dõi kích thước và dung lượng. Vì vậy, số lượng tối đa rằng chồng của chúng tôi có thể giữ. Các câu hỏi về ngăn xếp? Đung sự khác biệt là gì giữa quy mô và năng lực? SPEAKER 1: Sự khác biệt giữa kích thước và công suất, câu hỏi tuyệt vời. Vì vậy, chúng ta hãy nói chúng tôi sử dụng một mảng, và chúng tôi bố trí đủ chỗ cho 10 số nguyên. Và chúng tôi bắt đầu để điền vào đó lên. Và chúng ta đẩy những điều trên, và chúng tôi bật mọi chuyện. Chúng tôi muốn theo dõi tối đa số chúng ta có thể nắm giữ, đó là năng lực. Và chúng tôi muốn theo dõi các số lượng hiện tại chúng tôi có, đó là kích thước. Câu hỏi hay. Bất cứ điều gì khác trên ngăn xếp? Được rồi, chúng ta hãy nói về bất ngờ, hàng đợi. Không giống như ngăn xếp, đó là lần đầu tiên trong cuối cùng ra, đây là lần đầu tiên trong, ra đầu tiên. Vì vậy, đây là like-- nghĩ của một dòng. Hãy suy nghĩ về xếp hàng tại Apple Cửa hàng để có được bất kỳ sản phẩm. Và người đầu tiên trong dòng nên là người đầu tiên những người đã giúp. Vì vậy, điều đầu tiên mà là đẩy này, điều đầu tiên mà popped. Mát? Rất similarly-- oh, những từ mà chúng tôi sử dụng thay vì đẩy và pop-- mà tôi chỉ được sử dụng, Tôi sorry-- là chúng ta nói, nếu chúng ta đặt một cái gì đó vào hàng đợi, chúng ta nói enqueued nó. Nếu chúng ta lấy cái gì ra khỏi hàng đợi, chúng ta nói rằng chúng ta dequeued. Nó. Tôi có thể được phát âm những sai, nhưng bạn có được ý tưởng. Và sau đó một lần nữa, giống như ống khói, nếu chúng ta thực hiện điều này như mảng, chúng ta cần phải theo dõi các kích thước, khả năng, và người đứng đầu. Tôi có nghĩa là những gì của người đứng đầu? Tại sao chúng ta cần phải giữ theo dõi của người đứng đầu? Đung Bởi vì đó là nơi mà đầu danh sách của bạn. SPEAKER 1: Yeah, về cơ bản là người đứng đầu nơi khởi đầu của hàng đợi của chúng tôi là. Bởi vì chúng ta biết, không giống như ngăn xếp, which-- Tôi sẽ cố gắng đối mặt với way-- này chúng ta biết rằng nó luôn luôn đi co lại theo cách này và phát triển theo cách này. Hàng đợi, mọi người đến vào cuối và để lại từ đầu, vì vậy chúng tôi phải theo dõi về nơi bắt đầu là. Đó là những gì tôi có nghĩa là chúng ta cần phải theo dõi các nơi đầu là. Mát? Được rồi. Phút thứ tám, đôi vợ chồng nhiều chủ đề, chúng ta có thể làm điều đó. Tất cả các quyền, bảng băm. Chúng tôi nói chuyện rất ngắn gọn về các bảng băm. Đối với các bài kiểm tra, bạn chỉ cần hiểu chúng ở mức độ cao. Ý tưởng cơ bản là bạn có dữ liệu này. Và chúng tôi muốn truy cập nó trong thời gian đó là nhanh hơn so với một cái gì đó giống như một liên kết danh sách. Bởi vì chúng tôi đã nói, nếu chúng ta tìm kiếm thông qua một danh sách liên kết, mà có thể mất thời gian tồn tại. Ngay cả việc truy cập có thể mất N lần trong một danh sách liên kết. Bảng băm cho chúng ta một cách mà chúng ta có thể nhanh hơn truy cập vào mọi thứ, và nhiều hơn nữa nhanh chóng tìm kiếm những thứ, mà không có những hạn chế của một mảng nơi mà chúng tôi đã cố định kích thước. Vì vậy, chúng tôi nghĩ ra một cấu trúc dữ liệu ở đâu, nơi chúng tôi đặt nó trong cấu trúc dữ liệu phụ thuộc vào điều này hàm băm huyền diệu. Vì vậy, trong trường hợp này, các hash huyền diệu chức năng là chỉ dùng một từ, kiểm tra những gì các chữ cái đầu tiên là, và sau đó chỉ cần phân loại nó theo thứ tự abc. Vì vậy, về cơ bản chúng tôi đặt chúng vào thùng khác nhau. Khi chúng ta nhìn thấy chuối, chúng ta nói, OK, chúng ta hãy đặt trong thùng B. Khi chúng ta thấy Apple, chúng ta hãy đặt nó trong thùng A. Nếu chúng ta nhìn thấy hoa mai, chúng ta hãy đặt trong thùng A. ĐƯỢC? Vì vậy, giả sử tôi đang tìm for-- tôi không biết, trái cây khác là những gì? Giả sử tôi đang tìm kiếm cho cam. Tôi nên tìm ở đâu? Trong xô O. Vâng, chỉ có một nơi màu cam có thể được, OK? Vì vậy, tôi đã nói trước điều gì xảy ra if-- tôi cũng đã nói trước đó, hãy nói chúng tôi đưa mơ in-- nhưng tôi thực sự giải quyết một thực tế rằng, oh no, nếu tôi được đưa berry trong, nó sẽ xung đột với chuối. Nơi chúng tôi đặt nó nếu có đã điều gì đó trong bảng của chúng tôi? Vâng, chúng tôi có một vài tùy chọn. Lựa chọn số một là tuyến tính thăm dò, có nghĩa là về cơ bản, hãy nói rằng tôi muốn thử đặt berry, và tôi thấy, oh no, chuối đã có, Tôi chỉ nói OK, chúng ta hãy tôi tìm kiếm các vị trí tiếp theo. Vì vậy, tôi đi bộ xuống, tôi nói, oh, không có gì trong xô D là. Tôi thật sự không thể nghĩ ra bất kỳ loại trái cây bắt đầu bằng chữ D, vì vậy tôi chỉ cần đi để đưa berry trong đó. Sầu riêng. OK, vì vậy kể từ khi có không có gì trong đó chưa, Tôi cũng có thể chỉ cần sử dụng ngay mà. Những bất lợi của điều đó là gì? Đung Nó ra lệnh. SPEAKER 1: Xin lỗi? Đung Nó ra lệnh. SPEAKER 1: Đó là out-- phải, chúng ta có thể kết thúc với những điều không in-- được lưu trữ vào xô trong cách mà chúng ta mong đợi họ được. Vì vậy, nếu chúng tôi đang tìm kiếm cho berry, trước khi chúng ta nói, oh chúng ta có thể nhìn vào một cái xô. Chỉ có thể là trong một cái xô. Nhưng bây giờ, thực sự, nó có thể là trong tất cả các xô, phải không? OK, đây là một lựa chọn khác, chaining-- riêng đó là ý tưởng rằng chúng tôi đang đi sử dụng một chút sau này trong P thiết lập 5. Thay vì chỉ có một không gian trong mỗi nhóm, tại sao chúng ta không có mỗi thùng là một con trỏ đến một danh sách liên kết? Nơi chúng tôi nói, OK, có một xô cho tất cả mọi thứ bắt đầu với A. Và có chỉ là có được một liên kết danh sách các loại trái cây bắt đầu bằng A. Vì vậy, nếu chúng ta có được một loại trái cây mới, chúng ta hãy nói chúng tôi get-- chúng bơ, chúng tôi có táo, hãy nói chúng tôi có được mơ, làm thế nào chúng ta sẽ đặt trong danh sách? Vâng, chúng tôi muốn đi đến xô 0, và chúng tôi muốn chỉ cần chèn nó vào danh sách yêu thích của chúng tôi, đơn giản như thế. Bây giờ tôi cứ nói cái xô. Chúng ta có thể thực hiện điều này trong một số cách. Một cách điển hình này loại hình ảnh cho thấy, là có thể có một mảng của con trỏ đến các danh sách liên kết. Đó là một cách chúng ta có thể thực hiện một bảng băm. Đung Bạn có cần một danh sách bởi vì chuối và quả mọng là ra trật tự? SPEAKER 1: Sẽ bạn need-- ah, bạn sẽ cần một danh sách khác vì chuối và berry là ra lệnh? Trong trường hợp này, hàm băm của chúng tôi, mà cho chúng ta biết nơi để đặt vật không quan tâm đến bức thư thứ hai. Nó không quan tâm về alphabetizing, nó chỉ quan tâm đến những chữ cái đầu tiên. Câu hỏi? Đung định nghĩa đó là gì chức năng, và những gì nó trông như thế nào? SPEAKER 1: Ah, tốt. OK, vì vậy chúng tôi không cần phải lo lắng quá nhiều cho đề thi này. Vì vậy, tôi đã không đặt trong slide. Chúng ta sẽ được giới thiệu để nó cho P thiết lập 5. Nhưng về cơ bản, nó nói, đưa ra một nguyên tố mới, nơi tôi nên đặt nó? Hoặc, hãy nói rằng tôi đang tìm kiếm một phần tử, nơi nó có thể được? Vâng, câu hỏi lớn. OK, rất nhanh chóng, cây và cố gắng. Vì vậy, một cây là chỉ cần bất kỳ loại cấu trúc dữ liệu có tổ chức. Và chúng ta sẽ thấy rất nhiều hình ảnh mà sẽ làm cho siêu rõ ràng. Và một Trie, mà chúng ta đã thấy trong các lớp học, là một loại rất đặc biệt của cây mà thực chất hoạt động như thế một bảng băm đa cấp. Đó là siêu mát mẻ. Chúng ta sẽ thấy nó chỉ trong một giây. Được rồi, vậy chúng ta hãy nói về cây đầu tiên. Vì vậy, đây là một ví dụ điển hình thực sự của một cây, nơi chúng tôi có một số hệ thống phân cấp. Bạn thấy rằng một là tại phía trên đỉnh, phải không? Và tôi có thể nói hàng đầu bởi vì có rõ một sắp đặt bởi vì chúng tôi có những mũi tên đi xuống. Do đó, điều ở phía trên, Tôi gọi đó là nút gốc. Vì vậy, một là nút gốc. Và những điều ở phía dưới, mà đã không có gì sắp tắt chúng, Tôi nói đây là các nút lá. Vì vậy, 8,9 5, 6, 7, OK. Và thường các thuật ngữ chúng tôi có thể nói là, 1 là mẹ của 3. Vì vậy, đó là điều mà đến một cấp trên, và điểm đến nó. Và 3 là con của 1. Đó là điều mà 1 điểm. Câu hỏi? Đung bạn có thể quay trở lại slide trước, xin vui lòng? SPEAKER 1: Tôi có thể đi lại slide trước đó? Chắc chắn. Các câu hỏi về điều này? Hoặc bạn chỉ muốn nhìn vào nó? Đung Tôi chỉ không thể vượt qua nó. SPEAKER 1: OK, mát mẻ, yeah. Những tất cả sẽ được trực tuyến do đó, không lo lắng về việc mỗi từ. Và vì lợi ích của thời gian, tôi sẽ đi. Ổn chứ? Thật tuyệt vời. OK, mát mẻ. Vì vậy, chúng ta hãy nói về một kind-- rất cụ thể vì vậy chúng tôi có những chung Cơ cấu cây trồng, mà chỉ là bất cứ điều gì cho phép chúng tôi để loại cấp bậc thứ theo thứ bậc. Cây nhị phân là những điều mà mỗi nút có ít nhất hai con. ĐƯỢC? Và tôi đã nói, OK, để có vẻ để phù hợp với mô tả này. Tôi nói nút, không phải một cây tìm kiếm nhị phân. Một cây tìm kiếm nhị phân là gì? Nó được sắp xếp. Vì vậy, bạn biết rằng trong một cây tìm kiếm nhị phân, tất cả mọi thứ cho tất cả mọi thứ tree-- để các nút bên trái nhỏ hơn, và tất cả mọi thứ để các các nút bên phải là lớn hơn. Vì vậy, đây không phải là một cây tìm kiếm nhị phân. Đây chỉ là một cây nhị phân. Vì vậy, chúng ta có thể loại lớn cây, loại nhỏ hơn một chút của cây nhị phân, tìm kiếm theo a-- cây tìm kiếm nhị phân. Mát? Được rồi. Và bây giờ, hầu hết niềm vui của tất cả, chúng ta phải cố gắng của chúng tôi. Các bạn nhìn thấy hình ảnh này trong bài giảng? Yeah, nó sẽ giống siêu quen thuộc. Chúng ta hãy xem làm thế nào chúng ta có thể thực sự thực hiện điều này. Hoặc thực sự, chúng ta hãy xem, Điều đó thậm chí đi lên? Nope. Được rồi, chúng ta thậm chí không phải lo lắng về những thứ ở mức độ thấp. Chúng tôi sẽ có nhiều thời gian để giải quyết sau đó P thiết lập 5. Nhưng hiện nay, mức độ chỉ là rất cao, chúng tôi biết rằng đây là những gì nó trông như thế nào. Chúng tôi mô tả nó như là loại một bảng băm đa cấp where-- cửa hàng này làm gì? Cửa hàng này tên các nhà khoa học mà chúng ta có thể thực sự tìm kiếm bằng cách chỉ cần loại sau bảng băm khác nhau xuống, tất cả phải không? Và mục đích của việc này là, trên lý thuyết, họ cung cấp thời gian liên tục nhìn lên. Vì vậy, nếu tôi muốn kiểm tra, Ví dụ, người someone-- đó Mandel là trong này Trie, tôi có thể rất nhanh chóng trong linear-- Tôi xin lỗi, trong hằng số thời gian, tìm ra có hay không đó là ở Trie. Nhưng một con, được nhìn như thế nào lớn này là. Chúng tôi thậm chí không lưu trữ đó nhiều dữ liệu, và nó là rất lớn. Vì vậy, một con lớn là nó sử dụng một lượng lớn bộ nhớ. Vâng. Đung Tại sao nó cung cấp thời gian liên tục, chính xác? SPEAKER 1: Một lần nữa? Đung trực giác là gì cho lý do tại sao nó cung cấp thời gian không đổi? SPEAKER 1: Excellent câu hỏi. Tại sao nó cung cấp thời gian không đổi? Vì vậy, những gì chúng ta có thể làm được, chúng ta hãy nói chúng tôi đang tìm kiếm Mandel. Chúng tôi biết rằng chúng tôi muốn bắt đầu ở cấp độ đầu tiên tại M. Chúng tôi biết chúng tôi muốn theo nó đến E. Vì vậy, đó là một bước, hai bước, phải không? Chúng tôi theo nó đến N. chúng tôi theo nó đến D. Chúng tôi theo nó đến E. Chúng tôi theo nó đến L. Và rồi điều tiếp theo chúng tôi kiểm tra says-- đồng bằng này nói Vâng, đó là trong bảng. Đó là một từ. Đó là mục hợp lệ trong Trie của chúng tôi. Vì vậy, bạn đang nói, OK, mà đã bảy bước. Nhưng nếu chúng ta được thêm vào như một zillion hơn các nhà khoa học cấu trúc dữ liệu này, chúng ta sẽ không phải kiểm tra vô số những thứ nhiều hơn. Chúng tôi chỉ bao giờ sẽ phải mất bảy bước, chiều dài của các người của tên gọi. Vì vậy, chúng ta thường nghĩ của thời gian chạy như, giả sử chúng tôi tăng kích thước của chúng tôi cấu trúc dữ liệu, bao lâu nữa là nó sẽ mất? Trong trường hợp này, nếu chúng ta thêm một bó nhiều nhà khoa học, nó không quan trọng. Nó vẫn sẽ mất cùng một lượng thời gian. Đó là thời gian liên tục. Vâng. Đung Làm thế nào để bạn biết không để quét qua các con số khác? SPEAKER 1: Làm thế nào để tôi biết làm thế nào đối với: Đung như làm thế nào để bạn biết bạn đi thẳng từ M đến E và không để M đến A? SPEAKER 1: Oh, chắc chắn. Bởi vì tôi biết tôi đã tìm kiếm cho từ Mandel, và tôi chỉ biết đó là M-E. Vì vậy that-- yeah, đi trước. Đung Bạn sẽ không có nhìn vào các chữ cái khác trong phần còn lại của [Không nghe thấy]? SPEAKER 1: Ah, tôi sẽ không có nhìn vào the-- OK, tuyệt vời. Đây là một câu hỏi lớn. Nó phụ thuộc vào cách chúng ta thực hiện nó. Nếu chúng ta thực hiện nó như chỉ giống như một loạt các mảng nơi chúng ta biết rằng E là luôn luôn ở vị trí 0, Tôi không biết, bất cứ điều gì Chỉ số số là lúc. Vâng, chúng ta chỉ có thể làm liên tục thời gian, đừng, đừng, đừng, làm. Mát. Câu hỏi đó không? Đung là hằng số thời gian điều tương tự như thời gian thực? SPEAKER 1: là thời gian liên tục cùng một điều là thời gian thực? Tôi không thực sự chắc chắn thời gian thực là. Đung thời gian Giống như rằng nghĩa đen tiến thứ hai bởi thứ hai, đối lập với một biến độc lập. SPEAKER 1: Oh, yeah, bạn có thể nghĩ về nó theo cách đó. Nói cách khác, nó không phụ thuộc vào kích thước của cấu trúc dữ liệu. Đó là một cách để nghĩ về nó. Bất kỳ câu hỏi khác? Có lẽ trong thời gian đầu tiên trong lịch sử, chúng ta đã hoàn thành đúng thời hạn. Nếu bạn có bất kỳ câu hỏi, cảm thấy tự do đến hỏi chúng tôi, đi đến phần, nói chuyện với TF, văn phòng của bạn giờ là 08:00 và 08:30 đến 11:00 vào thứ hai và thứ ba, vì vậy đó là một chút thời gian khác nhau, do đó hãy chắc chắn rằng bạn lưu ý. Yeah. Đung Chúng ta cần phải biết công cụ như đối số dòng lệnh, ls dấu gạch ngang, dấu gạch ngang bất cứ điều gì? SPEAKER 1: Dùng lệnh đối số, và các lệnh Linux, có, bạn cần phải biết những người. Very-- nó giống như các loại cấp độ thứ chúng tôi đề cập trong phần 0, như xa như các lệnh Linux đi. ĐỐI TƯỢNG: Là những giờ trong Annenberg? SPEAKER 1: Thời gian làm việc, tôi không hoàn toàn chắc chắn họ đang ở đâu. Nhưng bạn có thể kiểm tra trang web, và nó sẽ cho bạn biết.