Variablen über Zeiger ändern
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 27 von 63.
Jetzt können Sie die wahre Stärke von Pointern nutzen: die ursprüngliche Variable über eine Funktion zu verändern. Wenn Sie einen Pointer an eine Funktion übergeben, kann die Funktion den Dereferenzierungsoperator verwenden, um den an dieser Speicheradresse gespeicherten Wert zu ändern.
Innerhalb der Funktion dereferenzieren Sie den Zeiger mit dem *-Operator, um auf den Wert der ursprünglichen Variablen zuzugreifen und ihn zu ändern. Diese Technik wird als Pass-by-Reference bezeichnet, da Sie eine Referenz auf den Speicherort der Variablen übergeben.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Dereferenzieren, um den ursprünglichen Wert zu ändern
}
int main() {
int x = 5;
doubleValue(&x); // Die Adresse von x übergeben
// x ist jetzt 10!
return 0;
}Der Schlüssel liegt in der Verwendung von *ptr auf der linken Seite der Zuweisung, um den Wert an der Speicheradresse zu ändern, die der Pointer hält. Dies ermöglicht es Funktionen, Variablen der aufrufenden Funktion dauerhaft zu ändern, was leistungsstarke Programmiermöglichkeiten eröffnet, die mit pass-by-value schlichtweg nicht möglich sind.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das die Modifizierung von Variablen durch Pointer demonstriert, indem Sie eine Funktion erstellen, die den Wert einer Ganzzahl verdreifacht.
Ihr Programm sollte:
- Eine Funktion namens
tripleValueerstellen, die einen Pointer 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
main-Funktion eine Ganzzahlvariable namensnumberdeklarieren und sie mit dem Wert 8 initialisieren - Den ursprünglichen Wert im Format
Original value: [value]ausgeben - Die Funktion
tripleValueaufrufen und die Adresse der Variablenumbermit dem Adressoperator übergeben - Nach dem Funktionsaufruf den endgültigen Wert von
numberim FormatFinal value: [value]ausgeben
Ihre Ausgabe sollte zeigen, dass die Funktion die ursprüngliche Variable erfolgreich über den Pointer modifiziert:
Original value: 8
Value tripled to: 24
Final value: 24Diese Herausforderung demonstriert die Stärke von Pass-by-Reference unter Verwendung von Pointern, wobei die Funktion die ursprüngliche Variable dauerhaft modifizieren kann, indem sie den Pointer dereferenziert und den Wert an diesem Speicherort ändert.
Spickzettel
Sie können die ursprüngliche Variable über eine Funktion mithilfe von Pointern (Zeigern) ändern. Diese Technik wird als Pass-by-Reference bezeichnet, da Sie eine Referenz auf den Speicherort der Variablen übergeben.
Dereferenzieren Sie innerhalb der Funktion den Pointer mit dem *-Operator, um auf den Wert der ursprünglichen Variablen zuzugreifen und diesen zu ändern:
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Dereferenzieren, um den ursprünglichen Wert zu ändern
}
int main() {
int x = 5;
doubleValue(&x); // Die Adresse von x übergeben
// x ist jetzt 10!
return 0;
}Verwenden Sie *ptr auf der linken Seite der Zuweisung, um den Wert an der Speicheradresse zu ändern, die der Pointer hält. Dies ermöglicht es Funktionen, Variablen aus der aufrufenden Funktion dauerhaft zu ändern.
Probier es selbst
#include <stdio.h>
// TODO: Schreiben Sie hier Ihre tripleValue-Funktion
int main() {
// TODO: Schreiben Sie hier Ihren Code
// Deklarieren und initialisieren Sie die Variable number
// Geben Sie den ursprünglichen Wert aus
// Rufen Sie die tripleValue-Funktion auf
// Geben Sie den Endwert 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