Wertübergabe (Pass-by-Value)
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 25 von 63.
Wenn Sie eine Variable an eine Funktion in C übergeben, erhält die Funktion eine Kopie des Wertes dieser Variablen, nicht die Variable selbst. Dieses grundlegende Konzept wird als pass-by-value bezeichnet.
Folgendes passiert: Wenn Sie eine Variable x mit dem Wert 10 haben und diese an eine Funktion übergeben, erhält die Funktion ihre eigene separate Kopie dieses Wertes. Alle Änderungen, die die Funktion an dieser Kopie vornimmt, wirken sich nicht auf die ursprüngliche Variable in der aufrufenden Funktion aus.
void tryToChange(int num) {
num = 99; // Dies ändert nur die Kopie
}
int main() {
int x = 10;
tryToChange(x);
// x ist immer noch 10, nicht 99
return 0;
}Dieses Verhalten schützt Ihre ursprünglichen Daten davor, versehentlich durch Funktionen geändert zu werden. Es bedeutet jedoch auch, dass Pass-by-Value nicht funktioniert, wenn Sie möchten, dass eine Funktion den Wert einer Variablen tatsächlich ändert. Das Verständnis dieser Einschränkung ist entscheidend, wenn Sie fortfahren, etwas über Pointer zu lernen und wie diese dieses Problem lösen können.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das das Konzept der Wertübergabe (Pass-by-Value) demonstriert, indem es versucht, eine Variable innerhalb einer Funktion zu ändern und beobachtet, dass die ursprüngliche Variable unverändert bleibt.
Ihr Programm sollte:
- Eine Funktion namens
tryToModifyerstellen, die einen Integer-Parameter namensnumberentgegennimmt - Innerhalb der Funktion
tryToModifyden Wert 50 zum Parameternumberaddieren - Innerhalb der Funktion
tryToModifyden geänderten Wert im FormatInside function: [value]ausgeben - In der
main-Funktion eine Integer-Variable namensoriginaldeklarieren und sie mit dem Wert 25 initialisieren - Den ursprünglichen Wert vor dem Funktionsaufruf im Format
Before function call: [value]ausgeben - Die Funktion
tryToModifyaufrufen und die Variableoriginalals Argument übergeben - Nach dem Funktionsaufruf den Wert von
originalerneut im FormatAfter function call: [value]ausgeben
Ihre Ausgabe sollte zeigen, dass der Wert der ursprünglichen Variable trotz der Änderung innerhalb der Funktion unverändert bleibt:
Before function call: 25
Inside function: 75
After function call: 25Diese Herausforderung demonstriert das grundlegende Konzept der Wertübergabe (Pass-by-Value) in C, bei dem Funktionen Kopien von Variablen erhalten und nicht die Variablen selbst. Alle am Parameter innerhalb der Funktion vorgenommenen Änderungen wirken sich nicht auf die ursprüngliche Variable in der aufrufenden Funktion aus.
Spickzettel
In C erhalten Funktionen eine Kopie von Variablenwerten, nicht die Variablen selbst. Dies wird als Wertübergabe (pass-by-value) bezeichnet.
Wenn Sie eine Variable an eine Funktion übergeben, wirken sich alle innerhalb der Funktion vorgenommenen Änderungen nur auf die Kopie aus, während die ursprüngliche Variable unverändert bleibt:
void tryToChange(int num) {
num = 99; // Dies ändert nur die Kopie
}
int main() {
int x = 10;
tryToChange(x);
// x ist immer noch 10, nicht 99
return 0;
}Dieses Verhalten schützt Ihre ursprünglichen Daten davor, versehentlich durch Funktionen geändert zu werden, bedeutet aber auch, dass die Wertübergabe nicht funktioniert, wenn Sie möchten, dass eine Funktion den Wert einer Variablen tatsächlich ändert.
Probier es selbst
#include <stdio.h>
// TODO: Schreiben Sie hier Ihre tryToModify-Funktion hier
int main() {
// TODO: Schreiben Sie hier Ihren Code
// 1. Deklarieren und initialisieren Sie die ursprüngliche Variable
// 2. Geben Sie den Wert vor dem Funktionsaufruf aus
// 3. Rufen Sie die tryToModify-Funktion auf
// 4. Geben Sie den Wert nach dem Funktionsaufruf aus
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen