Zeiger an Funktionen übergeben
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 26 von 63.
Nachdem Sie nun die Einschränkungen der Wertübergabe (Pass-by-Value) verstehen, lassen Sie uns untersuchen, wie das Übergeben von Zeigern an Funktionen dieses Problem löst. Anstatt eine Kopie des Wertes einer Variablen zu übergeben, können Sie die Speicheradresse der Variablen an die Funktion übergeben.
Wenn Sie einen Pointer an eine Funktion übergeben, erhält die Funktion Zugriff auf den Speicherort der ursprünglichen Variablen. Das bedeutet, dass die Funktion direkt mit den Originaldaten arbeiten kann und nicht nur mit einer Kopie davon.
void processValue(int *ptr) {
// ptr enthält die Adresse der ursprünglichen Variable
// Die Funktion kann nun auf diesen Speicherort zugreifen
}
int main() {
int x = 10;
processValue(&x); // Übergabe der Adresse von x
return 0;
}Beachten Sie, wie wir den Adressoperator & beim Aufrufen der Funktion verwenden, um die Adresse der Variablen zu übergeben. Der Funktionsparameter ist als int *ptr deklariert, was darauf hinweist, dass er einen Zeiger auf eine Ganzzahl erwartet. Diese grundlegende Technik eröffnet leistungsstarke Möglichkeiten für Funktionen, mit den Daten Ihres Programms zu interagieren.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das das Übergeben von Pointern an Funktionen demonstriert. Ihr Programm sollte:
- Eine Funktion namens
displayValueerstellen, die einen Pointer auf einen Integer als Parameter entgegennimmt - Innerhalb der Funktion
displayValueden Dereferenzierungsoperator verwenden, um auf den Wert an der Speicheradresse zuzugreifen und ihn im FormatValue at address: [value]auszugeben - In der
main-Funktion eine Integer-Variable namensnumberdeklarieren und sie mit dem Wert 42 initialisieren - Den ursprünglichen Wert im Format
Original value: [value]ausgeben - Die Funktion
displayValueaufrufen und die Adresse der Variablenumbermit dem Adressoperator übergeben - Nach dem Funktionsaufruf eine Bestätigungsmeldung ausgeben:
Function call completed
Ihre Ausgabe sollte zeigen, dass die Funktion die Speicheradresse der ursprünglichen Variable erfolgreich empfängt und darauf zugreift:
Original value: 42
Value at address: 42
Function call completedDiese Herausforderung führt in das grundlegende Konzept der Übergabe von Pointern an Funktionen ein, wodurch die Funktion auf den Speicherort der ursprünglichen Variable zugreifen kann, anstatt mit einer Kopie ihres Wertes zu arbeiten.
Spickzettel
Beim Übergeben von Zeigern an Funktionen erhält die Funktion Zugriff auf den Speicherort der ursprünglichen Variablen anstatt auf eine Kopie ihres Wertes.
Verwenden Sie den Adressoperator &, um die Adresse einer Variablen an eine Funktion zu übergeben:
void processValue(int *ptr) {
// ptr holds the address of the original variable
// The function can now access that memory location
}
int main() {
int x = 10;
processValue(&x); // Pass the address of x
return 0;
}Der Funktionsparameter wird als int *ptr deklariert, um anzugeben, dass er einen Zeiger auf eine Ganzzahl (Integer) erwartet.
Probier es selbst
#include <stdio.h>
// TODO: Schreiben Sie hier Ihre displayValue-Funktion
int main() {
// TODO: Schreiben Sie hier Ihren Code
// 1. Deklarieren und initialisieren Sie die Variable number
// 2. Geben Sie den ursprünglichen Wert aus
// 3. Rufen Sie die displayValue-Funktion auf
// 4. Geben Sie die Abschlussmeldung 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