Variablen über Zeiger ändern
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 27 von 63.
Jetzt kannst du die wahre Leistungsfähigkeit von Zeigern nutzen: die ursprüngliche Variable durch eine Funktion ändern. Wenn du einen Zeiger an eine Funktion übergibst, kann die Funktion den Dereferenzierungsoperator verwenden, um den an dieser Speicheradresse gespeicherten Wert zu ändern.
Innerhalb der Funktion dereferenzierst du den Zeiger mit dem Operator *, um auf den Wert der ursprünglichen Variablen zuzugreifen und ihn zu ändern. Diese Technik wird Übergabe per Referenz genannt, weil du eine Referenz auf den Speicherort der Variablen übergibst.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Dereference to modify the original value
}
int main() {
int x = 5;
doubleValue(&x); // Adresse von x übergeben
// x ist jetzt 10!
return 0;
}Der Schlüssel besteht darin, *ptr auf der linken Seite der Zuweisung zu verwenden, um den Wert an der Speicheradresse zu ändern, die der Zeiger enthält. Dadurch können Funktionen Variablen der aufrufenden Funktion dauerhaft ändern, was leistungsfähige Programmiermöglichkeiten eröffnet, die die Wertübergabe einfach nicht erreichen kann.
Aufgabe
EinfachSchreibe ein C-Programm, das das Ändern von Variablen durch Zeiger demonstriert, indem es eine Funktion erstellt, die den Wert einer Ganzzahl verdreifacht.
Dein Programm sollte:
- Eine Funktion namens
tripleValueerstellen, die einen Zeiger auf eine Ganzzahl als Parameter entgegennimmt - Innerhalb der Funktion
tripleValueden Dereferenzierungsoperator verwenden, um den Wert an der Speicheradresse mit 3 zu multiplizieren - Innerhalb der Funktion
tripleValueden neuen Wert im FormatValue tripled to: [value]ausgeben - In der Funktion
maineine Ganzzahlvariable namensnumberdeklarieren und mit dem Wert 8 initialisieren - Den ursprünglichen Wert im Format
Original value: [value]ausgeben - Die Funktion
tripleValueaufrufen und die Adresse der Variablenumbermithilfe des Adressoperators übergeben - Nach dem Funktionsaufruf den Endwert von
numberim FormatFinal value: [value]ausgeben
Deine Ausgabe sollte zeigen, dass die Funktion die ursprüngliche Variable erfolgreich über den Zeiger ändert:
Original value: 8
Value tripled to: 24
Final value: 24Diese Herausforderung demonstriert die Leistungsfähigkeit der Übergabe per Referenz mithilfe von Zeigern, wobei die Funktion die ursprüngliche Variable dauerhaft ändern kann, indem sie den Zeiger dereferenziert und den Wert an dieser Speicherstelle ändert.
Probier es selbst
#include <stdio.h>
// TODO: Schreibe hier deine tripleValue-Funktion
int main() {
// TODO: Schreibe hier deinen Code
// Deklariere und initialisiere die number-Variable
// Print the original value
// Rufe die tripleValue-Funktion auf
// Gib den endgültigen Wert 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 Logik & Ablauf
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Übe selbstständig: Online-C-Compiler