Menu
CoddyTech

Porównywanie wskaźników

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 10 z 63.

Dowiedziałeś się, jak poruszać się po tablicach za pomocą arytmetyki wskaźników. Teraz odkryjesz, że wskaźniki można również porównywać za pomocą tych samych operatorów relacyjnych, których używasz ze zwykłymi zmiennymi: ==, !=, < i >.

Porównując dwa wskaźniki, porównujesz ich adresy w pamięci. Jest to szczególnie przydatne, gdy oba wskaźniki wskazują elementy tej samej tablicy, ponieważ pozwala określić ich względne położenie w pamięci.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Wskazuje na pierwszy element
int *end = numbers + 4;      // Wskazuje na ostatni element

if (start < end) {
    printf("start comes before end in memory");
}

Porównywanie wskaźników staje się szczególnie przydatne w warunkach pętli. Zamiast używać zmiennej licznika, możesz porównać bieżącą pozycję wskaźnika z docelowym wskaźnikiem, aby określić, kiedy pętla powinna się zatrzymać. Dzięki temu powstaje elegancki i wydajny kod do przechodzenia przez tablicę.

Kluczowa obserwacja jest taka, że ptr1 < ptr2 informuje, że ptr1 wskazuje element, który znajduje się wcześniej w tablicy niż element, na który wskazuje ptr2. Ta zależność sprawia, że porównywanie wskaźników doskonale nadaje się do sterowania pętlami przetwarzającymi tablice sekwencyjnie.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który używa porównywania wskaźników do przechodzenia przez tablicę i znajdowania elementów z określonego zakresu. Twój program powinien:

  1. Zadeklarować tablicę liczb całkowitych o nazwie scores z 8 elementami i zainicjalizować ją wartościami {45, 78, 92, 63, 87, 34, 91, 56}
  2. Zadeklarować dwa wskaźniki na liczby całkowite: start_ptr i end_ptr
  3. Ustawić start_ptr tak, aby wskazywał na pierwszy element tablicy
  4. Ustawić end_ptr tak, aby wskazywał na ostatni element tablicy, używając arytmetyki wskaźników
  5. Zadeklarować wskaźnik o nazwie current_ptr i zainicjalizować go tak, aby wskazywał na pierwszy element
  6. Użyć pętli while z porównywaniem wskaźników (current_ptr <= end_ptr) do przejścia przez tablicę
  7. Wewnątrz pętli:
    • Sprawdzić, czy bieżąca wartość mieści się w przedziale od 60 do 90 (włącznie)
    • Jeśli wartość mieści się w zakresie, wypisać dokładnie Value [value] is in range
    • Jeśli wartość nie mieści się w zakresie, wypisać dokładnie Value [value] is out of range
    • Zwiększyć current_ptr, aby przejść do następnego elementu
  8. Po zakończeniu pętli użyć porównywania wskaźników, aby sprawdzić, czy current_ptr znajduje się już za końcem tablicy, sprawdzając, czy current_ptr > end_ptr
  9. Jeśli warunek jest prawdziwy, wypisać dokładnie Traversal complete

Wynik powinien wyświetlać rezultaty w następującym formacie:

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

To wyzwanie sprawdza Twoje rozumienie operatorów porównywania wskaźników w warunkach pętli, używania arytmetyki wskaźników do ustawiania wskaźników granicznych oraz tego, jak porównywanie wskaźników może sterować przechodzeniem przez tablicę w bardziej elegancki sposób niż tradycyjne pętle oparte na liczniku.

Spróbuj swoich sił

#include <stdio.h>

int main() {
    // TODO: Napisz swój kod poniżej
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online