1 00:00:00,000 --> 00:00:03,388 >> [MUSIC CHƠI] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: Tất cả các quyền. 4 00:00:06,020 --> 00:00:07,680 Làm việc với các đơn biến là khá thú vị. 5 00:00:07,680 --> 00:00:09,500 Nhưng nếu chúng ta muốn làm việc với rất nhiều biến số, 6 00:00:09,500 --> 00:00:12,760 nhưng chúng tôi không muốn có một bó tên gọi khác nhau bay xung quanh mã của chúng tôi? 7 00:00:12,760 --> 00:00:15,980 Trong trường hợp này, mảng là sẽ đi vào thực sự tiện dụng. 8 00:00:15,980 --> 00:00:19,510 Mảng là một dữ liệu thực sự cơ bản cấu trúc đối với bất kỳ ngôn ngữ lập trình 9 00:00:19,510 --> 00:00:20,260 mà bạn sẽ sử dụng. 10 00:00:20,260 --> 00:00:24,450 Và họ thực sự, thực sự hữu ích, đặc biệt, như chúng ta sẽ thấy, trong 50 CS. 11 00:00:24,450 --> 00:00:27,870 >> Chúng tôi sử dụng mảng để giữ giá trị của kiểu dữ liệu tương tự 12 00:00:27,870 --> 00:00:29,830 tại các vị trí bộ nhớ kề nhau. 13 00:00:29,830 --> 00:00:32,430 Đó là để nói, đó là một cách mà chúng ta có thể nhóm 14 00:00:32,430 --> 00:00:35,430 một loạt các số nguyên với nhau trong bộ nhớ hoặc một loạt các nhân vật 15 00:00:35,430 --> 00:00:38,270 hoặc nổi trong bộ nhớ thực sự gần nhau và công việc 16 00:00:38,270 --> 00:00:41,930 với họ mà không cần phải cung cấp cho mỗi một tên độc đáo riêng của mình, mà có thể 17 00:00:41,930 --> 00:00:44,500 nhận được rườm rà sau một thời gian ngắn. 18 00:00:44,500 --> 00:00:48,130 >> Bây giờ, một cách để analogize mảng là để suy nghĩ về bài địa phương của bạn 19 00:00:48,130 --> 00:00:49,000 văn phòng cho một thứ hai. 20 00:00:49,000 --> 00:00:51,820 Vì vậy, bước ra từ chương trình và chỉ cần nhắm mắt lại 21 00:00:51,820 --> 00:00:54,120 và hình dung trong tâm trí của bạn bưu điện địa phương của bạn. 22 00:00:54,120 --> 00:00:57,160 Thông thường, trong hầu hết các bài văn phòng, có một ngân hàng lớn 23 00:00:57,160 --> 00:01:00,490 một hộp bưu điện trên tường. 24 00:01:00,490 --> 00:01:03,510 >> Một mảng là một khối khổng lồ bộ nhớ kề, 25 00:01:03,510 --> 00:01:06,120 cùng một cách mà một mail ngân hàng tại văn phòng đăng bài của bạn 26 00:01:06,120 --> 00:01:11,230 là một không gian rộng lớn trên tường của bưu điện. 27 00:01:11,230 --> 00:01:15,750 Mảng đã được phân chia thành nhỏ, hệt khối với kích thước của không gian, 28 00:01:15,750 --> 00:01:19,930 mỗi trong số đó được gọi là một yếu tố, trong cùng một cách mà các bức tường của các bài 29 00:01:19,930 --> 00:01:23,840 văn phòng đã được phân chia thành nhỏ, hệt khối với kích thước của không gian, 30 00:01:23,840 --> 00:01:27,560 mà chúng ta gọi là hộp PO. 31 00:01:27,560 --> 00:01:31,650 Mỗi phần tử của mảng có thể lưu trữ một số tiền nhất định của dữ liệu, 32 00:01:31,650 --> 00:01:37,540 cũng giống như mỗi hộp bưu điện có thể tổ chức một số tiền nhất định của mail. 33 00:01:37,540 --> 00:01:41,540 >> Những gì có thể được lưu trữ trong mỗi phần tử của mảng là biến của cùng một dữ liệu 34 00:01:41,540 --> 00:01:45,300 loại, chẳng hạn như int hoặc char, chỉ giống như trong hộp bưu điện của bạn, 35 00:01:45,300 --> 00:01:47,300 bạn chỉ có thể phù hợp với điều các loại tương tự, 36 00:01:47,300 --> 00:01:50,430 như thư hoặc các gói nhỏ. 37 00:01:50,430 --> 00:01:55,050 Cuối cùng, chúng ta có thể truy cập mỗi phần tử của các mảng trực tiếp theo số chỉ mục, 38 00:01:55,050 --> 00:01:59,770 cũng như chúng ta có thể truy cập vào văn phòng của chúng tôi bài hộp bằng cách biết số hộp thư của mình. 39 00:01:59,770 --> 00:02:02,750 Hy vọng rằng, tương tự mà giúp bạn có được đầu của bạn 40 00:02:02,750 --> 00:02:05,540 xung quanh ý tưởng của mảng bằng analogizing đến cái gì khác 41 00:02:05,540 --> 00:02:08,400 rằng bạn có lẽ đã quen thuộc với. 42 00:02:08,400 --> 00:02:13,182 >> Trong C, các yếu tố của một mảng được lập chỉ mục bắt đầu từ 0, không phải từ 1. 43 00:02:13,182 --> 00:02:14,390 Và điều này thực sự quan trọng. 44 00:02:14,390 --> 00:02:18,530 Và trên thực tế, đây là lý do tại sao chúng tôi, trong CS 50, và lý do tại sao máy tính của các nhà khoa học thường xuyên 45 00:02:18,530 --> 00:02:22,150 sẽ đếm từ 0, là vì mảng C 46 00:02:22,150 --> 00:02:24,660 lập chỉ mục, mà luôn luôn bắt đầu từ 0. 47 00:02:24,660 --> 00:02:28,730 Vì vậy, nếu một mảng gồm n phần tử, phần tử đầu tiên của mảng đó 48 00:02:28,730 --> 00:02:32,960 nằm ở chỉ số 0, và phần tử cuối cùng của mảng 49 00:02:32,960 --> 00:02:36,610 nằm ở chỉ số n trừ đi 1. 50 00:02:36,610 --> 00:02:43,160 Một lần nữa, nếu có n phần tử trong chúng tôi mảng, chỉ số cuối cùng là n trừ đi 1. 51 00:02:43,160 --> 00:02:46,820 >> Vì vậy, nếu mảng của chúng tôi có 50 yếu tố, các Yếu tố đầu tiên nằm ở chỉ số 0, 52 00:02:46,820 --> 00:02:51,060 và yếu tố cuối cùng tọa lạc tại số 49. 53 00:02:51,060 --> 00:02:53,940 Thật không may, hoặc may mắn thay, tùy thuộc vào quan điểm của bạn, 54 00:02:53,940 --> 00:02:56,170 C là rất khoan dung ở đây. 55 00:02:56,170 --> 00:02:59,480 Nó sẽ không ngăn cản bạn đi ra ngoài giới hạn của mảng của bạn. 56 00:02:59,480 --> 00:03:03,080 Bạn có thể truy cập trừ 3 yếu tố của mảng của bạn 57 00:03:03,080 --> 00:03:07,400 hoặc các yếu tố thứ 59 của mảng của bạn, nếu mảng của bạn chỉ có 50 phần tử. 58 00:03:07,400 --> 00:03:11,060 Nó sẽ không ngừng chương trình của bạn từ biên soạn, nhưng trong thời gian chạy, 59 00:03:11,060 --> 00:03:14,350 bạn có thể gặp một sợ hãi lỗi segmentation 60 00:03:14,350 --> 00:03:17,460 nếu bạn bắt đầu truy cập vào bộ nhớ đó là ngoài giới hạn của những gì 61 00:03:17,460 --> 00:03:19,260 bạn hỏi chương trình của bạn để cung cấp cho bạn. 62 00:03:19,260 --> 00:03:21,250 Vì vậy, hãy cẩn thận. 63 00:03:21,250 --> 00:03:23,120 >> Những gì hiện một mảng khai báo như thế nào? 64 00:03:23,120 --> 00:03:26,940 Làm thế nào để chúng ta viết mã một mảng vào sự tồn tại như chúng ta viết mã bất kỳ biến nào khác? 65 00:03:26,940 --> 00:03:31,250 Có ba phần để một mảng declaration-- một kiểu, một tên, 66 00:03:31,250 --> 00:03:31,880 và kích thước. 67 00:03:31,880 --> 00:03:34,088 Điều này là rất tương tự như một khai báo biến, mà 68 00:03:34,088 --> 00:03:36,970 chỉ là một loại và một tên, các yếu tố kích thước là 69 00:03:36,970 --> 00:03:39,860 trường hợp đặc biệt cho một mảng, bởi vì chúng ta đang nhận được một bó của họ 70 00:03:39,860 --> 00:03:41,830 cùng một lúc. 71 00:03:41,830 --> 00:03:45,560 >> Vì vậy, loại này là loại biến bạn muốn mỗi phần tử của mảng được. 72 00:03:45,560 --> 00:03:47,150 Do muốn nó vào một mảng các số nguyên? 73 00:03:47,150 --> 00:03:49,010 Sau đó, kiểu dữ liệu của bạn nên là int. 74 00:03:49,010 --> 00:03:51,760 Bạn có muốn nó là một mảng tăng gấp đôi hoặc phao nổi? 75 00:03:51,760 --> 00:03:54,545 Kiểu dữ liệu phải được gấp đôi hoặc thả nổi. 76 00:03:54,545 --> 00:03:56,420 Tên bạn là gì muốn gọi mảng của bạn. 77 00:03:56,420 --> 00:04:00,970 Điều gì làm bạn muốn đặt tên khổng lồ này ngân hàng số nguyên hoặc phao hoặc ký tự 78 00:04:00,970 --> 00:04:03,250 hoặc tăng gấp đôi, hoặc bất cứ điều gì bạn có? 79 00:04:03,250 --> 00:04:04,700 Làm những gì bạn muốn gọi nó? 80 00:04:04,700 --> 00:04:06,110 Khá tự giải thích. 81 00:04:06,110 --> 00:04:08,610 >> Cuối cùng, kích thước, mà đi bên trong dấu ngoặc vuông, 82 00:04:08,610 --> 00:04:12,180 là bao nhiêu yếu tố bạn sẽ như mảng để chứa. 83 00:04:12,180 --> 00:04:13,530 Có bao nhiêu số nguyên nào bạn muốn? 84 00:04:13,530 --> 00:04:15,570 Làm thế nào nhiều phao nào bạn muốn? 85 00:04:15,570 --> 00:04:19,070 >> Vì vậy, ví dụ, int lớp học 40. 86 00:04:19,070 --> 00:04:26,020 Này khai báo một mảng gọi là sinh viên lớp, trong đó bao gồm 40 số nguyên. 87 00:04:26,020 --> 00:04:28,180 Khá tự giải thích, tôi hy vọng. 88 00:04:28,180 --> 00:04:29,330 Dưới đây là một ví dụ khác. 89 00:04:29,330 --> 00:04:31,560 Giá đơn đôi 8. 90 00:04:31,560 --> 00:04:34,610 Điều này tạo ra một mảng gọi là Giá Menu, trong đó bao gồm 91 00:04:34,610 --> 00:04:38,300 các phòng trong bộ nhớ cho tám đôi. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Nếu bạn nghĩ về từng yếu tố của một mảng của kiểu dữ liệu kiểu, 94 00:04:45,750 --> 00:04:49,860 ví dụ như vậy, một yếu tố duy nhất của một mảng kiểu int, giống như cách bạn 95 00:04:49,860 --> 00:04:52,770 sẽ nghĩ ra bất kỳ khác biến kiểu int, 96 00:04:52,770 --> 00:04:56,440 tất cả các hoạt động quen thuộc mà chúng ta thảo luận trước đây trong các hoạt động 97 00:04:56,440 --> 00:04:58,270 video sẽ làm cho tinh thần. 98 00:04:58,270 --> 00:05:01,620 Vì vậy, ở đây, chúng ta có thể khai báo một mảng các phép toán luận gọi là Truthtable, 99 00:05:01,620 --> 00:05:05,590 trong đó bao gồm phòng trong 10 Boolean. 100 00:05:05,590 --> 00:05:09,650 >> Và sau đó, giống như chúng ta chỉ có thể gán một giá trị cho bất kỳ biến khác của loại 101 00:05:09,650 --> 00:05:13,470 Boolean, chúng ta có thể nói điều gì đó như Truthtable khung vuông 102 00:05:13,470 --> 00:05:18,040 2, đó là cách chúng tôi đã chỉ ra, trong đó yếu tố của bảng sự thật? 103 00:05:18,040 --> 00:05:20,350 Yếu tố thứ ba của bảng sự thật, vì nhớ, 104 00:05:20,350 --> 00:05:21,800 chúng tôi đang đếm từ 0. 105 00:05:21,800 --> 00:05:25,690 Vì vậy, đó là cách chúng tôi chỉ ra Yếu tố thứ ba của bảng sự thật. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 bằng giả, giống như chúng ta có thể declare-- 107 00:05:28,680 --> 00:05:33,560 hoặc chúng tôi có thể chuyển nhượng, thay vào đó, bất kỳ Biến kiểu Boolean là sai lầm. 108 00:05:33,560 --> 00:05:35,050 >> Chúng tôi cũng có thể sử dụng nó trong điều kiện. 109 00:05:35,050 --> 00:05:39,000 if (truthtable 7 == true), mà là để nói, 110 00:05:39,000 --> 00:05:42,370 nếu các yếu tố thứ tám của Truthtable là sự thật, 111 00:05:42,370 --> 00:05:46,760 có lẽ chúng ta muốn in một tin nhắn cho người sử dụng, printf ("TRUE n!") ;. 112 00:05:46,760 --> 00:05:50,290 Điều đó khiến chúng tôi phải nói Truthtable 10 bằng sự thật, đúng không? 113 00:05:50,290 --> 00:05:53,590 Vâng, tôi có thể, nhưng nó đẹp nguy hiểm, vì nhớ, 114 00:05:53,590 --> 00:05:56,260 chúng tôi có một mảng của 10 Boolean. 115 00:05:56,260 --> 00:06:02,340 Vì vậy, các chỉ số cao nhất mà trình biên dịch đã cho chúng ta là 9. 116 00:06:02,340 --> 00:06:06,010 >> Chương trình này sẽ biên dịch, nhưng nếu cái gì khác trong bộ nhớ 117 00:06:06,010 --> 00:06:09,110 tồn tại nơi mà chúng tôi sẽ mong Truthtable 10 để đi, 118 00:06:09,110 --> 00:06:13,980 chúng ta có thể chịu đựng một lỗi phân khúc. Chúng tôi có thể nhận được ngay với nó, nhưng nói chung, 119 00:06:13,980 --> 00:06:14,710 khá nguy hiểm. 120 00:06:14,710 --> 00:06:19,759 Vì vậy, C pháp lý những gì tôi đang làm ở đây là, nhưng không nhất thiết phải di chuyển tốt nhất. 121 00:06:19,759 --> 00:06:22,300 Bây giờ, khi bạn khai báo và khởi tạo một mảng đồng thời, 122 00:06:22,300 --> 00:06:23,960 có thực sự là một khá cú pháp đặc biệt mà bạn 123 00:06:23,960 --> 00:06:26,250 có thể sử dụng để điền vào mảng với các giá trị khởi đầu của nó. 124 00:06:26,250 --> 00:06:30,130 Nó có thể nhận được rườm rà để khai báo một mảng có kích thước 100, 125 00:06:30,130 --> 00:06:33,430 và sau đó có thể nói, phần tử 0 bằng này; 1 phần tử bằng này; 126 00:06:33,430 --> 00:06:34,850 phần 2 bằng đó. 127 00:06:34,850 --> 00:06:36,370 Điểm là gì, phải không? 128 00:06:36,370 --> 00:06:39,470 >> Nếu đó là một mảng nhỏ, bạn có thể làm một cái gì đó như thế này. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 bằng mở ngoặc móc và sau đó dấu phẩy 130 00:06:44,360 --> 00:06:48,060 tách danh sách các yếu tố mà bạn muốn đưa vào mảng. 131 00:06:48,060 --> 00:06:50,520 Sau đó đóng xoăn cú đúp dấu chấm phẩy. 132 00:06:50,520 --> 00:06:53,910 Điều này tạo ra một mảng của kích thước ba gọi Truthtable, 133 00:06:53,910 --> 00:06:56,090 với các yếu tố sai, sự thật, và sự thật. 134 00:06:56,090 --> 00:06:59,270 Và trên thực tế, các instantiation cú pháp tôi có ở đây là 135 00:06:59,270 --> 00:07:03,350 chính xác giống như làm cú pháp yếu tố cá nhân dưới đây. 136 00:07:03,350 --> 00:07:09,380 Hai cách mã hóa sẽ sản xuất các mảng chính xác như nhau. 137 00:07:09,380 --> 00:07:11,740 >> Tương tự như vậy, chúng ta có thể lặp trên tất cả các yếu tố 138 00:07:11,740 --> 00:07:15,400 của một mảng bằng cách sử dụng một vòng lặp, trong đó, Trên thực tế, là một đề nghị rất mạnh mẽ 139 00:07:15,400 --> 00:07:16,790 tại nhà tập thể dục. 140 00:07:16,790 --> 00:07:20,720 Làm thế nào để bạn tạo ra một mảng 100 số nguyên, nơi 141 00:07:20,720 --> 00:07:23,477 mọi phần tử của mảng là chỉ số của nó? 142 00:07:23,477 --> 00:07:26,560 Vì vậy, ví dụ, chúng ta có một mảng của 100 số nguyên, và trong các yếu tố đầu tiên, 143 00:07:26,560 --> 00:07:27,790 chúng tôi muốn đặt 0. 144 00:07:27,790 --> 00:07:29,810 Trong các yếu tố thứ hai, chúng tôi muốn đặt 1. 145 00:07:29,810 --> 00:07:33,319 Trong các yếu tố thứ ba, chúng tôi muốn để đặt 2; và vv và vv. 146 00:07:33,319 --> 00:07:35,360 Đó là một thực sự tốt tại nhà tập thể dục để làm điều đó. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Ở đây, nó không giống như quá nhiều thay đổi. 149 00:07:40,220 --> 00:07:44,170 Nhưng chú ý rằng ở giữa dấu ngoặc vuông, thời gian này, 150 00:07:44,170 --> 00:07:45,830 Tôi đã thực sự bỏ qua các số. 151 00:07:45,830 --> 00:07:48,000 Nếu bạn đang sử dụng này rất instantiation đặc biệt 152 00:07:48,000 --> 00:07:50,380 Cú pháp để tạo ra một mảng, bạn thực sự làm không 153 00:07:50,380 --> 00:07:53,491 cần phải biết kích thước của mảng trước. 154 00:07:53,491 --> 00:07:55,740 Trình biên dịch là đủ thông minh để biết rằng bạn thực sự 155 00:07:55,740 --> 00:07:58,980 muốn một mảng có kích thước 3, bởi vì bạn đặt ba yếu tố 156 00:07:58,980 --> 00:08:00,640 bên phải dấu bằng. 157 00:08:00,640 --> 00:08:04,140 Nếu bạn đã đặt bốn, nó sẽ có đưa cho bạn một bảng sự thật của kích thước bốn; 158 00:08:04,140 --> 00:08:06,270 và vv và vv. 159 00:08:06,270 --> 00:08:09,380 >> Mảng được không riêng cho một đơn kích thước, mà là khá mát mẻ. 160 00:08:09,380 --> 00:08:12,000 Bạn thực sự có thể có nhiều specifiers phía như bạn muốn. 161 00:08:12,000 --> 00:08:16,470 Vì vậy, ví dụ, nếu bạn muốn tạo một hội đồng quản trị cho các trò chơi Battleship, trong đó, 162 00:08:16,470 --> 00:08:20,910 nếu bạn từng chơi, là một trò chơi mà là chơi với chốt trên 10 bởi 10 lưới, 163 00:08:20,910 --> 00:08:22,450 bạn có thể tạo ra một mảng như thế này. 164 00:08:22,450 --> 00:08:26,030 Bạn có thể nói Bool khung vuông 10 chiến hạm 165 00:08:26,030 --> 00:08:29,590 đóng khung vuông vuông khung 10 đóng khung vuông. 166 00:08:29,590 --> 00:08:32,710 >> Và sau đó, bạn có thể chọn để giải thích điều này trong tâm trí của bạn như là một 10 167 00:08:32,710 --> 00:08:35,576 10 lưới của các tế bào. 168 00:08:35,576 --> 00:08:37,409 Bây giờ, trên thực tế, trong bộ nhớ, nó thực sự chỉ 169 00:08:37,409 --> 00:08:42,440 vẫn là một yếu tố 100, đơn mảng chiều. 170 00:08:42,440 --> 00:08:46,070 Và điều này, trên thực tế, nếu bạn đi cho có ba kích thước hoặc bốn hoặc năm. 171 00:08:46,070 --> 00:08:49,420 Nó thực sự chỉ cần nhân tất cả các indices-- 172 00:08:49,420 --> 00:08:51,130 hoặc tất cả các kích thước specifiers-- với nhau, 173 00:08:51,130 --> 00:08:53,480 và bạn chỉ nhận được một chiều mảng có kích thước đó. 174 00:08:53,480 --> 00:08:57,090 >> Nhưng về mặt tổ chức và hình dung và nhận thức của con người, 175 00:08:57,090 --> 00:08:59,240 nó có thể được dễ dàng hơn rất nhiều để làm việc với một mạng lưới 176 00:08:59,240 --> 00:09:02,980 nếu bạn đang làm việc trên một trò chơi như Tic-tac-toe hay Battleship, 177 00:09:02,980 --> 00:09:05,179 hay đại loại thế. 178 00:09:05,179 --> 00:09:06,970 Đó là một khái niệm trừu tượng tuyệt vời, thay vì có 179 00:09:06,970 --> 00:09:09,340 để suy nghĩ về một Tic-tac-toe hội đồng quản trị như là một dòng chín 180 00:09:09,340 --> 00:09:13,810 vuông hoặc một ban hạm như là một dòng 100 ô vuông. 181 00:09:13,810 --> 00:09:16,010 A 10 10 lưới hoặc một ba bởi ba lưới có lẽ 182 00:09:16,010 --> 00:09:17,225 rất nhiều dễ dàng hơn để cảm nhận. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Bây giờ, một cái gì đó thực sự quan trọng về mảng. 185 00:09:22,280 --> 00:09:25,950 Chúng ta có thể đối xử với mỗi cá nhân phần tử của mảng như là một biến. 186 00:09:25,950 --> 00:09:27,700 Chúng tôi thấy rằng trước đó khi chúng ta đã gán 187 00:09:27,700 --> 00:09:32,240 giá trị True để Booleans nhất định hoặc thử nghiệm chúng trong điều kiện. 188 00:09:32,240 --> 00:09:35,960 Nhưng chúng tôi không thể xử lý toàn bộ mảng tự như các biến. 189 00:09:35,960 --> 00:09:41,760 Chúng ta không thể, ví dụ, phân công một mảng đến một mảng bằng cách sử dụng giao 190 00:09:41,760 --> 00:09:42,930 điều hành. 191 00:09:42,930 --> 00:09:44,640 Đó là không hợp pháp C. 192 00:09:44,640 --> 00:09:47,920 >> Nếu chúng ta muốn, cho example-- gì chúng ta sẽ được làm trong ví dụ mà 193 00:09:47,920 --> 00:09:50,200 sẽ được sao chép vào một mảng khác. 194 00:09:50,200 --> 00:09:53,810 Nếu chúng ta muốn làm điều đó, chúng tôi thực sự cần phải sử dụng một vòng lặp để sao chép trên 195 00:09:53,810 --> 00:09:56,550 mỗi phần tử cá nhân cùng một lúc. 196 00:09:56,550 --> 00:09:58,700 Tôi biết đó là một ít tốn thời gian. 197 00:09:58,700 --> 00:10:04,022 >> Vì vậy, ví dụ, nếu chúng ta có những cặp vợ chồng của dòng mã, sẽ làm việc này? 198 00:10:04,022 --> 00:10:05,230 Vâng, không, nó sẽ không, phải không? 199 00:10:05,230 --> 00:10:07,860 Bởi vì chúng tôi đang cố gắng giao thức ăn đến quầy bar. 200 00:10:07,860 --> 00:10:09,860 Đó không phải đi làm việc, bởi vì nó là một mảng, 201 00:10:09,860 --> 00:10:13,130 và chúng tôi vừa mô tả rằng đó không phải là pháp luật C. 202 00:10:13,130 --> 00:10:15,580 >> Thay vào đó, nếu chúng ta muốn sao chép nội dung của thực phẩm 203 00:10:15,580 --> 00:10:18,070 vào bar, đó là những gì chúng tôi đang cố gắng để làm ở đây, 204 00:10:18,070 --> 00:10:19,970 chúng ta sẽ cần một cú pháp như thế này. 205 00:10:19,970 --> 00:10:24,170 Chúng tôi có một vòng lặp mà đi từ J là bằng 0 lên đến 5, 206 00:10:24,170 --> 00:10:28,390 và chúng tôi tăng J trên mỗi lần lặp của các vòng lặp và các yếu tố chỉ định như thế. 207 00:10:28,390 --> 00:10:33,360 Điều này sẽ cho kết quả thanh cũng là một, hai, ba, bốn, năm, 208 00:10:33,360 --> 00:10:36,730 nhưng chúng ta phải làm điều đó này rất chậm tố-by-yếu tố cách, 209 00:10:36,730 --> 00:10:40,009 thay vì chỉ bằng cách sao chép toàn bộ mảng. 210 00:10:40,009 --> 00:10:42,050 Trong lập trình khác ngôn ngữ, những người hiện đại hơn, 211 00:10:42,050 --> 00:10:45,610 bạn có thể, trong thực tế, làm chỉ mà đơn giản bằng cú pháp. 212 00:10:45,610 --> 00:10:49,620 Nhưng C, không may, chúng tôi không được phép làm điều đó. 213 00:10:49,620 --> 00:10:52,026 >> Bây giờ, có một khác điều tôi muốn đề cập đến 214 00:10:52,026 --> 00:10:54,650 về mảng đó có thể là một chút chút khôn lanh lần đầu tiên bạn 215 00:10:54,650 --> 00:10:55,990 làm việc với họ. 216 00:10:55,990 --> 00:10:59,860 Chúng tôi đã thảo luận trong một video về phạm vi biến, 217 00:10:59,860 --> 00:11:04,940 mà hầu hết các biến trong C, khi bạn gọi chúng trong các chức năng, được truyền theo giá trị. 218 00:11:04,940 --> 00:11:08,620 Bạn có nhớ những gì nó có nghĩa là để vượt qua một cái gì đó bằng giá trị? 219 00:11:08,620 --> 00:11:12,570 Nó có nghĩa là chúng tôi đang làm cho một bản sao của biến đó được truyền vào. 220 00:11:12,570 --> 00:11:16,290 Các chức năng callee, chức năng đó là nhận được sự thay đổi, 221 00:11:16,290 --> 00:11:17,730 không có biến đó. 222 00:11:17,730 --> 00:11:20,850 Nó bị riêng của địa phương bản sao của nó để làm việc với. 223 00:11:20,850 --> 00:11:24,070 >> Mảng, tất nhiên, làm không tuân theo quy tắc này. 224 00:11:24,070 --> 00:11:27,600 Thay vào đó, những gì chúng ta gọi đây đi ngang qua tham khảo. 225 00:11:27,600 --> 00:11:31,360 Callee thực không nhận được mảng. 226 00:11:31,360 --> 00:11:34,207 Nó không nhận nó bản sao cục bộ của riêng của nó. 227 00:11:34,207 --> 00:11:36,040 Và nếu bạn nghĩ về nó, điều này làm cho tinh thần. 228 00:11:36,040 --> 00:11:39,750 Nếu mảng là thực sự lớn, nó phải mất quá nhiều thời gian và công sức 229 00:11:39,750 --> 00:11:44,470 để tạo một bản sao của một mảng của 100 hay 1.000 hay 10.000 phần tử, 230 00:11:44,470 --> 00:11:48,290 rằng nó không phải là giá trị nó cho một chức năng để nhận được một bản sao của nó, 231 00:11:48,290 --> 00:11:51,037 làm một số công việc với nó, và sau đó chỉ được thực hiện với các bản sao; 232 00:11:51,037 --> 00:11:53,120 nó không cần phải có nó treo xung quanh nữa. 233 00:11:53,120 --> 00:11:54,710 >> Bởi vì mảng là một số cồng kềnh và nặng nề, 234 00:11:54,710 --> 00:11:56,001 chúng ta chỉ cần vượt qua chúng bằng cách tham khảo. 235 00:11:56,001 --> 00:12:01,210 Chúng tôi chỉ tin tưởng rằng chức năng để, không phá vỡ bất cứ điều gì. 236 00:12:01,210 --> 00:12:03,010 Vì vậy, nó thực sự có được mảng. 237 00:12:03,010 --> 00:12:05,290 Nó không nhận được bản sao riêng của địa phương của nó. 238 00:12:05,290 --> 00:12:07,170 >> Vậy điều này có nghĩa là, sau đó, khi các callee 239 00:12:07,170 --> 00:12:08,970 thao túng các phần tử của mảng? 240 00:12:08,970 --> 00:12:10,780 Điều gì sẽ xảy ra? 241 00:12:10,780 --> 00:12:13,210 Để bây giờ, chúng tôi sẽ đánh bóng hơn lý do tại sao chính xác này 242 00:12:13,210 --> 00:12:15,320 xảy ra, tại sao mảng được thông qua tham khảo 243 00:12:15,320 --> 00:12:17,810 và mọi thứ khác là tham trị. 244 00:12:17,810 --> 00:12:20,470 Nhưng tôi hứa với các bạn, chúng tôi sẽ trở lại và cung cấp cho bạn câu trả lời 245 00:12:20,470 --> 00:12:23,750 đến điều này trong một đoạn video sau. 246 00:12:23,750 --> 00:12:28,110 >> Dưới đây là một bài tập nhiều hơn cho bạn trước khi chúng tôi quấn lên những thứ trên mảng. 247 00:12:28,110 --> 00:12:31,400 Các bó mã ở đây, đó là không đặc biệt tốt phong cách, 248 00:12:31,400 --> 00:12:33,400 chỉ là tôi sẽ làm báo trước đó. 249 00:12:33,400 --> 00:12:36,660 Không có bình luận tại đây, đó là hình thức khá xấu. 250 00:12:36,660 --> 00:12:39,750 Nhưng đó chỉ là vì tôi muốn được thể phù hợp với tất cả mọi thứ trên màn hình. 251 00:12:39,750 --> 00:12:44,360 >> Ở phía trên, bạn có thể thấy rằng tôi có hai tờ khai chức năng cho mảng tập 252 00:12:44,360 --> 00:12:45,820 và thiết lập int. 253 00:12:45,820 --> 00:12:49,680 Set mảng rõ ràng phải mất một mảng bốn số nguyên như là đầu vào của nó. 254 00:12:49,680 --> 00:12:52,767 Và set int dường như mất một số nguyên duy nhất là đầu vào của nó. 255 00:12:52,767 --> 00:12:54,350 Nhưng cả hai đều không có một đầu ra. 256 00:12:54,350 --> 00:12:57,689 Các đầu ra, sự trở lại gõ, của mỗi người là vô hiệu. 257 00:12:57,689 --> 00:12:59,480 Trong chính, chúng ta có một vài dòng mã. 258 00:12:59,480 --> 00:13:02,730 Chúng ta khai báo một biến số nguyên được gọi là A và gán cho nó giá trị 10. 259 00:13:02,730 --> 00:13:07,080 Chúng ta khai báo một mảng của bốn số nguyên gọi là B và chỉ định các yếu tố 0, 1, 260 00:13:07,080 --> 00:13:08,730 2, và 3, tương ứng. 261 00:13:08,730 --> 00:13:12,190 Sau đó, chúng tôi có một cuộc gọi để thiết lập int và một lời kêu gọi thiết lập mảng. 262 00:13:12,190 --> 00:13:15,910 Các định nghĩa của bộ mảng và tập hợp int là xuống dưới, ở phía dưới. 263 00:13:15,910 --> 00:13:17,640 >> Và như vậy, một lần nữa, tôi hỏi bạn câu hỏi. 264 00:13:17,640 --> 00:13:20,770 Những gì được in ra ở đây vào cuối của Main? 265 00:13:20,770 --> 00:13:23,020 Có một col bản in. Tôi in ra hai số nguyên. 266 00:13:23,020 --> 00:13:28,010 Tôi in ra các nội dung của A và các nội dung của khung vuông B 0. 267 00:13:28,010 --> 00:13:29,880 Tạm dừng video ở đây và hãy dành một phút. 268 00:13:29,880 --> 00:13:35,482 Bạn có thể tìm ra những gì này chức năng sẽ in ở cuối? 269 00:13:35,482 --> 00:13:38,190 Hy vọng rằng, nếu bạn gọi lại phân biệt giữa đi qua bởi giá trị 270 00:13:38,190 --> 00:13:41,680 và đi ngang qua tham khảo, đây Vấn đề không phải là quá khó khăn cho bạn. 271 00:13:41,680 --> 00:13:44,130 Và câu trả lời bạn sẽ đã tìm thấy là điều này. 272 00:13:44,130 --> 00:13:47,660 Nếu bạn không thực sự chắc chắn như tại sao đó là trường hợp, mất một giây, 273 00:13:47,660 --> 00:13:50,620 quay trở lại, xem lại những gì tôi đã được chỉ thảo luận về việc chuyển các mảng 274 00:13:50,620 --> 00:13:53,450 bằng cách tham khảo, so với đi qua biến khác theo giá trị, 275 00:13:53,450 --> 00:13:56,680 và hy vọng, nó sẽ làm cho ý nghĩa nhiều hơn một chút. 276 00:13:56,680 --> 00:13:59,760 >> Tôi Doug Lloyd, và điều này là CS50. 277 00:13:59,760 --> 00:14:01,467