Przekazywanie wskaźników do funkcji
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 26 z 63.
Teraz, gdy znasz ograniczenia przekazywania przez wartość, przyjrzyjmy się, jak przekazywanie wskaźników do funkcji rozwiązuje ten problem. Zamiast przekazywać kopię wartości zmiennej, możesz przekazać funkcji adres pamięci tej zmiennej.
Gdy przekazujesz wskaźnik do funkcji, funkcja uzyskuje dostęp do miejsca w pamięci, w którym znajduje się oryginalna zmienna. Oznacza to, że funkcja może pracować bezpośrednio na oryginalnych danych, a nie tylko na ich kopii.
void processValue(int *ptr) {
// ptr przechowuje adres oryginalnej zmiennej
// Funkcja może teraz uzyskać dostęp do tego miejsca w pamięci
}
int main() {
int x = 10;
processValue(&x); // Przekaż adres x
return 0;
}Zwróć uwagę, że podczas wywoływania funkcji używamy operatora pobrania adresu &, aby przekazać adres zmiennej. Parametr funkcji jest zadeklarowany jako int *ptr, co oznacza, że funkcja oczekuje wskaźnika na liczbę całkowitą. Ta podstawowa technika otwiera potężne możliwości interakcji funkcji z danymi Twojego programu.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje przekazywanie wskaźników do funkcji. Twój program powinien:
- Utworzyć funkcję o nazwie
displayValue, która przyjmuje wskaźnik do liczby całkowitej jako parametr - Wewnątrz funkcji
displayValueużyć operatora dereferencji, aby uzyskać dostęp do wartości pod adresem pamięci i ją wypisać w formacie:Value at address: [value] - W funkcji
mainzadeklarować zmienną całkowitą o nazwienumberi zainicjalizować ją wartością 42 - Wypisać pierwotną wartość w formacie:
Original value: [value] - Wywołać funkcję
displayValuei przekazać adres zmiennejnumberza pomocą operatora pobrania adresu - Po wywołaniu funkcji wypisać komunikat potwierdzający:
Function call completed
Wynik powinien pokazać, że funkcja pomyślnie otrzymuje adres pamięci pierwotnej zmiennej i uzyskuje do niego dostęp:
Original value: 42
Value at address: 42
Function call completedTo wyzwanie wprowadza podstawową koncepcję przekazywania wskaźników do funkcji, dzięki czemu funkcja może uzyskać dostęp do lokalizacji pamięci pierwotnej zmiennej, zamiast pracować z jej kopią.
Spróbuj swoich sił
#include <stdio.h>
// TODO: Napisz tutaj swoją funkcję displayValue
int main() {
// TODO: Napisz tutaj swój kod
// 1. Zadeklaruj i zainicjalizuj zmienną number
// 2. Wyświetl pierwotną wartość
// 3. Wywołaj funkcję displayValue
// 4. Wyświetl komunikat o zakończeniu
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