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.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje przekazywanie tablic do funkcji, tworząc funkcję przetwarzającą dane dotyczące temperatury. Twój program powinien:
- Utworzyć funkcję o nazwie
analyzeTemperatures, która przyjmuje tablicę liczb całkowitych i jej rozmiar jako parametry - Wewnątrz funkcji
analyzeTemperaturesobliczyć i wyświetlić średnią temperaturę z dokładnością do 1 miejsca po przecinku, w formacie:Average temperature: [value] - Wewnątrz funkcji
analyzeTemperaturesznaleźć i wyświetlić najwyższą temperaturę w formacie:Highest temperature: [value] - Wewnątrz funkcji
analyzeTemperaturespoliczyć, ile temperatur przekracza 25 stopni, i wyświetlić tę liczbę w formacie:Days above 25 degrees: [count] - W funkcji
mainodczytać liczbę całkowitąn, która oznacza liczbę odczytów temperatury - Odczytać
nwartości temperatury i zapisać je w tablicy liczb całkowitych - 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 26Oczekiwane dane wyjściowe:
Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3To 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;
}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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online