1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> СПІКЕР: Давайте напишемо програму, яка запитує у користувача двох рядків і 3 00:00:03,530 --> 00:00:07,170 потім повідомляє, чи є ці рядки однакові або ще не однакові. 4 00:00:07,170 --> 00:00:10,290 Я вже почав нас тут називаючи Printf двічі і виклику 5 00:00:10,290 --> 00:00:14,520 GetString двічі, зберігання повернення Значення в с і т, відповідно. 6 00:00:14,520 --> 00:00:17,960 >> Тепер, мої інстинкти, щоб порівняти ці два Рядки буде використовувати знайомі 7 00:00:17,960 --> 00:00:19,160 Оператор рівності - 8 00:00:19,160 --> 00:00:22,070 якщо з одно дорівнює т. 9 00:00:22,070 --> 00:00:28,120 Тоді я буду йти вперед і друк з "Ви ввели те ж саме! 10 00:00:28,120 --> 00:00:35,190 В іншому випадку, якщо це не так, я просто збирається ввести Е ("Ви ввели 11 00:00:35,190 --> 00:00:37,880 різні речі! 12 00:00:37,880 --> 00:00:38,850 >> Досить просто - 13 00:00:38,850 --> 00:00:41,820 Я просто порівнюючи сек проти т, і якщо вони рівні, 14 00:00:41,820 --> 00:00:43,250 роздрукувавши стільки ж. 15 00:00:43,250 --> 00:00:45,450 Давайте скомпілювати і запустити цю програму. 16 00:00:45,450 --> 00:00:51,950 Зробити порівняти 0. / Порівняти 0, щось сказати, привіт, 17 00:00:51,950 --> 00:00:54,200 щось сказати, привіт. 18 00:00:54,200 --> 00:00:56,870 >> На жаль, програма думає, що я набрали різні речі, хоча я 19 00:00:56,870 --> 00:00:59,530 чітко набрав "привіт" Точно так само обидва рази. 20 00:00:59,530 --> 00:01:00,850 Тепер, чому це може бути? 21 00:01:00,850 --> 00:01:03,750 >> Ну, виходить, що все це Час, рядки, був трохи більш 22 00:01:03,750 --> 00:01:06,780 складніше, ніж послідовність символів під капотом. 23 00:01:06,780 --> 00:01:11,450 Насправді, це рядок є покажчиком або адреса, зокрема, адреса 24 00:01:11,450 --> 00:01:14,640 першого символу в тому, що послідовність символів. 25 00:01:14,640 --> 00:01:18,640 >> І тому, коли ми порівнюємо сек проти т з рівним знака рівності, ми 26 00:01:18,640 --> 00:01:23,200 насправді просять, це адреса дорівнює дорівнює цією адресою? 27 00:01:23,200 --> 00:01:26,850 І, що не збирається бути у випадку, якщо користувач ввів у двох різних 28 00:01:26,850 --> 00:01:30,370 Рядки і ми назвали GetString двічі щоб отримати їх, тому що пам'ять 29 00:01:30,370 --> 00:01:34,480 що GetString використовує для зберігання першим рядок може бути тут, в пам'яті, але 30 00:01:34,480 --> 00:01:37,120 пам'яті, що GetString використовує для зберігання другий рядок буде 31 00:01:37,120 --> 00:01:38,760 бути тут, в оперативній пам'яті. 32 00:01:38,760 --> 00:01:42,380 І звичайно, те, ці два шматки пам'яті мають різні адреси для 33 00:01:42,380 --> 00:01:44,220 їх найперші символи. 34 00:01:44,220 --> 00:01:46,120 >> Так з рівними дорівнює т? 35 00:01:46,120 --> 00:01:46,885 Ну, немає. 36 00:01:46,885 --> 00:01:50,510 Якщо с і т вказують на різні шматки пам'яті, як вони були б на 37 00:01:50,510 --> 00:01:54,140 називаючи GetString двічі, це не так, насправді, буде те ж саме. 38 00:01:54,140 --> 00:01:57,700 Так що, схоже, має місце, що в порівняти два рядки в інтуїтивний 39 00:01:57,700 --> 00:02:01,050 спосіб, яким ми очікуємо, характер для характер, нам потрібен інший метод 40 00:02:01,050 --> 00:02:02,300 в цілому. 41 00:02:02,300 --> 00:02:03,902