Witam ponownie. Mamy dla Ciebie kolejne wyzwanie.
W tym wyzwaniu chcę, żebyś nauczył się wszystkiego o arytmetyce wskaźników.
Pamiętaj, arytmetyka wskaźników to naprawdę zgrabna koncepcja.
To koncepcja notacyjna.
Ale to naprawdę pokazuje, jak tablice
są powiązane ze wskaźnikami. Możesz bardzo łatwo przechodzić przez tablicę
dzięki bardzo prostej składni, która zmniejsza liczbę linii kodu i jest to
naprawdę zgrabna koncepcja.
Więc nauczysz się wszystkiego o arytmetyce wskaźników.
Dowiemy się również więcej o stałym modyfikatorze.
Dlatego w tym wyzwaniu napiszesz program,
który przetestuje twoje rozumienie arytmetyki wskaźników i modyfikatora const.
O obu tych pojęciach dowiedzieliśmy się na poprzednich wykładach.
Więc chcę, żebyś napisał funkcję, która oblicza długość łańcucha.
Wymagania są takie, że funkcja powinna przyjmować jako parametr stały wskaźnik char.
Stały wskaźnik typu char oznacza, że nie możesz zmienić wartości tego,
na co wskazuje wskaźnik, i
nie zrobisz tego z długością.
Funkcja może określić długość łańcucha tylko za pomocą arytmetyki wskaźników.
Nie chcę, abyś używał funkcji str length. Chcę, żebyś użył arytmetyki wskaźnikowej.
A sposób, w jaki wyobrażam sobie implementację
tej funkcji, polega na uzyskaniu adresu końca wskaźnika.
W zasadzie byłaby to długość wskaźnika.
Ale sposób, w jaki możesz uzyskać adres ostatniego łańcucha i wskaźnik, jest taki, że
możesz napisać pętlę while.
Pętla while może przejść do znaku zerowego terminatora.
Pamiętaj też, że znak terminatora null jest
reprezentowany jako int.
Zatem terminator zerowy jest w rzeczywistości zerem. Możesz więc napisać
pętlę while, a cała pętla while musi zawierać
w swoim warunku dereferencję wskaźnika.
Ponieważ jeśli wartość wskaźnika referencyjnego d wynosi zero, wyskocz z pętli
i będzie to terminator zerowy.
Więc chcę, żebyś przejrzał cały
wskaźnik.
A kiedy przez
to przechodzisz, zwiększaj ten wskaźnik.
Więc teraz masz wskaźnik, który wskazuje na koniec łańcucha.
Następnie, aby właściwie obliczyć długość, wystarczy
odjąć dwa wskaźniki.
Przekazany wskaźnik, który jest początkiem
ciągu, a następnie
wskaźnik utworzony w funkcji, który wskazuje koniec ciągu.
Jeśli odejmiesz koniec wskaźnika łańcucha od początku
punktu ciągu, otrzymasz długość łańcucha.
Będziesz więc wykonywał arytmetykę wskaźników, zwiększając wskaźnik
jeden po drugim, aby dostać się do adresu końcowego, a
następnie będziesz używać arytmetyki punktowej do odejmowania każdego wskaźnika.
Jest to prawdopodobnie najbardziej poprawny sposób użycia
arytmetyki punktowej do odejmowania. Zwykle nie dodajesz dwóch wskaźników,
ponieważ po co miałbyś dodawać dwa adresy.
Możesz odjąć dwa adresy, aby określić, jak daleko znajdują się dwa
elementy w tablicy, to
miałoby sens, ale dodanie nie. Aby powtórzyć, funkcja może
określić długość łańcucha tylko za pomocą arytmetyki punktowej.
Utwórz lokalny wskaźnik w swojej
funkcji, zwiększaj ten wskaźnik za każdym razem, aby dotrzeć do
końca, aż zobaczysz zerowy terminator, prostą pętlę while.
A kiedy już masz adres końcowy, masz już
adres początkowy, odejmij te dwa wskaźniki, które dadzą ci długość.
Powinieneś zwrócić tę długość jako int z funkcji.
Następnie możesz po prostu wydrukować samą rzeczywistą długość.
Więc to zadanie zapoznaje Cię z arytmetyką punktową, a
także z tym, jak używać stałego modyfikatora, ponieważ nie chcesz zmieniać
rzeczywistej wartości, na którą wskazuje
i odejmować również dwa wskaźniki, a także używać pętli while,
na której możesz spojrzeć wartość wskaźnika do
określenia znaku null. Powodzenia.
W następnym wykładzie przedstawię rozwiązanie. Dziękuję Ci.