Menu
Coddy logo textTech

Przekazywanie tablic do funkcji

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

Gdy przekazujesz tablicę do funkcji w C, za kulisami dzieje się coś interesującego. Sama tablica nie jest w rzeczywistości kopiowana do funkcji. Zamiast tego przekazywany jest wskaźnik do pierwszego elementu tablicy.

Oznacza to, że gdy zapisujesz parametr funkcji, taki jak int arr[] lub int *arr, oba zapisy są równoważne — oba reprezentują wskaźnik do pierwszego elementu tablicy. Funkcja otrzymuje adres pamięci, pod którym zaczyna się tablica, co daje jej bezpośredni dostęp do danych oryginalnej tablicy.

void printArray(int arr[], int size) {
    // arr jest w rzeczywistości wskaźnikiem do pierwszego elementu
    // Funkcja może uzyskać dostęp do oryginalnej tablicy i ją modyfikować
}

Ponieważ funkcja działa na lokalizacji pamięci oryginalnej tablicy, a nie na jej kopii, wszelkie zmiany wprowadzone wewnątrz funkcji wpłyną na oryginalną tablicę. Różni się to od przekazywania pojedynczych zmiennych, które tworzy ich kopie.

Zauważysz też, że musisz przekazać rozmiar tablicy jako osobny parametr, ponieważ funkcja nie może określić jej długości na podstawie samego wskaźnika.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje przekazywanie tablic do funkcji, tworząc funkcję przetwarzającą dane dotyczące temperatury. Twój program powinien:

  1. Utworzyć funkcję o nazwie analyzeTemperatures, która przyjmuje tablicę liczb całkowitych i jej rozmiar jako parametry
  2. Wewnątrz funkcji analyzeTemperatures obliczyć i wyświetlić średnią temperaturę z dokładnością do 1 miejsca po przecinku, w formacie: Average temperature: [value]
  3. Wewnątrz funkcji analyzeTemperatures znaleźć i wyświetlić najwyższą temperaturę w formacie: Highest temperature: [value]
  4. Wewnątrz funkcji analyzeTemperatures policzyć, ile temperatur przekracza 25 stopni, i wyświetlić tę liczbę w formacie: Days above 25 degrees: [count]
  5. W funkcji main odczytać liczbę całkowitą n, która oznacza liczbę odczytów temperatury
  6. Odczytać n wartości temperatury i zapisać je w tablicy liczb całkowitych
  7. Wywołać funkcję analyzeTemperatures, przekazując jej tablicę i jej rozmiar

Twój program powinien przetworzyć dane dotyczące temperatury i wyświetlić wyniki analizy. Na przykład, jeśli dane wejściowe to:

5
20 28 15 32 26

Oczekiwane dane wyjściowe:

Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3

To wyzwanie pokazuje, jak tablice są przekazywane do funkcji jako wskaźniki na ich pierwszy element, dzięki czemu funkcja może uzyskiwać dostęp do wszystkich elementów oryginalnej tablicy i je przetwarzać bez tworzenia kopii.

Spróbuj swoich sił

#include <stdio.h>

// TODO: Utwórz tutaj funkcję analyzeTemperatures

int main() {
    // Wczytaj liczbę pomiarów temperatury
    int n;
    scanf("%d", &n);
    
    // Zadeklaruj tablicę do przechowywania temperatur
    int temperatures[n];
    
    // Wczytaj wartości temperatur
    for (int i = 0; i < n; i++) {
        scanf("%d", &temperatures[i]);
    }
    
    // TODO: Wywołaj tutaj funkcję analyzeTemperatures
    
    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