>> [THEME MUSIC]
>> SPEAKER 1: Hi, tất cả mọi người.
Chào mừng trở lại phần.
Đáng yêu ngày out-- đó là lý do tại sao, tôi chắc chắn, chỉ có bốn của bạn đang ở đây
và không gói thông thường của chúng tôi.
Tôi đã bị ốm vào cuối tuần này.
Vì vậy, tôi không có Starburst cho các bạn.
Và tôi có thể bắt đầu ho khủng khiếp trong suốt này.
Vì vậy, chỉ chịu với tôi.
Tôi sẽ thực sự cố gắng và nhận được thông qua này đầu tiên,
Mặc dù vậy, trước khi tôi có một cuộc tấn công ho.
Nhưng chỉ được dễ dàng trên tôi một ít bit-- đó là tất cả tôi hỏi.
>> Vì vậy, chương trình nghị sự của chúng tôi cho today-- chỉ là một reminder-- bài kiểm tra của bạn là vào tuần tới.
Tôi đã nói với bạn vào tuần cuối cùng này để nó sẽ không bắt bạn mất cảnh giác.
Vì vậy, tôi nhắc nhở bạn một lần nữa.
Tuần tiếp theo của bài kiểm tra của bạn.
Cuối cùng, vào tuần tới phần sẽ được nhiều hơn nữa
of-- tôi sẽ cố gắng và làm việc tại một số xem xét.
Vì vậy, nếu các bạn có thể giúp tôi hiểu bằng cách gửi cho tôi
những điều mà bạn cảm thấy thoải mái với, mà bạn đang lo lắng về,
chủ đề mà bạn muốn cho tôi để trang trải, mà muốn được tuyệt vời.
Vì vậy, tôi có thể cố gắng và làm việc cho họ thành phần của chúng tôi vào tuần tới
hoặc gửi cho bạn các tài liệu bổ sung hoặc chuẩn bị mà bạn có thể không nhận được ở nơi khác.
>> Yeah!
Nhiều người đang đến!
Tôi nghĩ, tôi đã làm điều đó tồi tệ cuối cùng tuần, mà không ai muốn trở lại?
Tôi sợ hãi.
Vì vậy, ba điều khác rằng chúng ta sẽ đi qua
là chuyển hướng, tập tin I / O, và sau đó con trỏ và bộ nhớ động.
Tôi chắc rằng bạn tất cả các siêu vui mừng về pointers-- chủ đề ưa thích của mọi người,
rất đơn giản để hiểu.
Tôi chắc rằng tất cả các bạn có điều đó, phải không?
>> Vì vậy, điều đầu tiên đầu tiên, redirection-- này về cơ bản chỉ là một cách
để kiểm soát cách bạn nhập vào thứ vào chương trình của bạn,
làm thế nào bạn điều đầu ra từ chương trình của bạn.
Những cách chính mà các bạn đã được tương tác với nó
chỉ là thông qua ra tiêu chuẩn với màn hình in ấn của bạn ở đây.
Nhưng có nhiều cách để pipe-- như chúng ta thấy ở đây
là một trong những loại words-- của chúng tôi ống thông tin
hoặc dữ liệu đó vào một tập tin từ một tập tin.
Đó là cách chỉ khác nhau nhận được những điều vào chương trình của bạn
và ra khỏi chương trình của bạn, thay vì chỉ in chúng vào màn hình này
hoặc nhập vào các điều từ dòng lệnh.
>> Vì vậy, đầu tiên là ít lớn hơn caret.
Vì vậy, output-- nó chỉ in ra vào một tập tin thay vì màn hình của bạn.
Vì vậy, nếu bạn đã có một cái gì đó in "Hello, world!" vào màn hình,
nếu bạn đặt nó thay vì để output.text, mà
tạo ra tập tin này được gọi là output.text.
Và khi bạn mở nó, nó sẽ thấy nói "Hello, world!" trong đó.
Đây có thể là siêu hữu ích nếu bạn có một tấn lỗi
trên thực tế, như chúng ta thấy trong vụ việc này.
Nếu bạn làm hai dấu nháy, nó sẽ thấy in các thông báo lỗi.
>> Vì vậy, nếu bạn đang có một vấn đề với biên dịch, nó có rất nhiều sai sót
và bạn đang bị sa lầy trong cố gắng để di chuyển qua trong dòng lệnh của bạn
qua tất cả chúng, bạn có thể chỉ in chúng vào một tập tin,
mở tập tin đó để bạn có thể di chuyển qua chúng dễ dàng hơn.
Tôi thực sự sử dụng một khi rất nhiều tôi đã được gỡ lỗi
181 psets của tôi cho máy tính học tập.
Vì vậy, nó có thể được siêu hữu ích sau này.
Nó cũng hữu ích nếu bạn có một chương trình rằng có thể là tạo ra một thư viện
hoặc tạo ra một số bộ của chuỗi, và bạn
cần để có thể thấy rằng nó tạo ra chúng đúng cách.
Đây là cách để làm điều đó.
>> Vì vậy, nếu bạn in chúng vào một tập tin, bạn có thể dễ dàng kiểm tra chúng, phải không?
So với cố gắng để di chuyển thông qua dòng lệnh của bạn.
Và rồi một điều cần lưu ý là với chỉ lớn hơn
hơn caret, nếu bạn đang viết vào một tập tin đã exists--
do đó, như nếu chúng ta chạy này đầu tiên thời gian, chúng tôi đặt nó vào output.text,
và sau đó chúng tôi đã có một chương trình thứ hai mà in này như là chương trình hai
và đã làm một lớn hơn để output.text, nó sẽ ghi đè lên that-- như vậy
ghi đè lên những gì đã từng ở tập tin đó để bắt đầu với.
>> Vì vậy, nếu bạn muốn thêm vào một tập tin, như chúng ta thấy ở đây,
bạn chỉ cần làm hai dấu hiệu lớn hơn.
Và nó sẽ gắn thêm vào nó.
Nó sẽ không ghi đè lên nó.
Vì vậy, nếu bạn cần phải chạy nhiều chương trình và loại giữ
theo dõi những gì tất cả chúng đều hoàn lại cho bạn trong một tập tin,
đó là một cách để làm điều đó.
Nếu bạn không quan tâm những gì trong tập tin của bạn và nó được phép ghi đè,
bạn chỉ có thể sử dụng một lớn hơn đơn hơn.
Điều đó có ý nghĩa với tất cả mọi người?
>> Đung như chấm giảm chào lớn hơn hơn sản lượng chấm văn bản, như hai lần,
nó sẽ chỉ chỉ hiển thị trên đầu ra dot văn bản một time-- thứ hai
>> SPEAKER 1: Đúng vậy.
Vì vậy, về cơ bản nó sẽ chỉ hoàn toàn ghi đè lên những gì đã có để bắt đầu với.
Nếu tập tin này ở đây, output.text đã
tồn tại, về cơ bản bất cứ điều gì bạn gọi một lần nữa với một lớn duy nhất
hơn bạn có thể chỉ cần nghĩ về nó như như nó thay thế các tập tin.
Giống như khi bạn đang tiết kiệm một Word tài liệu và bạn tiết kiệm như,
và bạn tiếp tục cùng tên, và nó hoàn toàn ghi đè it--
đây là cùng một loại điều.
Bất cứ ai có bất kỳ câu hỏi về chỉ xuất vào một tập tin?
Tuyệt vời.
>> Vì vậy, rõ ràng là, nếu bạn đảo ngược mũi tên hướng, nó có thể làm đầu vào.
Vì vậy, khi các bạn đã có như Caesar hoặc VISIONEER
và bạn phải đầu vào một cái gì đó, bạn đã có một đối số dòng lệnh
mà thực sự đầu vào nó.
Đây là một cách khác để làm điều đó.
Vì vậy, thay vì chờ đợi cho một dấu nhắc lệnh,
giống như khi bạn yêu cầu của bạn tin nhắn trong Caesar hoặc VISIONEER,
nếu bạn đã có một tập tin văn bản mà đã có tin nhắn của bạn,
bạn chỉ có thể gõ nó vào đó.
>> Vì vậy, nếu điều này là như chấm giảm Caesar 3 ít hơn mũi tên văn bản đầu vào, mà
là thông điệp của bạn, mà sẽ chỉ chạy tốt.
Khi chương trình Caesar của bạn thực sự yêu cầu đầu vào từ người dùng,
nó sẽ đã có nó bởi vì bạn đã nhập vào tập tin này.
Đó chỉ là một cách khác.
Chỉ cần một đảo ngược của output-- chỉ đầu vào cho dữ liệu của bạn.
>> Và rồi cuối cùng là một ống.
Vì vậy, cái này khá mát mẻ.
Bởi vì nó cho phép bạn có đầu ra của một
chương trình và đặt nó như là đầu vào cho chương trình khác.
Tôi không biết nếu có của bạn chơi với Decipher
CS50 có thể có đưa cho bạn, nhưng nó sẽ
cho phép bạn để có một số mẫu nộp, đánh nó vào mật mã của bạn,
và sau đó từ đó gõ đó vào giải mã của bạn
để đảm bảo nó bật ra như vậy.
Vì vậy, nó là loại giống như ba chiều vòng lặp.
Đi cho nó.
>> Đung Nếu một chương trình có nhiều đầu vào,
là có một cách để cho nó mà đầu vào sử dụng các tập tin văn bản hoặc đầu ra cho?
>> SPEAKER 1: Nó có nhiều đầu vào.
Dù nộp input-- của bạn khi nó yêu cầu đầu vào mà lần đầu tiên, đó là
sẽ giả sử, tôi nghĩ rằng, đó là đi đường ống trong toàn bộ tập tin.
Vì vậy, nếu bạn có nhiều đầu vào, bạn sẽ được đường ống trong nhiều tập tin.
Vì vậy, nếu bạn đang yêu cầu cho các tin nhắn ba lần trong mã của bạn,
bạn sẽ được đặt trong ba tập tin khác nhau.
Và nó trở nên điên.
Và bạn không cần phải lo lắng về điều đó ngay bây giờ.
Nhưng đó là ý tưởng.
>> Vì vậy, yeah, ống chỉ là đầu ra của một chương trình sử dụng đầu vào khác.
Tất cả mọi người tốt không?
Cool.
OK.
Bạn có thể sẽ không có làm quá nhiều với nó.
Nhưng bạn nên hiểu cách bạn có thể sử dụng này.
Và có một số trường hợp bạn có thể muốn sử dụng nó.
>> Vì vậy, tập tin I / O-- tôi biết những gì bạn đang saying-- chúng tôi đang sử dụng để đọc từ
và văn bản cho màn hình của chúng tôi ở đó, đó là tiêu chuẩn và tiêu chuẩn ra.
Và đó là những gì các bạn đã làm kể từ đầu lớp ở đây.
Nhưng bạn cũng có thể đọc và viết các tập tin, đó là tất cả các tập tin I / O-- để nộp đầu vào,
đầu ra là tất cả đứng của nó.
Vì vậy, về cơ bản này có nghĩa là bạn có thể lưu trữ dữ liệu của bạn bây giờ.
>> Khi bạn chỉ cần in đến màn hình, nó về cơ bản đi, phải không?
Ngay sau khi bạn thực hiện "Hello thế giới "và chạy" Hello world "
nó in "Hello world" lên màn hình.
Nhưng bạn có thể không thực sự làm bất cứ điều gì với nó từ đó.
Nếu bạn lưu trữ trong một văn bản tập tin, sau đó đột nhiên
bạn có dữ liệu này mà bạn đang được cho phép để thao tác hoặc đặt nó vào một tập tin,
hoặc đặt nó vào một chương trình sau đó.
Một trong những lý do lý do tại sao chúng tôi làm điều này chỉ là
như một cách để lưu trữ dữ liệu để sử dụng sau.
>> Tôi có một vài bước sau đây chỉ đi qua tiêu chuẩn
I / O. Trong bước một, bạn cần phải tạo ra một tài liệu tham khảo
để các tập tin với tất cả mũ NỘP tập tin sao.
Vì vậy, tạo ra một con trỏ đến một tập tin.
Vì vậy, sau đó bạn muốn để mở nó.
Và bạn nói, theo nghĩa đen, chỉ tập tin bằng fopen.
Và điều này sẽ trả về một con trỏ đến tập tin bạn vừa mở.
Tôi thấy một vài bạn guys tại giờ hành chính.
>> Nhưng một trong những điều là con trỏ remember--
có thể có một số địa chỉ hoặc null, phải không?
Nếu chúng ta từng có một trường hợp một cái gì đó có thể trở về null,
chúng ta có gì để làm trước khi chúng ta sử dụng nó?
Chúng tôi cần phải kiểm tra xem nó là null hay không, phải không?
Bởi vì một số bạn có thể đã có vấn đề mà bất cứ đối tượng
đã được trả lại trong breakout là null.
Bạn đã cố gắng để thực hiện một số chức năng trên đó.
Và trang web máy tính của bạn bị sự cố.
Phải không?
Tôi đặt cược một vài bạn có thể đã có vấn đề đó.
>> Vì vậy, với fopen, fopen hoặc sẽ trả về một con trỏ đến các tập tin,
hoặc nếu có điều gì sai, nó sẽ trả về null.
Vì vậy, bạn luôn cần phải kiểm tra rằng nó đã không trở về rỗng
trước khi bạn cố gắng làm bất cứ điều gì khác.
Điều này giống như một hệ thống chuẩn rằng bạn sẽ cần ở đây.
Nếu có bao giờ một cơ hội mà một cái gì đó có thể trở về null,
kiểm tra để chắc chắn rằng nó không trước khi bạn tiến hành.
Nếu không, bạn sẽ để có được lỗi trang web đáng yêu.
Và không ai thích để đối phó với những người.
>> Vì vậy, như chúng ta thấy ở đây, đối số đầu tiên chỉ là đường dẫn đến tập tin.
Nếu tập tin không tồn tại, nó sẽ tạo ra tập tin đó.
Và nó không chỉ sẽ được để trống.
Và sau đó tham số thứ hai là chế độ mà bạn muốn.
Chúng ta có muốn đọc từ tập tin này?
Bạn có muốn viết từ nó?
Bạn có muốn thêm?
Vì vậy, thực tế những gì tôi chỉ said-- nếu các tập tin không tồn tại
và bạn đang cố gắng để đọc từ nó, nó sẽ ném ra một lỗi.
Nếu tập tin name-- thích nếu file.text chưa tồn tại
và bạn muốn viết với nó, nó sẽ tạo ra
một tập tin trống gọi là file.text cho bạn.
Và nếu bạn muốn thêm, bạn nên làm điều tương tự.
Điều đó có ý nghĩa?
Nếu bạn đang cố gắng để đọc từ một tập tin đó chưa tồn tại,
nó sẽ ném ra một lỗi.
Nếu không, nó sẽ tạo ra các tập tin cho bạn làm những gì bạn muốn nó.
Cool.
Bây giờ chúng ta có thể đọc từ tập tin.
Và đây chỉ là loại đi thông qua các chức năng khác nhau
rằng chúng tôi đã cho tập tin I / O. Điều này sẽ là cần thiết trong pset tuần này,
nếu tôi nhớ chính xác.
Có, nó hoàn toàn sẽ cần thiết trong pset tuần này.
Vì vậy, fgetc trả về ký tự tiếp theo.
fgets chỉ trả về một dòng văn bản.
Nó sẽ trở lại bất cứ điều gì lên đến một dòng mới, và nó sẽ phá vỡ.
Vì vậy, fread đọc một số số byte và những nơi họ
vào một mảng, mà là một cái gì đó bạn có thể
muốn làm gì với lại size-- có thể có ích.
>> Có bao nhiêu người đã đọc spec pset, bằng cách này?
OK.
[Không nghe được]
>> SPEAKER 1: OK.
Được rồi.
Chắc chắn đọc that-- đó là một pset vui vẻ.
Bạn có thể phục hồi bộ nhớ bị xóa card-- thực sự thú vị khi nó hoạt động.
Nhưng chắc chắn, bắt đầu đọc đó.
Hãy đến nói chuyện với tôi nếu bạn có câu hỏi về nó.
>> OK, vì vậy như tôi đã nói, fread đọc một số lượng nhất định của byte.
Đó là một số số tùy ý rằng bạn đang đi để thiết lập.
Và sau đó fseek chỉ di chuyển đến một vị trí nhất định.
Vì vậy, có thể bạn không quan tâm khoảng 10 byte tiếp theo.
Bạn chỉ muốn bỏ qua.
Bạn không quan tâm đến những người.
Bạn muốn đọc bắt đầu từ byte 11.
fseek cho phép bạn làm điều đó.
Vì vậy, nó cho phép bạn được chọn lọc về những gì bạn đang đọc.
Bởi vì fgetc, fgets, và fread đọc từ một nơi nào đó trong tập tin.
>> Một cách để nghĩ về điều này là nếu điều này là tập tin của chúng tôi, khi bạn lần đầu tiên mở nó,
bạn có vị trí này trong tập tin bắt đầu ngay từ đầu.
Bất cứ khi nào bạn gọi fgetc, fgetf, hoặc fread,
nó sẽ bắt đầu từ đánh dấu vị trí này.
Hãy nói rằng bạn chỉ muốn đọc đoạn này bộ nhớ ở đây.
Bạn không thể chỉ cần gọi.
Bạn phải tìm kiếm ở đây và sau đó đọc từ đó
hoặc đọc, được, hoặc getc, tùy thuộc vào những gì bạn muốn.
Vì vậy, tìm kiếm chỉ cho phép bạn bỏ qua các phần của bộ nhớ.
Và đó là chỉ cách bạn có thể bỏ qua điều
mà không đọc vào bộ đệm của bạn.
Điều đó có ý nghĩa với tất cả mọi người?
>> Rõ ràng, có một rất nhiều here-- song song
chuyển hướng đầu ra, hoặc đầu vào của chúng tôi, bạn đã đọc và viết.
Vì vậy, fputc chỉ viết một nhân vật vào tập tin.
fputs viết một dòng.
Fprintf in một đầu ra định dạng.
Vì vậy, nếu bạn có các tab, hoặc không gian, hoặc không có điều gì.
Và sau đó viết một số fwrite mảng byte vào một tập tin.
Vì vậy, đây là cách cùng fwrite và fread là tương tự
fgets opposites--, fputs, và sau đó rất nhiều fputc và fgetc--
điên, mọi thứ nhanh chóng.
>> Chỉ cần loại giữ handy-- này bạn sẽ có thời gian khác nhau
nơi mà có lẽ bạn chỉ muốn một ký tự tại một thời điểm.
Có lẽ bạn muốn một dòng toàn bộ.
Với pset-- từ điển của bạn mà là ở hai psets,
Tôi tin rằng, chúng tôi cung cấp cho bạn một tổng thể từ điển trong một định dạng văn bản
trong đó có tất cả các từ ngăn cách bởi một đường thẳng.
Vì vậy, nếu bạn muốn đọc trong một từ tại một thời điểm,
những gì bạn có thể sử dụng nếu bạn đang đọc và tất cả họ đang cách nhau trên một dòng mới
và bạn chỉ muốn một từ vào một thời điểm?
>> Đung fgets
>> SPEAKER 1: Đúng vậy.
Fgets-- vì trả về bất cứ điều gì là trên một dòng.
Và nếu mỗi chữ là của nó dòng riêng, chúng ta có thể sử dụng fgets.
Cool.
Điều đó có ý nghĩa, tất cả mọi người?
Mát mẻ?
Yeah, chúng ta sẽ có được phần thú vị với con trỏ
rất sớm, nơi bạn nhận được để làm một số toán học.
Và nó sẽ là tuyệt vời.
>> Cuối step-- đóng tập tin của bạn.
Với rất nhiều điều ở đây, một trong những mô hình của chúng tôi
là nếu nó có thể trở lại null, kiểm tra null.
Nếu bạn mở một cái gì đó, bạn nên đóng nó.
OK, vì vậy bạn không được thực hiện cho đến khi bạn thực hiện trừ khi bạn đã đóng cửa.
Giống như nó không phải trên cho đến khi người phụ nữ béo hát.
Nó giống như việc đóng tập tin của bạn.
Như nó nói ở đây, chỉ cần để nhắc lại, luôn luôn
mở tập tin của bạn trước khi bạn đọc hoặc ghi nó.
Và luôn luôn đóng nó nếu bạn đã mở nó ra.
Tất cả phải không?
Cool.
>> Vì vậy, đây là một ví dụ.
Vì vậy, tiny-- Tôi không biết nếu bạn guys có thể thấy rằng rất tốt.
Nếu chúng ta chỉ có thể tăng độ sáng bằng cách nào đó.
Hãy để tôi thực sự làm điều này nếu tôi có thể.
OK, các bạn có thể không thực sự thấy rằng ở tất cả, có thể bạn?
OK, chúng ta sẽ làm điều này, sau đó.
[Không nghe được]
>> Tôi giả định này là tốt hơn nhiều để xem.
Bất cứ ai có thể nhìn thấy nơi mà tôi chuột đi là câu hỏi?
Ah, có nó is-- những gì cuộc đấu tranh!
>> OK.
Về cơ bản, các bạn cần phải có loại của một ý tưởng về những gì đang thực hiện.
Nó không phải hoàn hảo.
Nhưng tôi không muốn giải thích nó hơn là chi tiêu nhiều thời gian cố gắng để định dạng nó đúng cách.
Về cơ bản, như bạn thấy ở đây, chúng ta bắt đầu với tập tin mở.
Và chúng tôi có một số tập tin cơ sở dữ liệu mà chúng ta
mở nói rằng đó là sinh viên của chúng tôi.
Và chúng ta sẽ viết thư cho nó.
Vì vậy, tất nhiên, trả về null.
Vì vậy, chúng tôi phải kiểm tra cho null.
Và sau đó nếu nó không null, chúng tôi đi qua.
Và như bạn thấy, chúng tôi vòng lặp thông qua đây.
Có sinh viên.
Học sinh là băm xác định là ba.
Và những gì chúng tôi đang làm là chúng tôi in vào tập tin, phải không?
Vì vậy, những gì chúng ta in ra để tập tin của chúng tôi?
>> Đung Điểm đó là trong mảng?
>> SPEAKER 1: Yeah.
Các điểm có trong các array-- chính xác.
Vì vậy, chúng tôi đang mở này tập tin cơ sở dữ liệu, mà
Tôi giả sử là một số loại cơ sở dữ liệu của lớp.
Và chúng ta chỉ cần in ra điểm của mỗi học sinh đến tập tin đó.
Mát mẻ?
Tốt.
Tuyệt vời.
OK.
Hãy quay trở lại đối với:
>> ĐỐI TƯỢNG: Tôi có một câu hỏi nhanh chóng.
Là printf không trong vòng lặp for?
Đó chỉ là trong khi vòng lặp?
SPEAKER 1: Không, đó là trong vòng lặp for.
Tôi không thể nhìn thấy con chuột của tôi rất tốt ở đây.
Vì vậy, tôi đang đấu tranh để định dạng đúng.
Khung này nên được đi.
Nó sẽ được xuống đây.
Đây là những gì trong của bạn cho vòng lặp.
Có.
Bây giờ nó đẹp.
Vì vậy, đó là cách nó nên be-- trừ cho rằng khung cuối cùng mà tôi bị sa thải.
OK.
Điều đó có ý nghĩa với tất cả mọi người?
OK.
Chúng tôi sẽ di chuyển trên để điều tiếp theo then--
trong đó, trên thực tế, bạn sẽ cần phải xem mã.
Vì vậy, tôi chỉ cần đi để sao chép rằng hơn ngay bây giờ.
OK.
Vì vậy, tôi sẽ cho các bạn thấy mã này.
Và tôi muốn bạn để thử và con số ra những gì nó phải làm.
>> Vì vậy, cho that-- mất một phút hoặc lâu hơn.
Hãy thử và tìm ra những gì đang xảy ra ở đây.
>> Bất cứ ý tưởng?
>> Chúng tôi biết rằng chúng tôi có ít nhất hai đối số trong dòng lệnh, phải không?
Tôi giả sử một trong số đó là có được rằng [không nghe được] của chương trình của chúng tôi là
và sau đó một cái gì đó khác.
Bởi vì nếu [không nghe được] là ít hơn hai, chúng tôi hét lên với họ.
Phải không?
Và từ việc sử dụng, nó trông giống như nó sẽ có một số loại tập tin.
Chúng ta đều đồng ý với điều đó?
Vì vậy, bây giờ, vòng lặp làm là gì?
Nó là những gì đi qua?
>> ĐỐI TƯỢNG: Tất cả các tập tin.
SPEAKER 1: Chính xác.
Nó đi qua tất cả các các tập tin mà chúng tôi đã có đầu vào.
Vì vậy, cho mỗi tập tin, nó mở ra một số chuỗi đó.
Nó mở tập tin đó.
Phải không?
Và nó đọc từ nó.
Tất nhiên, kiểm tra nếu nó là null.
Và sau đó nó in.
Nếu đó là null, nó chỉ cho chúng tôi rằng đó không phải là một tập tin tồn tại.
Bởi vì nhớ, với đọc tập tin của chúng tôi có tồn tại.
Phải không?
Với viết và append, bạn có thể nhận được ngay với nó.
Nhưng với đọc, tập tin của chúng tôi có tồn tại.
>> Và sau đó nếu nó không tồn tại, được những gì chúng ta làm gì ở đây?
Hãy bắt đầu ngay ở đây.
Gì đây do-- ký tự đầu tiên này.
Nó làm gì?
Ông được một nhân vật, phải không?
Vì vậy, những gì là điều này đang làm gì?
Nó nhận được ký tự đầu tiên.
Bất cứ ai cũng biết kết thúc tập tin?
>> Đung End của tập tin?
>> SPEAKER 1: Kết thúc file-- chính xác.
Vì vậy, nó sẽ đi qua toàn bộ tập tin, phải không?
Và sau đó nó sẽ cập nhật thông tin nhận được tất cả các nhân vật tiếp theo.
Phải không?
Và những gì nó đang làm gì?
Đung Đưa rằng in--
>> SPEAKER 1: putchar in để bảo vệ màn hình của bạn.
[Không nghe được] nhân vật.
Và sau đó khi nó [không nghe được] điều này sẽ đóng file.
>> ĐỐI TƯỢNG: Bạn không cần một [? khác? ?]
>> SPEAKER 1: Không nhất thiết.
Ý tôi là, nó loại ngụ ý trong này.
Bởi vì điều này trở lại, mặc dù, như dài như điều này không bắt được điều này, bạn đang sử dụng tốt.
Tôi có nghĩa là nó có thể là tốt thực hành để làm một khác.
Nhưng một người khác không phải là luôn luôn đặc biệt cần thiết
nếu bạn có một cái gì đó giống như một sự trở lại, mà
có nghĩa là trong trường hợp này nếu nó bắt nó, chương trình của bạn sẽ kết thúc
và nó sẽ không bao giờ có được điều này.
Nó nhiều hơn cho các trường hợp bạn không nhất thiết phải trở về một cái gì đó.
Bởi vì nếu điều này là không trở về bất cứ điều gì,
nó sẽ có nghĩa là nếu điều này là sự thật, phần còn lại của điều này vẫn sẽ chạy.
Và trong trường hợp đó, bạn sẽ muốn có một sai lầm.
Nếu nó trở về, và kết thúc chương trình của bạn,
một khác là không cần thiết tất cả thời gian, tùy thuộc vào bối cảnh.
Jacob, bạn đã có một câu hỏi?
Đung Yeah.
Vì vậy, không fgetc được những nhân vật tiếp theo?
Làm thế nào để nhân vật tăng?
SPEAKER 1: Yeah.
Vì vậy, fgetc được các ký tự tiếp theo.
Bạn có thể nghĩ về nó như C ++ trong một cảm giác.
>> Đung Vì vậy, những gì đã được kết thúc tập tin?
>> SPEAKER 1: EOF là kết thúc của tập tin.
Nó chỉ là một dấu hiệu cho phép bạn biết mà bạn đang ở cuối của tập tin của bạn.
Vì vậy, điều này sẽ in tiêu chuẩn của bạn ra.
Và sau đó nó sẽ đóng cửa các tập tin khi nó được thực hiện.
Và sau đó chúng ta hãy đi đến các tập tiếp theo, phải không?
Vì vậy, tổng thể, những gì hiện chương trình này làm gì?
>> [Không nghe được]
>> SPEAKER 1: Yeah.
Nó chỉ in ra tất cả mọi thứ ở đó.
Vì vậy, nếu các bạn đã từng sử dụng CAT và sau đó là tên của một số file--
Tôi không biết nếu có của bạn có bao giờ làm điều đó trên thiết bị đầu cuối của bạn.
Nhưng nếu bạn đã bao giờ sử dụng lệnh CAT-- C-A-T--
và sau đó bất kỳ tập tin bạn có there-- nó
in nó ra để thiết bị đầu cuối của bạn, có thể được siêu tiện dụng cho một số điều.
Tôi sử dụng nó rất nhiều.
Điều đó có ý nghĩa với tất cả mọi người?
Mát mẻ?
>> OK vì vậy công việc của bạn now-- hoặc bằng một mình hoặc với những người xung quanh you--
là chỉ cần viết một chương trình đơn giản mà sẽ chỉ viết "Hello, world!"
ra một tập tin.
>> [Không nghe được]
>> SPEAKER 1: Tôi là như thế nào, đã làm Tôi làm điều đó tuần tồi tệ nhất?
Tôi không nghĩ rằng đó là xấu.
Tôi rất vui vì bạn tất cả ở đây.
Nó thực sự làm cho tôi hạnh phúc.
Tôi là một cô gái thú vui đơn giản.
Tôi chỉ muốn khi phần của tôi theo học.
Vì vậy, tôi chỉ nhận được này bắt đầu cho các bạn để chúng ta có thể mã với nhau.
Tôi không muốn đặt bất cứ ai trên tại chỗ, trừ khi bạn muốn trở thành.
>> ĐỐI TƯỢNG: Đối với các bài kiểm tra, làm chúng ta phải viết một chương trình?
>> SPEAKER 1: Bạn có thể được yêu cầu viết chương trình đơn giản bằng tay.
Yup.
>> ĐỐI TƯỢNG: Các bài kiểm tra là vào tuần tới, phải không?
>> SPEAKER 1: Các bài kiểm tra là thứ tư tới.
Điều đó có nghĩa là một [đáng yêu? CSE?] bên chấm điểm sau đó, mà
có nghĩa là bạn sẽ nhận được điểm số của bạn lại rằng night-- vào thời gian nào?
Ai biết được?
Nhưng nó sẽ là đêm đó.
>> Được rồi.
Làm thế nào để chúng tôi muốn bắt đầu này?
Tôi sẽ cung cấp cho bạn một bắt đầu hint-- với điều này.
>> Đung Bạn phải mở một tập tin.
>> SPEAKER 1: Yeah.
Vì vậy, những gì bạn muốn gọi này?
Bạn chỉ muốn gọi nó là "file"?
Chúng ta hãy làm cho nó dễ dàng.
Vì vậy, những gì chúng tôi fopen-- kiểm tra đầu ra sẽ là?
Gọi nó là "Xin chào."
Và chế độ của chúng ta là gì?
Chúng tôi đang làm gì đến tập tin này?
>> Đung đọc.
Viết.
SPEAKER 1: Chúng tôi đang viết cho nó.
Đáng yêu.
OK, vì vậy chúng tôi có tập tin này ngay bây giờ.
Những gì chúng tôi cần phải làm gì?
Đung Kiểm tra nếu nó là null.
SPEAKER 1: Kiểm tra nếu nó null-- chính xác.
Đó là những gì tôi muốn nghe.
Điều đó sẽ được tự động, đặc biệt là khá nhiều từ thời điểm này.
Nếu bạn bắt đầu segfaulting, bạn có thể không kiểm tra cho null ở đâu đó.
Chín trong số mười lần, đó là sẽ là lỗi của bạn.
Vì vậy, nếu bạn chỉ có thể nhận được trong thói quen, luôn luôn kiểm tra xem nó là null,
cuộc sống của bạn sẽ là tốt đẹp và easy-- hoặc dễ dàng hơn.
>> Vì vậy, hãy kiểm tra để xem nếu nó là null.
Vì vậy, nếu nó không phải là null, là những gì các bang bằng
means-- không null-- đó là hợp lệ.
Những gì chúng tôi muốn làm gì?
Chúng tôi chỉ muốn in đến tập tin đó, phải không?
Vì vậy, những gì chúng ta sẽ sử dụng không?
>> Đung fprintf
>> SPEAKER 1: Fprintf-- đáng yêu.
Và fprintf mất hai arguments-- nơi nó đi và những gì chúng tôi muốn in.
Vì vậy, một trong những đầu tiên là gì?
Là nó sẽ đi đâu?
>> Đung File.
>> SPEAKER 1: Nó sẽ nộp.
Và những gì chúng ta muốn in?
"Hello, world!"
Được rồi.
Chúng tôi có một thing-- cuối cùng một mô hình lớn ở đây.
Đung Close.
SPEAKER 1: Close.
Có bạn đi.
>> Đung là điều này xảy ra nếu tập tin là null?
SPEAKER 1: Không, đây là nếu nó không phải là null.
ĐỐI TƯỢNG: Oh, nếu nó not-- OK.
Đối với fopen và sau đó hai đối số đó đi vào bên trong,
những gì đối số đầu tiên có nghĩa là một lần nữa?
>> SPEAKER 1: Các đối số là giống như tên của tập tin
mà bạn muốn đến.
Vì vậy, sau này chạy, bạn sẽ có một số tập tin gọi là "hello"
mà đã có "Hello, world" bên trong nó.
Đó là tất cả.
Chỉ cần tên.
>> Đung Và kể từ khi nó viết, các tập tin không phải đã tồn tại.
Có phải đó là những gì bạn nói?
>> SPEAKER 1: Đúng vậy.
Chính xác.
Nếu "Hello" như một tập tin chưa tồn tại, đó là
sẽ tạo ra một tập tin gọi Hello "và viết thư cho nó cho bạn.
>> ĐỐI TƯỢNG: Khi bạn đang nói chương trình viết cho các tập tin,
tại sao bạn viết "file" thay vì tên của tập tin và fprintf--
>> SPEAKER 1: Bởi vì trong trường hợp này, chúng tôi có rằng FILE-- lớn trong tất cả các ngôi sao caps--,
nộp.
Vì vậy, nó là một con trỏ đến tập tin rằng bạn đang nói về.
Đây là cách mà chúng tôi chỉ đề cập đến nó.
Vì vậy, trong trường hợp này, bạn có thể nghĩ aha file--,
chúng ta có thể sử dụng this-- tập tin ở đây đề cập đến việc mở "Hello"
và để cho nó viết.
>> Đung chúng ta có thể đặt một "Hello" thay vì [? chỉ?] f tập tin?
SPEAKER 1: Không, bởi vì "Hello" cần phải được mở và ghi.
Nộp ở đây giống như một vấn thiết kế nói rằng OK, chúng tôi
có hello-- file-- này mà chúng ta đang tìm kiếm.
Nó đã được mở ra.
Và chúng ta sẽ viết thư cho nó.
Nếu bạn chỉ cần sử dụng "Hello", được đóng gói trong nó.
Vì vậy, nó sẽ freak ra.
Tôi có nghĩa là, bạn có thể đặt tên cho nó.
Bạn có thể làm tập tin, sao, "Hello", bằng đó.
Tuy nhiên, toàn bộ các điểm là bạn cần một ngôi sao tập tin con trỏ để
để có thể sử dụng các chức năng này.
Đung Bạn có thể làm tập tin, sao, tập tin, "Hello"
hoặc làm bạn phải đặt tập tin sao, tập tin của nó?
SPEAKER 1: Bạn có thể làm tập tin, sao, "Xin chào."
Bạn có thể thay đổi điều này để bất cứ tên nào bạn muốn.
Đó là hoàn toàn tùy ý tên gì đó là.
Bạn có thể đặt tên cho nó bất cứ điều gì.
Đặt tên cho nó bay spaghetti, nếu bạn muốn.
>> Đung là gì "w" trong dấu ngoặc kép cho?
>> SPEAKER 1: "w" là chỉ chế độ.
Vì vậy, chúng tôi đang viết đến tập tin này.
Tất cả mọi người tốt?
Rõ ràng?
Vâng.
>> Đung Vì vậy, khi nó viết này tập tin, nơi nào chúng ta sau đó tìm tập tin đó?
>> SPEAKER 1: Nó sẽ được trong cùng một thư mục mà bạn đang ở.
Nếu bạn đang ở trong pset ba và bạn chạy này, trong pset của bạn
ba thư mục là có được tập tin này được gọi là "Xin chào."
Mát mẻ?
Tất cả mọi người tốt?
Tôi cảm thấy như bạn đang tất cả nhận được nó, đó là rất tốt.
OK.
Vì vậy, trở lại show-- trượt của tôi Tôi yêu khi mọi thứ làm việc.
OK, pointers-- Các bạn vui mừng?
Con trỏ là rất lớn.
Họ mất một chút để quấn quanh đầu của bạn.
Đây là năm thứ hai của tôi dạy con trỏ.
Và tôi nghĩ rằng cuối cùng tôi đã nhận nó.
Vì vậy, nếu bạn gặp khó khăn, đó là OK.
Như tôi đã nói trước, vẽ tranh sẽ giúp rất nhiều với những thứ trong CS,
nhiều như tôi nghĩ rằng mọi người có xu hướng suy nghĩ oh, chúng tôi đang ở một máy tính.
Chúng tôi chỉ nên mã.
Hình ảnh vẽ No-- thực sự sẽ giúp bạn.
Và tôi thực sự khuyến khích bạn gõ vào mặt học sinh mẫu giáo của bạn
và đưa ra bút chì màu hoặc đánh dấu và rút ra.
Bởi vì nó sẽ giúp bạn.
Và nếu bạn nhìn thấy tôi ở giờ làm việc, tôi sẽ được thực hiện xung quanh những đống giấy
với bút vẽ những điều trên.
>> Vì vậy, đặc biệt là với pointers-- vẽ hình ảnh.
Và tôi chắc chắn rằng chúng tôi đang thực sự đi vào được vẽ một số hình ảnh ở đây quá.
>> Vì vậy, các bạn tất cả đã nhìn thấy Binky, điều claymation mát mẻ này.
Và chúng tôi nghĩ rằng nó thực sự buồn cười khi ông phát nổ vào một loạt các miếng.
Đó là một số cứu trợ truyện tranh cho các lớp học.
C [không nghe được] khả năng tuyệt vời này để có thể kiểm soát bộ nhớ.
Và đó là một trong những điều mà thực sự làm cho nó một ngôn ngữ mạnh mẽ như vậy.
Nhưng với sức mạnh lớn đến trách nhiệm lớn.
Và những điều điên rồ có thể xảy ra nếu bạn không cẩn thận.
Vì vậy, khi bạn đang sử dụng con trỏ, bạn muốn chắc
chắc chắn rằng bạn thực sự hiểu chính xác những gì bạn đang làm.
Hy vọng rằng chút tiếp theo thời gian sẽ giúp bạn thực sự hiểu
con trỏ, làm thế nào để sử dụng chúng, và làm thế nào để vận dụng chúng.
>> Vì vậy, memory-- tôi chắc chắn rằng chúng tôi đã nhìn thấy sơ đồ này trước đây.
Vì vậy, đây chỉ là một sơ đồ đơn giản của thế nào những điều có thể được lưu trữ bộ nhớ.
Vì vậy, về cơ bản bạn có những mảng lớn của khối một byte
là những gì chúng tôi có here-- nhẹ gia tăng bởi một mỗi lần.
Đây là trong hex [không nghe được] vì vậy khối tám-bit.
Và mỗi khối có liên quan với một số địa chỉ hệ thập lục phân.
Vì vậy, nếu bạn đã bao giờ thấy 0x, đó chỉ là notating
rằng đó là một địa chỉ hệ thập lục phân.
Bạn có thể giả định này có nghĩa là một số địa chỉ trong bộ nhớ.
Chúng ta đang nói về các địa chỉ bộ nhớ bất cứ khi nào bạn nhìn thấy hệ thập lục phân.
>> Chúng tôi có ints là các biến, phao nổi là các biến lưu trữ.
Vì vậy, ints cửa hàng ints.
Floats cửa hàng nổi.
Vì vậy, chúng tôi cũng có con trỏ mà địa chỉ bộ nhớ lưu trữ.
Đó là một loại bản đồ.
Con trỏ là độc quyền cho các địa chỉ bộ nhớ.
Vì vậy, đó là giống như kiểu của bạn ở đó.
Thiết bị của bạn là 32-bit, có nghĩa là địa chỉ bộ nhớ của bạn là bốn byte.
Vì vậy, bất kỳ con trỏ mà bạn có cũng là có được bốn byte.
Hoặc người nào khác nếu nó là bốn byte, bộ nhớ là bốn byte.
Con trỏ bộ nhớ lưu trữ.
Vì vậy, chúng bốn byte.
Cool-- chỉ muốn củng cố thêm rằng.
>> Bạn sẽ nhận được truyện tranh này ngay bây giờ.
Tôi không biết có bao nhiêu bạn là người hâm mộ xkcd, nhưng tôi yêu xkcd.
Thật tuyệt vời.
>> Được rồi.
Vì vậy, việc tạo ra pointers-- như tôi đã nói, đó là khá nhiều giống như bất cứ điều gì khác.
Bạn có một loại.
Bạn có một tên.
Phải không?
Đó là những gì chúng tôi có ở đó. [? Hex?] Sao có nghĩa là nó là một con trỏ,
và sau đó bất cứ điều gì bạn muốn gọi nó.
Vì vậy, các loại đại diện những gì bạn có thể lưu trữ.
Tất cả phải không?
Trong cùng một cách mà nếu chúng ta làm ints, chúng tôi biết chúng tôi đang lưu trữ một int đó.
Với một con trỏ, nó giữ một địa chỉ bộ nhớ.
Nhưng những gì nó có nghĩa là that-- đây là nơi một bản vẽ sẽ có ích.
Vì vậy, trong trường hợp này, chúng tôi có một số value-- hãy nói bốn.
Bốn là tại một địa chỉ.
OK?
>> Đầu tiên này ở đây có nghĩa rằng đó là một con trỏ 2x.
Phải không?
Đó là một số con trỏ x.
x có thể là một cái gì đó, bất cứ điều gì.
Dù x is-- nói x là bốn.
Nó sẽ lưu trữ địa chỉ bộ nhớ ở đây.
Vì vậy, int, ngôi sao, x-- này là một số khe khác trong memory--
ai biết đây là những gì.
Nhưng nó sẽ lưu giữ một địa chỉ ở đây.
Vì vậy, đây sẽ là like-- trong trường hợp này, Dù,
được lưu trữ tại 0x1-- bất cứ điều gì được lưu trữ tại địa chỉ mà con trỏ của chúng tôi giữ,
có để phù hợp với những gì chúng tôi đã được chỉ định.
Vì vậy, tại 0x1, trong trường hợp này, đây là x.
Điều này chỉ có thể từng là một int trong khi chúng tôi đang sử dụng này.
>> Tương tự như vậy, nếu chúng ta có 1n khác, bất cứ điều gì
địa chỉ được lưu trữ với một y có là cùng một điều char-- với z.
Trong cùng một cách, bất cứ khi nào bạn cố gắng và làm intx bằng 0,4,
nó sẽ hét vào mặt bạn và được như không có, bạn nói rằng bạn muốn một int.
Đây được coi là một int.
Ngừng cố gắng để làm cho nó một phao.
>> Vì vậy, hãy điều là những gì họ muốn.
Hãy để mọi thứ được là chính mình.
Vì vậy, điều lớn chỉ là bất cứ loại con trỏ
đó là, đó là chỉ điều bạn có thể lưu trữ ở đó.
OK?
Với thực tế, như với tuần trước, tất cả mọi thứ
dường như thực sự là loại trừu tượng.
Chúng tôi sẽ làm một số thực hành.
Nó sẽ làm cho ý nghĩa hơn.
>> Vì vậy, tham khảo và dereferencing-- nó thực sự quan trọng để có được những thẳng.
Tôi vẫn phải làm mới tất cả bây giờ và sau đó.
Và tôi như chờ đợi, mà một trong những tôi muốn?
Vì vậy, các ký hiệu thực sự sẽ cung cấp cho bạn tham chiếu hoặc địa chỉ.
Vì vậy, nó trả về địa chỉ trong bộ nhớ trong đó biến được lưu trữ.
Vì vậy, nó sẽ thực sự trở lại với bạn một hệ thập lục phân, trong khi dereferencing nó
thực sự là sẽ cung cấp cho bạn các dữ liệu được lưu trữ ở đó.
OK?
Vì vậy, chúng ta sẽ xem một ví dụ thực sự nhanh chóng, hoặc thực sự lên tới.
>> OK.
Vì vậy, chúng ta phải nghĩ rằng thực sự cẩn thận về việc này.
Vì vậy, ở đây chúng tôi có một số nguyên x.
Tôi sẽ cố gắng và vẽ này ra để tốt nhất của khả năng của mình.
Vì vậy, chúng ta sẽ có khe cắm này x.
Và nó lưu trữ năm.
Địa chỉ của nó là 0x4.
Mát mẻ?
Tất cả các tốt.
>> Vì vậy, bây giờ chúng tôi có con trỏ này.
Đó là ở đây.
Và dấu và cung cấp cho chúng tôi địa chỉ của một cái gì đó.
Vì vậy, trong trường hợp này, đó là địa chỉ của x.
Địa chỉ của x là gì?
04-- và con trỏ này là 0x08.
Mát mẻ?
Vì vậy, bạn có thể nghĩ về điều này con trỏ, 04, chỉ chỉ ở đây.
Và chúng được gọi là con trỏ bởi vì khi chúng tôi nhận được nhiều hơn vào điều này,
bạn sẽ thấy chỉ sự vật.
Và một khối chỉ khác khối sẽ có ý nghĩa hơn rất nhiều.
Vì vậy, đây là hai.
Và sau đó chúng tôi có một số bản sao, đó là 0x0c what--.
Và nó sẽ dereference con trỏ của chúng tôi.
>> Vì vậy, những gì nó nói là OK, đây là con trỏ của chúng tôi.
Giá trị nó lưu là 0x04, Và những gì nó nói là đi đến địa chỉ này
và cho tôi biết những gì trong đó.
Vì vậy, đó là hiệu quả những mũi tên này đang làm.
Bạn có thể nghĩ về điều này như ngôi sao của bạn.
Vì vậy, OK, khi chúng ta làm sao, nó có nghĩa là làm theo.
Đến địa chỉ này.
Và đó là cơ bản chỉ sau mũi tên này để đoạn bộ nhớ này.
Và cung cấp cho chúng tôi những gì trong đó, mà là 5.
Đó là lý do tại sao bản sao của chúng tôi là bằng 5.
Điều đó có ý nghĩa?
Có ai cần tôi phải đi qua đó một lần nữa, hoặc chậm hơn?
Bạn muốn tôi đi qua nó một lần nữa?
OK.
Chúng ta sẽ vẽ lại nó một lần nữa.
Khi chúng tôi bắt đầu, tất cả chúng ta đồng ý chúng tôi có một số đoạn bộ nhớ đó là một biến
x mà chúng ta thiết lập bằng 5.
Chúng tôi không kiểm soát nó ở đâu trong bộ nhớ.
Vì vậy, vị trí này chỉ là tùy tiện được giao.
Tốt không?
OK.
Sau đó chúng ta khởi tạo một con trỏ đến một int.
Đó là lý do tại sao nó được phép để trỏ đến x bởi vì chúng ta có một int ở đây.
Chúng tôi có một đoạn bộ nhớ bởi vì con trỏ này
là một biến giống như bất cứ điều gì khác.
Nó tùy tiện giao một số không gian trong bộ nhớ.
Và địa chỉ của x những gì nó lưu là.
Ký hiệu có nghĩa là địa chỉ của x.
Vì vậy, địa chỉ của x là gì?
>> Đung Đó là zero--
SPEAKER 1: 0x04.
Vì vậy, then-- cuối cùng.
Chúng tôi có một số copy-- lại chỉ là một biến.
Vì vậy, hãy chỉ định một số vị trí tùy ý.
Và chúng tôi tới đích của con trỏ của chúng tôi.
Ngôi sao có nghĩa là đi đến địa chỉ được lưu giữ trong con trỏ của tôi.
Cho tôi biết những gì đang có.
Vì vậy, địa chỉ lưu trữ trong con trỏ của chúng tôi là 0x04.
Vì vậy, chúng tôi đi đến địa chỉ đó.
Nó chỉ đến địa chỉ đó.
Có gì bên trong khối bộ nhớ này?
Đó là một năm.
Vì vậy, đó là những gì chúng ta gán bản sao của chúng tôi.
Tất cả mọi người tốt?
Cool.
Hình ảnh Again--.
>> Vì vậy, theo dõi các giá trị here-- tôi sẽ để cho các bạn nghĩ về điều này.
Chúng ta có thể rút ra một hình ảnh.
Nhưng tôi muốn bạn để thử và lý do thông qua điều này một mình trong một phút.
>> Vì họ đã không đưa ra chúng tôi một địa chỉ ví dụ,
Tôi chỉ cần đi để làm ký hiệu x-- mà nên giúp lái xe về nhà.
Ký hiệu có nghĩa là địa chỉ.
>> Vì vậy, trong một đầu tiên, tất cả mọi người đi với dòng đầu tiên.
Một số x bộ của một số five-- khe cắm ngẫu nhiên trong bộ nhớ.
Con trỏ sao Int bằng đến địa chỉ của x, phải không?
Int con trỏ sao tạo khối này, gọi nó là con trỏ,
và gán nó vào địa chỉ của x.
Tôi khủng khiếp tại ampersands.
>> Bây giờ những gì chúng tôi đang làm chúng ta nói là OK, tới đích của con trỏ của chúng tôi.
Vì vậy, chúng tôi đi OK, những gì trong con trỏ của chúng tôi?
Đó là ký hiệu x.
Tới dấu và x và gán nó.
>> Vì vậy, bây giờ, ký hiệu x sẽ là 35.
Vì vậy, về cơ bản, khi bạn dereferencing, bạn đi OK.
Bạn sẽ được vẽ hình ảnh như thế này.
Bạn sẽ được vẽ mũi tên của bạn trên nó ở đâu.
Vì vậy, đi đến khe này trong bộ nhớ và một trong hai cho tôi mà lại giá trị, hoặc thay đổi nó.
Trong trường hợp này, bởi vì chúng tôi đang ở đây giá trị, chúng ta đang gán cho nó là 35.
Trong khi đó, ở cuối cùng một, nếu bạn thông báo, chúng tôi
được giao những gì đã ở đây cái gì khác.
>> Vì vậy, họ có bàn tuyệt vời này.
Nó không phải là xấu.
Các bạn làm việc trên nó.
Tôi sẽ vẽ nó ra trên diễn đàn.
Chúng tôi sẽ điền vào nó ra với nhau, OK?
Vì vậy, lấy một số giấy, lấy một đối tác, bắt đầu làm việc.
Tôi sẽ có được một mảnh lớn của phấn.
Bởi vì nó sẽ là rất nhiều.
OK.
GIÁO SƯ: OK.
Hãy bắt đầu với hàng đầu tiên.
Chúng tôi sẽ bắt đầu ở đó, sau đó các bạn có thể có thể làm việc thông qua một số chi tiết.
OK.
một lần bằng b c như vậy là những gì một?
Nó không phải là một câu hỏi lừa, tôi hứa.
>> HỌC SINH: 4 lần 5.
>> GIÁO SƯ: 4 lần 5.
20.
Vì vậy, b là những gì?
HỌC SINH: 4.
>> GIÁO SƯ: Và c?
HỌC SINH: 5.
GIÁO SƯ: 5.
Và sau đó điều này là chỉ cần đi để được ký hiệu a, ký hiệu b,
ký hiệu c, phải không?
Không xấu.
Nó đơn giản đủ.
OK.
Vì vậy, một trong những tiếp theo.
A bằng một lần c, trong trường hợp bất cứ ai không quen với điều đó.
Là tất cả mọi người quen thuộc với thời gian tương đương?
OK, tất cả điều này means-- này là viết tắt cho một tương đương với một lần c.
Bạn cũng có thể làm điều đó với các bộ phận, với Ngoài ra, với phép trừ.
Bạn có thể làm một người ngang hàng, hoặc một cộng bằng c có nghĩa là tương đương với một cộng c, trừ một bằng
c sẽ là một bằng một trừ c.
Nó chỉ là cú pháp đường.
>> Vì vậy, trong trường hợp này, một là bằng một lần c sẽ cung cấp cho chúng ta những gì?
Một lần nữa, không phải là một câu hỏi trick.
>> HỌC SINH: 100.
>> GIÁO SƯ: 100.
Có bất cứ điều gì thay đổi?
Không.
Có lẽ tôi cuối cùng sẽ nhận được tốt hơn ở ampersands của tôi.
>> SINH VIÊN: OK, xin lỗi, làm thế nào bạn nhận được 100?
GIÁO SƯ: OK.
Vì vậy, một là bằng một lần c, do đó, một lần c.
HỌC SINH: Oh, bạn đang sử dụng một cho previous--
GIÁO SƯ: Có.
Vì vậy, đây là những giá trị mới nhất của chúng tôi.
Đây là những gì bạn nên có sử dụng như chúng tôi di chuyển xuống, OK.
Vì vậy, b là điều thay đổi duy nhất, phải không?
Vì vậy, hãy điền vào tất cả mọi thứ khác.
B. b là gì sẽ được?
Để được hay không được.
Vì vậy, những gì là điều này đang làm gì?
Ngôi sao pa đang làm gì?
>> HỌC SINH: Mã đến vị trí của pa.
>> HỌC SINH: Không, không hoàn toàn.
Vì vậy, đây là một tài liệu tham khảo d.
>> SINH VIÊN: Vì vậy, b là giá trị tay của pa.
>> GIÁO SƯ: Yeah, vì vậy pa là địa chỉ của một, phải không?
Vì vậy, nó nói đi đến nơi một là lưu trữ và cung cấp cho nó giá trị đó.
Vì vậy, b là gì?
HỌC SINH: 100.
GIÁO SƯ: 100.
Perfect.
OK, như vậy máy là những gì đang thay đổi.
Mọi thứ khác vẫn như cũ.
Những gì được máy tính sẽ được?
Chuyển nhượng đơn giản.
Pc bằng pa, và là những gì pa?
>> HỌC SINH: ký hiệu a.
GIÁO SƯ: Hoàn hảo.
Bây giờ chúng tôi đang nhận được thú vị.
OK, chúng ta hãy phá vỡ này xuống.
Đầu tiên, thời gian b c là những gì, bởi vì đó là phần dễ dàng của một này, phải không?
Lần B c is--
>> HỌC SINH: 500.
>> GIÁO SƯ: Yeah, vì vậy những gì là một trong những điều này làm,
nếu nó pb sao, những gì đang thay đổi?
>> HỌC SINH: Có gì trong the--
GIÁO SƯ: Có gì trong b?
HỌC SINH: Có gì trong không gian pb mà được trỏ đến.
GIÁO SƯ: Và pb đang chỉ đối với:
HỌC SINH: B.
GIÁO SƯ: B. Vì vậy, các chỉ Điều thay đổi là b, phải.
Vì vậy, b lần c, 500.
Vì vậy, đó là những gì thay đổi ngay bây giờ.
Cool.
Đáng yêu.
Các bạn đang làm rất tốt.
Tất cả các bên phải, phá vỡ này xuống.
C đang thay đổi, phải không?
Vì vậy, chúng ta có thể điền vào tất cả mọi thứ khác.
Hãy xem.
OK.
Chúng ta biết rằng c là có được các sản phẩm của hai số, phải không?
Những gì hai con số, mặc dù?
>> HỌC SINH: A và c?
>> GIÁO SƯ: Vì vậy, một là phù hợp với một trong những đầu tiên.
Vì vậy, chúng tôi đang tham khảo: D p của một, phải không?
P của một điểm đến, vì vậy chúng tôi biết rằng này là có được 100 lần những gì?
Thời điểm nào máy tính nào để?
Trỏ đến một.
Vì vậy 100 lần 100 là 10.000.
Điều đó làm cho tinh thần?
Cool.
Trang chủ căng, guys, hàng cuối cùng.
OK.
Có gì thay đổi ở đây?
>> HỌC SINH: A.
GIÁO SƯ: A. hoàn hảo, vì vậy tất cả mọi thứ khác có thể giữ nguyên.
OK.
Và một là những gì?
Vì vậy, đó là một lần những gì?
Đây là ngôi sao pb.
Vì vậy, sao pb có nghĩa là đây là pb, điểm pb b.
>> HỌC SINH: 500.
>> GIÁO SƯ: 500.
Vì vậy, chúng tôi có 500 lần 100.
Đó là 50.000.
Phù!
Nhìn vào đó.
>> HỌC SINH: Tại sao chúng ta có các & c cho last--
GIÁO SƯ: Xin lỗi.
HỌC SINH: Oh, OK.
GIÁO SƯ: xấu của tôi.
Rất nhiều văn bản.
Tất cả mọi người tốt?
Không quá xấu, phải không?
Chỉ cần mất một ít trong khi làm việc thông qua.
Nếu bạn phá vỡ nó xuống, hiểu nhau phần nào
được đề cập như đối với: với tất cả mọi thứ nó,
yes-- phá vỡ nó xuống ít vấn đề và sau đó tái kết hợp,
và bạn có thể làm một số công cụ tuyệt vời.
Có câu trả lời, nhưng chúng tôi đã làm điều đó.
Số học con trỏ.
Ah.
Bàn tay của tôi là tất cả phấn.
Vì vậy, thêm hoặc trừ đi int điều chỉnh con trỏ
bởi kích thước của các loại con trỏ.
Nhớ làm thế nào tất cả các loại có kích thước khác nhau?
Vì vậy, giống như một đôi hoặc một là lâu dài tám và int là bốn nhưng char là một.
>> Vì vậy, những gì bạn muốn làm is-- một điều cần nhớ
Chỉ có điều là bao nhiêu bạn giá trị con trỏ thực sự thay đổi
sẽ phụ thuộc vào loại con trỏ nó được.
Mọi người đều tốt với điều này?
Tôi có thể xóa nó?
Chúng tôi có tốt không?
Tuyệt vời.
>> Vì vậy, nếu chúng tôi có một số con trỏ that-- này sẽ be-- tôi
sẽ làm cho nó một con trỏ int.
Nó lưu trữ này.
Nếu bạn đã nói con trỏ cộng với một, những gì nó sẽ làm gì
là nó sẽ cập nhật nó bằng kích thước của một int
bởi vì đó là loại con trỏ nó được.
>> Với C, mọi thứ đều rất nghiêm ngặt và quy định.
Các con trỏ int sẽ cập nhật bởi số lượng không gian một int sẽ mất.
Một int là bốn byte.
>> Vì vậy, điều này sẽ biến thành?
Bạn chỉ cần thêm bốn lên này.
Bây giờ con trỏ của bạn sẽ be-- OK.
>> Vì vậy, nếu đó là một char và chúng tôi đã làm con trỏ cộng với một, đó sẽ là gì bây giờ?
Nếu nó started-- giả vờ chúng tôi started-- ngay bây giờ nó là 0x08.
Bây giờ chúng ta nói rằng đây là một char con trỏ, và chúng tôi đã thêm một.
Những gì nó sẽ thay đổi?
Bao nhiêu byte là một char?
>> Đung One.
>> SPEAKER 1: Một.
Đung Vì vậy, 0x09.
SPEAKER 1: Vì vậy, nó sẽ chín.
Vì vậy, chỉ một cái gì đó để nhớ.
Chỉ khi bạn thêm một, nó không thêm một trừ khi đó là một char.
Nó thêm bao nhiêu byte loại đó là,
đó là lý do tại sao chúng tôi có phương trình này lên đây.
Vì vậy, nó lần int kích thước của các loại con trỏ.
>> Vì vậy, chúng ta có ví dụ ở đây.
y được gán cho giá trị đó, 0x4, khi chúng tôi đã làm y cộng tương đương với một.
Có gì trong đó, có chuyện gì trong x, không thay đổi.
Gì thay đổi là những gì trong y.
Các địa chỉ được lưu trữ trong y cập nhật bởi bốn bởi vì có bốn byte trong một int
và nó là một con trỏ int.
>> Được rồi.
Vì vậy, bây giờ chúng tôi có một tập thể dục.
Vì vậy, câu hỏi là những gì sẽ được in.
Bất cứ ý tưởng?
>> Đung Số lượng nhân vật trong hạnh phúc con mèo?
SPEAKER 1: Chính xác.
Vì vậy thích với chuỗi của bạn.
Có tất cả mọi người được điều đó?
Chúng ta muốn đi qua nó?
>> Vâng, OK.
Vì vậy, những gì chúng tôi có here-- tôi như thế này nhiều hơn nữa.
Tôi không phải [Không nghe được] lố bịch.
>> Vì vậy, chúng tôi có chuỗi của chúng tôi ở đây, hạnh phúc con mèo.
Đáng yêu.
Chúng tôi có một số truy cập mà chúng tôi đang theo dõi.
Vì vậy, chúng tôi có một số char * con trỏ mà chỉ được thiết lập bằng str.
Điều này đang làm là nó phân công một số con trỏ
đến đầu của chuỗi của bạn.
Bởi vì tôi là chắc chắn, vì nó đã được đề cập trong bài giảng,
chúng tôi đã cho các bạn này kiểu dữ liệu được gọi là chuỗi.
>> Nhưng thực sự là chuỗi chỉ một mảng of-- như char *.
Đó là một con trỏ đến một loạt các nhân vật nằm kề trong bộ nhớ.
Vì vậy, đây chỉ là đặt nó bằng bất kỳ chuỗi là
xác định bởi nơi ký tự đầu tiên của nó là.
Vì vậy, đây chỉ là thiết lập một số điểm bằng đầu của chuỗi.
Tất cả mọi người tốt không?
Cool.
>> Vì vậy, đây là dereferencing con trỏ của chúng tôi.
Vì vậy, nó thực sự đi vào cung cấp cho chúng tôi một số giá trị ở đây,
trong chuỗi mà chúng ta đang nói về.
Và chúng ta đang nói miễn là nó không phải null terminator.
Vì vậy, tiếp tục đi cho đến khi bạn nhận được đến cuối của chuỗi.
Cập nhật con trỏ của bạn bằng một.
Vì vậy, r, nó sẽ thực sự cập nhật bởi một mỗi lần bởi vì đây là một char,
char *.
>> Vì vậy, nó sẽ đi qua.
Nó sẽ cập nhật.
Vì vậy, lần đầu tiên chạy, nó sẽ có mặt ở đây h.
Nó sẽ cập nhật.
>> Nó sẽ là một một.
Nó sẽ là một p, y, vv và vv.
Chúng tôi sẽ cập nhật truy cập.
Khi đi đến cuối đường, nó chỉ cần in như thế nào đến nay nó nhận được.
Vâng.
>> Đung Vì vậy, Nó đếm không gian như một, phải không?
OK.
>> SPEAKER 1: Hãy suy nghĩ như vậy.
Là một question--
>> Đung [không nghe được].
>> SPEAKER 1: Không có lo lắng.
Điều này tôi làm điều đó.
Tất cả các bên phải, vì vậy có một điều tôi hiểu là với một mảng,
bạn cũng có thể coi nó như một con trỏ vì mảng là chỉ
điểm liên tục của bộ nhớ.
>> Vì vậy, bạn có thể đối xử với nó theo cùng một cách.
Bạn có thể thao tác chúng với con trỏ, quá.
Vì vậy, thay vì làm, trong này trường hợp, điều tương tự
sẽ là mảng 0 bằng 1.
>> Nhưng trong cùng một cách mà một chuỗi được xác định
bởi sự bắt đầu của nơi ký tự đầu tiên của nó là,
một mảng được xác định bởi nơi mà yếu tố đầu tiên của nó là.
Bởi vì chúng tôi biết, chúng tôi đảm bảo rằng những
sẽ được liên tục khối của bộ nhớ.
Đó là những gì cho phép chúng ta làm điều này.
Chúng tôi biết họ đang liên tục khối của bộ nhớ.
>> Vì vậy, trong trường hợp này, bởi dereferencing chỉ mảng, mà nói với chúng tôi,
OK, đi đầu mảng của bạn, mà là ở đây.
Vì vậy, bạn có thể thiết lập nó bằng một.
Và trong trường hợp này, bất cứ điều gì mảng của bạn loại là, khi bạn cập nhật nó bằng một,
đó là giống như cập nhật nó để chỉ số tiếp theo.
Bạn có thể làm điều đó bởi vì bạn biết những gì trong mảng của bạn.
Vì vậy, nó biết bao nhiêu cập nhật con trỏ của bạn bằng cách,
những địa chỉ để cập nhật nó đến như vậy rằng bạn đang ở khe tiếp theo.
>> Vì vậy, đây chỉ là một cách khác nhau viết mảng 0 bằng 1,
mảng 1 bằng 2, mảng khung 2 bằng 3.
Nó chỉ là một cách khác để suy nghĩ về nó.
Bởi vì họ là liên tục khối trong bộ nhớ,
bạn có thể giới thiệu cho họ một trong hai bởi các mảng notation--
mà cá nhân tôi tìm easier-- nhưng có lẽ
bạn cần phải vận dụng nó đúng địa chỉ bộ nhớ.
Và đây là cách bạn sẽ làm điều đó.
Loại hơn giống như một Điều thú vị bạn có thể làm
so với có lẽ không phải cái gì bạn thực sự đi vào thực hiện.
>> Tôi sử dụng nó trong 61.
Các bạn có lẽ không cần lo lắng về nó quá nhiều.
Nhưng nếu bạn quan tâm, mất 61 năm tới.
Chúng tôi đang ở trong những kẻ nhà căng.
Tôi biết, nó dài.
Năng động, bộ nhớ Allocation-- vì vậy chúng tôi biết rằng một trong
của sự vật khi chúng tôi nói chuyện trong Phần đầu tiên của chúng tôi với nhau,
chúng tôi đã trao đổi chức năng nơi nó được
ngoài phạm vi chức năng chính của chúng tôi.
Và chúng tôi đã đi qua trong các giá trị đó là hiệu quả bản.
>> Và một khi trao đổi xong thực hiện, nó chỉ còn lại một chồng.
Hãy nhớ rằng, chúng ta có một ngăn xếp khung cho trao đổi.
Nó lá và những giá trị lại với nó.
Và họ đã biến mất.
Chúng tôi không thể làm bất cứ điều gì với họ và chúng tôi đã buồn
bởi vì chúng tôi không thể trao đổi các giá trị của chúng tôi.
>> Nhưng với C, như tôi đã đề cập, bạn có rất nhiều năng lượng hơn bộ nhớ.
Vì vậy, những gì bạn có thể làm là bạn có thể phân bổ những thứ trên đống ở đây
mà sẽ ở lại đó cho đến khi bạn nói với họ khác.
>> Họ giống như những đứa con.
Họ ở lại đó.
Họ không để lại.
Họ sẽ ở lại đó cho đến khi bạn như, OK, bạn có thể đi xa.
>> Trong khi đó, những thứ trên stack, who-- chúng như những đứa trẻ nghịch ngợm.
Họ sẽ chỉ cần chạy đi khi bạn muốn được ở đó và sau đó họ đang đi.
Bạn không thể nhận được chúng trở lại.
>> Vì vậy, các đống is-- chúng ta sẽ nói về malloc và miễn phí,
Tôi chắc rằng các bạn nghe nói về trong bài giảng.
Và đó là cơ bản một cách để có dữ liệu rất kiên trì.
Vì vậy, bạn có thể giữ các dữ liệu xung quanh miễn là bạn muốn.
MHM.
>> Đung bạn có thể xác định heap và stack?
Họ thích những nơi đặt mọi thứ?
>> SPEAKER 1: Vì vậy, họ về cơ bản just-- họ
cách chúng ta tham khảo chỉ để nhớ.
Vì vậy, đống chỉ được đặt ở đâu bộ nhớ được cấp phát động,
trong khi chồng đề cập hơn để ngăn xếp khung
là trọng tâm nhiều hơn đến chức năng đang thực sự chạy.
Bạn không thực sự có quyền kiểm soát.
>> Sự khác biệt lớn, bạn có kiểm soát trong đống nếu bạn muốn.
Bạn có quyền kiểm soát ít hơn chồng.
Stack phụ thuộc vào chức năng đang chạy,
và thứ tự mà họ chạy, và làm thế nào mọi thứ đang trở lại.
Trong khi đó, với đống, như chúng ta sẽ thấy, bạn có thể nói,
OK, tôi muốn giá trị này là xung quanh cho đến khi tôi nói với bạn khác.
Bạn không được phép để thoát khỏi nó.
Bạn không được phép ghi đè lên nó.
Bạn sẽ giữ nó xung quanh cho đến khi tôi nói với bạn.
Bạn có thể là ông chủ trong đống, trong khi stack-- có lẽ nếu bạn
như finagle theo cách của bạn bạn có thể là ông chủ.
Nhưng không hoàn toàn.
Và nó thực sự chỉ bộ nhớ.
Đó là cách chỉ khác nhau đề cập đến bộ nhớ.
>> Cool.
Vì vậy, với điều đó, làm thế nào để kiểm soát bộ nhớ của bạn.
Đó là với malloc, mà bạn sẽ nhận được để sử dụng.
Vì vậy, nó chỉ là ngắn để cấp phát bộ nhớ.
Đó là tất cả nó được.
Có một loạt các mát mẻ khác chức năng có alloc lúc kết thúc,
và họ đứng cho những thứ khác nhau.
>> Vì vậy, khi bạn cần lưu trữ mà cần để tồn tại lâu hơn chức năng hiện tại của bạn để
rằng khi hiện tại của bạn chức năng bỏ chạy,
bạn vẫn còn có dữ liệu mà bạn nhận được từ nó, bạn muốn sử dụng malloc.
Điều đó sẽ khởi tạo nó trên heap.
Và như tôi đã nói và giữ nói, bạn sẽ giữ nó ở đó
cho đến khi bạn nói với nó nếu không, đó là điều quan trọng ở đây.
>> Vì vậy, một điều cần chú ý, và đó là thường thực sự quan trọng,
là điều này sizeof là siêu hữu ích để sử dụng
vì tùy thuộc vào loại của máy bạn đang chạy,
nó có thể có số lượng khác nhau bộ nhớ mà nó cần.
Vì vậy, bạn luôn luôn muốn sử dụng kích thước của cái rằng bạn không phải phụ thuộc vào máy,
để mã của bạn sẽ chạy trên máy tính bất kỳ.
>> Và đó chỉ là một phần viết mã tốt.
Nếu nó hoạt động trên một máy, nhưng không phải bất kỳ những người khác,
như thế nào hữu ích là chương trình của bạn?
Vì vậy, bạn luôn luôn muốn chắc chắn và sử dụng sizeof.
>> Đung Vì vậy, là như kích thước 10 inch [không nghe được]?
>> SPEAKER 1: Đây là kích thước của 10 ints.
yeah.
Vì vậy, kích thước của ints sẽ trở lại bao nhiêu một int mất.
Hoặc kích thước của char, làm thế nào nhiêu một char mất.
Và sau đó có bao nhiêu khối của mà bạn muốn?
>> Vì vậy, trong trường hợp này, chúng tôi muốn một cái gì đó chúng ta có thể lưu trữ 10 ints để.
Và nó sẽ làm việc bất kể của máy, đó là mát mẻ.
Vì vậy, có bao nhiêu byte sẽ mà thực sự cung cấp cho bạn?
Toán nhanh chóng.
>> Đung 40.
SPEAKER 1: 40.
Chính xác.
Vì vậy, điều quan trọng khác.
Con trỏ hoặc malloc có thể trở lại null.
>> Vì vậy, một lần nữa, luôn luôn kiểm tra xem nếu nó trở rỗng
trước khi bạn cố gắng và làm bất cứ điều gì với nó.
Nếu bạn cố gắng và tới đích con trỏ này ngay bây giờ,
nó chỉ sẽ segfault bởi vì bạn đã đi và cố gắng
chạm vào null khi bạn không nên có.
Vì vậy, luôn luôn kiểm tra cho null.
Một lần nữa, tất cả các bạn có thể làm.
>> Nó có thể trở về null.
Nó sẽ trở lại null nếu bạn đang hoặc ra khỏi không gian, hoặc vì lý do gì
nó chạy vào một số lỗi bộ nhớ.
Đôi khi nó chỉ trả về null.
Vì vậy, bạn chỉ cần có để kiểm tra nó.
Đó là tất cả slide này nói.
Và sau đó những gì chúng tôi có đây là một cuộc gọi miễn phí.
Vì vậy, trong cùng một cách mà nếu bạn mở một tập tin bạn phải đóng một tập tin,
nếu bạn nhớ malloc, bạn bạn phải giải phóng bộ nhớ.
Và các bạn sẽ nhận được để làm công cụ thực sự mát mẻ.
>> Và có một chương trình mà bạn có thể chạy để xem nếu bạn đã bao giờ bị rò rỉ bộ nhớ.
Nhưng bạn không muốn bị rò rỉ bộ nhớ.
Đó là thực sự xấu.
Chỉ mess up điều.
>> Đó là xấu để làm giống như lập trình khôn ngoan cho hiệu quả thiết kế.
Nhưng nó cũng chỉ loại xấu cho máy tính của bạn.
Vì vậy những thứ chỉ miễn phí khi bạn malloc họ.
>> Các bạn nhìn thấy các đối xứng ở đây.
Siêu đơn giản.
Chỉ miễn phí và sau đó bất cứ điều gì con trỏ của bạn,
bất cứ điều gì tên của con trỏ của bạn, và nó
sẽ chăm sóc giải phóng nó cho bạn.
Cool.
>> Sau đó, chúng tôi có điều này.
Vì vậy, chúng tôi chỉ cần đi để đi bộ qua chương trình này.
Và sau đó các bạn đã làm xong.
>> Vì vậy, [không nghe được] chỉ chính.
Vì vậy, chúng tôi có một số int * con trỏ.
Vì vậy, chúng tôi có một con trỏ đó là sẽ giữ ints.
Và có bao nhiêu ints là nó sẽ giữ?
Chỉ cần một.
Kích thước của một int.
>> Chúng tôi kiểm tra xem con trỏ là null vì nó
là, chúng tôi muốn nói không làm bất cứ điều gì.
Đó là xấu.
Vì vậy, chúng tôi in một số lỗi ra khỏi bộ nhớ, thường trở về 1,
như các bạn đang sử dụng để.
>> Và sau đó chúng tôi có ở đây, chúng tôi dereference con trỏ của chúng tôi.
Vì vậy, điều đó có nghĩa chúng ta sẽ lưu trữ một cái gì đó ở vị trí ban cho chúng ta.
Int * con trỏ, hoặc malloc, trả về địa chỉ nơi nó đặt sang một bên này
bộ nhớ cho bạn.
Vì vậy, nó là cơ bản đem lại cho bạn nếu bạn like--
suy nghĩ về một loạt các nhà trong một khu phố
mà bạn muốn đặt đồ nội thất trong, malloc của bạn
giống như OK, bạn sẽ có được để đi đến nhà ba.
Và nó sẽ cho bạn địa chỉ của ngôi nhà ba.
>> Vì vậy, này ngay bây giờ, điều này cửa hàng con trỏ một địa chỉ,
lưu trữ các địa chỉ nhà của bạn.
* Phương tiện ptr, OK, tôi đang ở nhà tôi.
Cool.
Tôi cần phải nhận được một số nguyên.
>> Vì vậy, bạn đang yêu cầu cho một người nào đó để cung cấp cho bạn vài thứ đồ bây giờ.
Vì vậy, bạn nhận được một số int.
Và nó sẽ để con trỏ của bạn nơi mà nó trỏ tới.
>> Và sau đó nó chỉ in ra, bạn nhập vào bất cứ nơi nào.
Và một lần nữa, các tài liệu tham khảo.
Vì vậy, điều này giống như bạn đã đi đến này giải quyết và bạn đã thấy những gì đã có.
Mát mẻ?
>> Và sau đó dĩ nhiên chúng tôi giải phóng con trỏ của chúng tôi.
Đừng quên để giải phóng con trỏ của bạn.
Đừng quên để kiểm tra null.
Đừng quên để giải phóng con trỏ của bạn.
Bạn có hai điều bạn nhớ từ này, hoặc là bạn nên nhớ.
Vâng.
Đung [không nghe được] thứ như vậy, char * s.
Tại sao chúng ta không bao giờ giải phóng những người?
>> SPEAKER 1: Hm?
>> Đung là những người như dây?
Bạn nói dây là giống như char * s, phải không?
Vậy tại sao chúng ta không giải phóng chuỗi?
>> SPEAKER 1: Bạn chỉ miễn phí nếu bạn đang mallocing.
ĐỐI TƯỢNG: Oh, nếu bạn đang mallocing.
SPEAKER 1: Vì vậy, malloc và miễn phí là hai việc
mà bạn nên luôn luôn có nhau.
f mở, f gần, có hai điều bạn nên có với nhau.
Trong cả hai trường hợp đó, kiểm tra null.
Vâng.
>> Đung Vì vậy, miễn phí chỉ là cho phép một cái gì đó khác
được lưu trữ ở đó sau khi chương trình này đã sử dụng nó?
>> SPEAKER 1: Nó chỉ nói, OK, tôi đang thực hiện với điều này.
Bạn không cần phải giữ nó xung quanh.
Nếu máy tính của bạn sẽ chỉ thích thử và giữ nó ở đó.
Và sau đó bạn can't-- nó chạy vào các vấn đề bộ nhớ sau này.
Bạn luôn luôn muốn giải phóng nó bởi vì nó báo cho máy tính của bạn, OK, tôi
thực hiện với vị trí này của bộ nhớ.
Bạn có thể có nó trở lại cho tôi để sử dụng sau này.
Mát mẻ?
Vâng.
>> Đung Vì vậy, chúng tôi sử dụng% d chỉ bởi vì một đôi đó là quay trở lại,
hoặc lý do tại sao is-- [không nghe được].
>> Đung bạn có thể sử dụng% i?
>> SPEAKER 1: Bạn có thể sử dụng% i.
Bất kỳ câu hỏi phút cuối cùng?
Đi trước.
ĐỐI TƯỢNG: Tôi chỉ có một câu hỏi nhanh chóng.
Vì vậy, các biến ptr, that's-- như, với int * ptr = malloc,
đó chỉ nói rằng nó trỏ đến một vị trí trong memory--
SPEAKER 1: Bạn có muốn [không nghe được]?
Đung --that là kích thước of-- không có, đó là OK.
Nhưng nó chỉ trỏ đến một vị trí trong bộ nhớ đó là giống như bốn byte.
SPEAKER 1: Đúng vậy.
Vì vậy, malloc kích thước của int nói, OK, tôi sẽ đi chạy ra,
tìm thấy bốn byte bộ nhớ cho bạn.
Khi nó tìm thấy rằng bốn byte của bộ nhớ, nó
cho bạn nhiều sao địa chỉ của nơi nó bắt đầu,
và đó là những gì được lưu trữ trong con trỏ, hoặc ptr.
Tốt.
Các bạn trông ít bối rối hơn so với hầu hết các người khi nói về con trỏ,
vì vậy tôi cảm thấy khá tốt ngay bây giờ.
>> Được rồi.
Như mọi khi, các bạn nên có tất cả nhận lớp pset2 của bạn bây giờ.
Tôi biết đã có một số rung rinh điều mà nó nói, công thức không hợp lệ
hoặc một cái gì đó.
Nếu bạn nhận được rằng, tất cả các điểm số của bạn là hợp lệ về phía tôi.
Vì vậy, tôi có thể gửi cho bạn ảnh chụp màn hình của điểm số của bạn.
Chỉ cần cho tôi biết là tốt nếu bạn thiếu bất kỳ lớp hoặc một cái gì đó
dường như không có ý nghĩa.
Hãy đến với tôi.
>> Tôi đã siêu tự hào về bạn kẻ đã có, vì vậy giữ cho nó lên.
Và có một phần còn lại tốt trong tuần của bạn.
Tôi chắc rằng tôi sẽ thấy một số của bạn vào giờ hành chính.