Modyfikowanie zmiennych za pomocą wskaźników
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 27 z 63.
Teraz możesz wykorzystać prawdziwą moc wskaźników: modyfikowanie oryginalnej zmiennej za pomocą funkcji. Gdy przekazujesz wskaźnik do funkcji, funkcja może użyć operatora dereferencji, aby zmienić wartość przechowywaną pod tym adresem pamięci.
Wewnątrz funkcji dereferencjonujesz wskaźnik za pomocą operatora *, aby uzyskać dostęp do wartości oryginalnej zmiennej i ją zmodyfikować. Ta technika nazywa się przekazywaniem przez referencję, ponieważ przekazujesz referencję do lokalizacji zmiennej w pamięci.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Użyj dereferencji, aby zmodyfikować pierwotną wartość
}
int main() {
int x = 5;
doubleValue(&x); // Przekaż adres x
// x ma teraz wartość 10!
return 0;
}Kluczowe jest użycie *ptr po lewej stronie przypisania, aby zmienić wartość pod adresem pamięci przechowywanym przez wskaźnik. Dzięki temu funkcje mogą trwale zmieniać zmienne z funkcji wywołującej, co otwiera potężne możliwości programowania, których przekazywanie przez wartość po prostu nie zapewnia.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje modyfikowanie zmiennych za pomocą wskaźników, tworząc funkcję potrajającą wartość liczby całkowitej.
Twój program powinien:
- Utworzyć funkcję o nazwie
tripleValue, która przyjmuje wskaźnik do liczby całkowitej jako parametr - Wewnątrz funkcji
tripleValueużyć operatora dereferencji, aby pomnożyć przez 3 wartość znajdującą się pod danym adresem pamięci - Wewnątrz funkcji
tripleValuewypisać nową wartość w formacie:Value tripled to: [value] - W funkcji
mainzadeklarować zmienną całkowitą o nazwienumberi zainicjalizować ją wartością 8 - Wypisać pierwotną wartość w formacie:
Original value: [value] - Wywołać funkcję
tripleValuei przekazać jej adres zmiennejnumberza pomocą operatora pobrania adresu - Po wywołaniu funkcji wypisać końcową wartość zmiennej
numberw formacie:Final value: [value]
Wynik powinien pokazywać, że funkcja skutecznie modyfikuje pierwotną zmienną za pomocą wskaźnika:
Original value: 8
Value tripled to: 24
Final value: 24To wyzwanie pokazuje, jak potężne jest przekazywanie przez referencję za pomocą wskaźników: funkcja może trwale zmodyfikować pierwotną zmienną, dereferując wskaźnik i zmieniając wartość w danej lokalizacji pamięci.
Spróbuj swoich sił
#include <stdio.h>
// TODO: Napisz tutaj funkcję tripleValue
int main() {
// TODO: Napisz tutaj swój kod
// Zadeklaruj i zainicjalizuj zmienną number
// Wypisz wartość początkową
// Wywołaj funkcję tripleValue
// Wypisz wartość końcową
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