1 00:00:00,000 --> 00:00:00,620 2 00:00:00,620 --> 00:00:03,140 >> DAVID J. MALAN: Låt oss skriva ett program som uppmanar användaren efter en sträng och 3 00:00:03,140 --> 00:00:07,210 sedan fortsätta att skriva ut den strängen tecken för tecken en per rad. 4 00:00:07,210 --> 00:00:10,570 Nu i det förflutna, skulle vi ha gjort det förmodligen med klammer notation, 5 00:00:10,570 --> 00:00:13,680 effektivt behandla en sträng är en grupp av tecken. 6 00:00:13,680 --> 00:00:17,200 >> Men den här gången, låt oss istället behandla en sträng för vad det egentligen är, en 7 00:00:17,200 --> 00:00:18,770 pekare eller en adress. 8 00:00:18,770 --> 00:00:22,420 Specifikt, adressen till en karaktär, verkligen adressen till 9 00:00:22,420 --> 00:00:25,740 första tecknet i en sekvens av tecken som vi kollektivt vet 10 00:00:25,740 --> 00:00:26,860 som en sträng. 11 00:00:26,860 --> 00:00:30,740 >> Låt oss först förklara en sträng för vad det egentligen är, char *. 12 00:00:30,740 --> 00:00:31,770 Och vi kallar det är. 13 00:00:31,770 --> 00:00:34,670 Och sedan tilldela den avkastningen värdet av get sträng. 14 00:00:34,670 --> 00:00:36,380 >> Låt oss nästa göra en del felkontroll. 15 00:00:36,380 --> 00:00:42,920 Om s är null, låt oss genast tillbaka så att vi inte av misstag 16 00:00:42,920 --> 00:00:45,630 dereference att null-pekare. 17 00:00:45,630 --> 00:00:49,750 >> Nästa, låt oss iterera över tecken i s enligt följande. 18 00:00:49,750 --> 00:00:52,390 För int, jag blir 0. 19 00:00:52,390 --> 00:00:55,890 n är lika med stränglängd s. 20 00:00:55,890 --> 00:00:58,050 Gör detta så länge som jag är mindre än n. 21 00:00:58,050 --> 00:01:00,690 Och på varje iteration, öka i.. 22 00:01:00,690 --> 00:01:02,710 >> Och vad vill vi att göra på varje iteration? 23 00:01:02,710 --> 00:01:06,180 Låt oss nu skriva ut på varje iteration ett enda tecken 24 00:01:06,180 --> 00:01:07,910 följt av en ny rad. 25 00:01:07,910 --> 00:01:10,010 Nå, vilken karaktär gör Vi vill skriva ut? 26 00:01:10,010 --> 00:01:16,850 Jag föreslår att vi går till den adress som är lika med summan av s plus jag. 27 00:01:16,850 --> 00:01:18,390 >> Nu, varför det uttrycket? 28 00:01:18,390 --> 00:01:22,130 Tja, minns att lagras i s är det adressen för det första tecknet 29 00:01:22,130 --> 00:01:23,490 i vår sträng, s. 30 00:01:23,490 --> 00:01:27,470 Under tiden jag håller på att ökas på varje iteration så att den startar vid 0, 31 00:01:27,470 --> 00:01:29,590 sedan går till 1, går sedan till 2. 32 00:01:29,590 --> 00:01:33,870 >> Så med andra ord, s plus jag effektivt representerar adressen till 33 00:01:33,870 --> 00:01:35,990 den i: te tecknet i talet. 34 00:01:35,990 --> 00:01:40,830 Så om vi går till den adressen med hjälp av den * operatör, kommer vi att gå till 35 00:01:40,830 --> 00:01:42,650 i: te tecknet i strängen. 36 00:01:42,650 --> 00:01:45,700 Och det är det värde som ska ersätta vår placeholder, 37 00:01:45,700 --> 00:01:46,840 procent C. 38 00:01:46,840 --> 00:01:47,840 >> Nu bekräftar så mycket. 39 00:01:47,840 --> 00:01:51,720 Låt oss spara, sammanställa och köra programmet. 40 00:01:51,720 --> 00:01:55,990 Gör pekare, dot slash pekare. 41 00:01:55,990 --> 00:01:58,780 Och nu ska jag ge det en sträng som hej. 42 00:01:58,780 --> 00:01:59,600 Enter. 43 00:01:59,600 --> 00:02:03,770 >> Och faktiskt, jag ser H-E-L-L-O, med varje röding på en egen rad. 44 00:02:03,770 --> 00:02:05,410