1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> SPEAKER: Hãy viết một chương trình nhắc nhở người dùng cho hai chuỗi và 3 00:00:03,530 --> 00:00:07,170 sau đó báo cáo cho dù những chuỗi đều giống nhau hoặc không giống nhau. 4 00:00:07,170 --> 00:00:10,290 Tôi đã bắt đầu chúng tôi ra khỏi đây bằng gọi printf hai lần và kêu gọi 5 00:00:10,290 --> 00:00:14,520 GetString hai lần, lưu trữ trở lại giá trị trong s và t tương ứng. 6 00:00:14,520 --> 00:00:17,960 >> Bây giờ, bản năng của tôi để so sánh hai dây sẽ được sử dụng quen thuộc 7 00:00:17,960 --> 00:00:19,160 điều hành bình đẳng - 8 00:00:19,160 --> 00:00:22,070 nếu s bằng bằng t. 9 00:00:22,070 --> 00:00:28,120 Sau đó tôi sẽ đi trước và in ra "Bạn gõ điều tương tự! 10 00:00:28,120 --> 00:00:35,190 Khác, nếu đó là không đúng sự thật, tôi chỉ đơn giản là sẽ gõ printf ("Bạn gõ 11 00:00:35,190 --> 00:00:37,880 những thứ khác nhau! 12 00:00:37,880 --> 00:00:38,850 >> Khá đơn giản - 13 00:00:38,850 --> 00:00:41,820 Tôi chỉ đơn giản là so sánh chống lại t, và nếu họ bình đẳng, 14 00:00:41,820 --> 00:00:43,250 in ra càng nhiều. 15 00:00:43,250 --> 00:00:45,450 Hãy biên dịch và chạy chương trình này. 16 00:00:45,450 --> 00:00:51,950 Hãy so sánh 0. / So sánh 0, nói điều gì đó, xin chào, 17 00:00:51,950 --> 00:00:54,200 nói điều gì đó, xin chào. 18 00:00:54,200 --> 00:00:56,870 >> Thật không may, chương trình cho rằng tôi đã gõ những thứ khác nhau, mặc dù tôi 19 00:00:56,870 --> 00:00:59,530 đánh máy rõ ràng "hello" các cùng một cách cả hai lần. 20 00:00:59,530 --> 00:01:00,850 Bây giờ, tại sao có thể được? 21 00:01:00,850 --> 00:01:03,750 >> Vâng, nó quay ra rằng tất cả điều này thời gian, dây đã được nhiều hơn một chút 22 00:01:03,750 --> 00:01:06,780 phức tạp hơn một dãy ký tự bên dưới mui xe. 23 00:01:06,780 --> 00:01:11,450 Trong thực tế, một chuỗi là một con trỏ hoặc một địa chỉ, đặc biệt là địa chỉ 24 00:01:11,450 --> 00:01:14,640 của nhân vật đầu tiên trong đó chuỗi các ký tự. 25 00:01:14,640 --> 00:01:18,640 >> Và do đó, khi chúng ta so sánh chống lại t với dấu bằng bằng, chúng tôi 26 00:01:18,640 --> 00:01:23,200 thực sự yêu cầu, là địa chỉ này bằng bằng địa chỉ này? 27 00:01:23,200 --> 00:01:26,850 Và điều đó sẽ không phải là trường hợp nếu người dùng đã gõ trong hai khác nhau 28 00:01:26,850 --> 00:01:30,370 dây và chúng tôi đã được gọi là GetString hai lần để có được chúng, bởi vì bộ nhớ 29 00:01:30,370 --> 00:01:34,480 GetString sử dụng để lưu trữ các đầu tiên chuỗi có thể có mặt ở đây trong bộ nhớ RAM, nhưng 30 00:01:34,480 --> 00:01:37,120 bộ nhớ sử dụng GetString để lưu trữ chuỗi thứ hai đang diễn ra 31 00:01:37,120 --> 00:01:38,760 có mặt ở đây trong bộ nhớ RAM. 32 00:01:38,760 --> 00:01:42,380 Và tất nhiên, sau đó, hai khối bộ nhớ có địa chỉ khác nhau cho 33 00:01:42,380 --> 00:01:44,220 ký tự đầu tiên của họ. 34 00:01:44,220 --> 00:01:46,120 >> Như vậy là s tương đương bằng t? 35 00:01:46,120 --> 00:01:46,885 Vâng, không có. 36 00:01:46,885 --> 00:01:50,510 Nếu s và t được trỏ đến khác nhau khối của bộ nhớ, vì chúng sẽ là của 37 00:01:50,510 --> 00:01:54,140 gọi GetString hai lần, họ không phải là, trên thực tế, sẽ được như vậy. 38 00:01:54,140 --> 00:01:57,700 Vì vậy, nó có vẻ là trường hợp đó so sánh hai chuỗi trong trực quan 39 00:01:57,700 --> 00:02:01,050 cách mà chúng ta mong đợi, nhân vật nhân vật, chúng ta cần kỹ thuật khác 40 00:02:01,050 --> 00:02:02,300 hoàn toàn. 41 00:02:02,300 --> 00:02:03,902