Przekazywanie przez wartość
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 25 z 63.
Gdy przekazujesz zmienną do funkcji w C, funkcja otrzymuje kopię wartości tej zmiennej, a nie samą zmienną. Ta podstawowa koncepcja nazywa się przekazywaniem przez wartość.
Oto, co się dzieje: jeśli masz zmienną x o wartości 10 i przekazujesz ją do funkcji, funkcja otrzymuje własną, oddzielną kopię tej wartości. Żadne zmiany wprowadzane przez funkcję w tej kopii nie wpływają na pierwotną zmienną w funkcji wywołującej.
void tryToChange(int num) {
num = 99; // To zmienia tylko kopię
}
int main() {
int x = 10;
tryToChange(x);
// x nadal ma wartość 10, a nie 99
return 0;
}To zachowanie chroni Twoje oryginalne dane przed przypadkową modyfikacją przez funkcje. Oznacza to jednak również, że jeśli chcesz, aby funkcja rzeczywiście zmieniła wartość zmiennej, przekazywanie przez wartość nie zadziała. Zrozumienie tego ograniczenia jest kluczowe, gdy przejdziesz do nauki wskaźników i dowiesz się, jak mogą rozwiązać ten problem.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje koncepcję przekazywania przez wartość, podejmując próbę zmodyfikowania zmiennej wewnątrz funkcji i sprawdzając, czy pierwotna zmienna pozostaje niezmieniona.
Twój program powinien:
- Utworzyć funkcję o nazwie
tryToModify, która przyjmuje parametr całkowity o nazwienumber - Wewnątrz funkcji
tryToModifydodać 50 do parametrunumber - Wewnątrz funkcji
tryToModifywypisać zmodyfikowaną wartość w formacie:Inside function: [value] - W funkcji
mainzadeklarować zmienną całkowitą o nazwieoriginali zainicjalizować ją wartością 25 - Wypisać pierwotną wartość przed wywołaniem funkcji w formacie:
Before function call: [value] - Wywołać funkcję
tryToModifyi przekazać zmiennąoriginaljako argument - Po wywołaniu funkcji ponownie wypisać wartość
originalw formacie:After function call: [value]
Wynik powinien pokazywać, że wartość pierwotnej zmiennej pozostaje niezmieniona pomimo modyfikacji dokonanej wewnątrz funkcji:
Before function call: 25
Inside function: 75
After function call: 25To wyzwanie demonstruje podstawową koncepcję przekazywania przez wartość w C, gdzie funkcje otrzymują kopie zmiennych, a nie same zmienne. Wszelkie modyfikacje parametru dokonane wewnątrz funkcji nie wpływają na pierwotną zmienną w funkcji wywołującej.
Spróbuj swoich sił
#include <stdio.h>
// TODO: Napisz tutaj funkcję tryToModify
int main() {
// TODO: Napisz tutaj swój kod
// 1. Zadeklaruj i zainicjalizuj oryginalną zmienną
// 2. Wypisz wartość przed wywołaniem funkcji
// 3. Wywołaj funkcję tryToModify
// 4. Wypisz wartość po wywołaniu funkcji
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