Podsumowanie: przechodzenie po tablicy za pomocą wskaźników
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 11 z 63.
Wyzwanie
ŁatwyNapisz program w C, który implementuje funkcję obliczającą sumę wszystkich elementów tablicy liczb całkowitych przy użyciu arytmetyki wskaźników i równoważności tablicy i wskaźnika. Twój program powinien:
- Utworzyć funkcję o nazwie
calculateSum, która przyjmuje dwa parametry:- Wskaźnik na liczbę całkowitą (
int *arr) reprezentujący tablicę - Liczbę całkowitą (
size) reprezentującą liczbę elementów w tablicy
- Wskaźnik na liczbę całkowitą (
- Wewnątrz funkcji
calculateSum:- Zainicjalizować zmienną
sumwartością 0 - Utworzyć zmienną wskaźnikową
ptri ustawić ją tak, aby wskazywała początek tablicy - Użyć pętli do przejścia przez tablicę z wykorzystaniem arytmetyki wskaźników
- W każdej iteracji dodać do
sumwartość, na którą wskazujeptr - Zwiększyć wskaźnik, aby przejść do następnego elementu
- Zwrócić obliczoną sumę
- Zainicjalizować zmienną
- W funkcji
main:- Wczytać liczbę całkowitą
nreprezentującą rozmiar tablicy - Zadeklarować tablicę liczb całkowitych o rozmiarze
n - Wczytać z wejścia
nliczb całkowitych, aby wypełnić tablicę - Wywołać funkcję
calculateSum, przekazując jej tablicę i jej rozmiar - Wypisać wynik w formacie: "Sum: [value]"
- Wczytać liczbę całkowitą
Funkcja musi używać arytmetyki wskaźników do przechodzenia przez tablicę — nie używaj notacji indeksowania tablicy, takiej jak arr[i]. Zamiast tego używaj dereferencji wskaźnika i operacji zwiększania, aby uzyskiwać dostęp do elementów tablicy.
Na przykład, jeśli dane wejściowe to:
5
10 20 30 40 50Oczekiwany wynik:
Sum: 150To wyzwanie sprawdza Twoje rozumienie tego, jak funkcje mogą przyjmować tablice jako parametry wskaźnikowe, jak używać arytmetyki wskaźników do wydajnego przechodzenia przez tablice oraz jak nazwy tablic są automatycznie konwertowane na wskaźniki podczas przekazywania ich do funkcji.
Spróbuj swoich sił
#include <stdio.h>
// TODO: Napisz tutaj swoją funkcję calculateSum
int main() {
int n;
scanf("%d", &n);
int arr[n];
// Wczytaj elementy tablicy
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: Wywołaj funkcję calculateSum i zapisz wynik
// TODO: Wypisz wynik w formacie "Sum: [value]"
return 0;
}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