C-Programmierung: Wie Pointers in zu verwendende Funktionen

Ein Zeiger ist eine Art von Variable. Als solches ist es leicht zu einer Funktion in C Programmierung abgeschleudert werden kann. Noch spannender kann ein Zeiger wandern zurück von einer Funktion als Rückgabewert. Oft sind diese Tricks die einzigen Möglichkeiten, um Informationen zu oder von zu einer Funktion zu erhalten.

Menu

Wie man einen Zeiger auf eine Funktion zu übergeben

Der große Vorteil eines Zeigers an eine Funktion ist, dass die Information, die zurückgeführt werden müssen, nicht geändert wird. Das ist, weil die Funktion einer Speicheradresse verweist, nicht direkt einen Wert. Durch die Verwendung dieser Adresse können die Informationen ohne zurück manipuliert werden wird. Zeigen auf einen Discount demonstriert.

ZEIGEN AUF EINEN RABATT

# include Leere Rabatt (float * a) -int main () {float Preis = 42,99-printf ( "Der Artikel kostet $%. 2f n", Preis) -Rabatt (Preis) -printf ( "Mit dem Rabatt, das ist . $% 2f n ", Preis) -return (0) -} void Rabatt (float * a) {* a = * a * 0.90-}

In Zeile 3 der zu einem Discount dem Finger zeigen, wird der Rabatt () Funktion prototypisiert. Es erfordert einen Schwimmer Art von Zeigervariable als einziges Argument.

Zeile 10 übergibt die Adresse des Preis Variable für den Rabatt () Funktion. Das Prozentzeichen erhält die Speicherstelle des Preis Variable.

Innerhalb der Funktion Zeigervariable ein wird verwendet, um den Speicherplatz auf dem Wert zu spähen, die vergangen ist.

Übung 1: Geben Sie den Quellcode aus dem Hinweis auf einen Rabatt in Ihrem Editor. Erstellen und das Programm auszuführen.

Übung 2: Ändern Sie den Quellcode aus Übung 1, so dass ein Schwimmer Zeigervariable p wird in der Funktion main () deklariert. Initialisieren p zum Preis Variable Standort, und dann passieren p für den Rabatt () Funktion.

Übung 3: Erstellen Sie ein neues Projekt mit zwei Funktionen: create () und show (). Die create () Funktion erhält einen Zeiger auf ein Array von zehn ganzen Zahlen und füllt das Array mit zufälligen Werten im Bereich von 0 bis 9. Die Show () Funktion die gleiche Anordnung und zeigt alle zehn Elemente erhält.

Wie man einen Zeiger aus einer Funktion zurück

Die Funktionen werden nach Typen wie int oder char oder sogar nichtig bekannt. Sie können auch Zeiger Funktionen, die Rückkehr einen Speicherplatz als Wert. Einfach erklären die Funktion als eines Zeigertyp sein, wie zum Beispiel

char * Monster (void)

In diesem Beispiel wird das Monster () Funktion deklariert. Es erfordert keine Argumente, sondern gibt einen Zeiger auf ein char-Array - eine Zeichenfolge.

Hier ist ein weiterer Unterschied mit Funktionen, die Zeiger zurück: Der Wert, der zurückgegeben wird muss als statische Variable deklariert werden. Beachten Sie, dass Variablen auf ihre Funktionen sind lokal. Sie müssen die Daten in der Variablen behalten, indem es als ein statischer Typ erklärt, so daß sein Inhalt nicht verworfen werden, wenn die Funktion angehalten. einen String Umkehren ein Beispiel.

Umkehren einer STRING

#include char * strrev (char * input) -int main () {char string [64] -printf ( "etwas Text Typ:") -fgets (string, 62, stdin) -puts (strrev (string)) - Rückkehr (0) -} char * strrev (char * input) {static char Ausgang [64] -char * i, * oi = Input- o = Ausgangs-while (* i ++ = ' n'!) - i --- while (i> = Eingang) * o ++ = * i --- * o = ' 0'-return (Ausgang) -}

einen String Umkehren kann ziemlich verwirrend. Passt auf!

Linie 3 Prototypen der strrev () Funktion. Es gibt einen Zeiger - in diesem Fall die Adresse eines char-Array oder ein String.

Die Funktion main () in Zeile 5 ist recht einfach zu verstehen. Die Eingabe wird durch die fgets gesammelt () Funktion in Zeile 10. Es übergeben wird, um strrev () in Zeile 11 innerhalb der puts () Funktion.

Die strrev () -Funktion beginnt bei Zeile 16. Es char einen Zeiger als Argument erfordert, die als Eingabe in die Funktion bezeichnet wird. Der Ausgabepuffer wird bei Zeile 18, erstellt und es ist statisch, so dass es nicht weg, wenn die Funktion ausgeführt wird. Zeile 19 deklariert zwei char Zeiger: i und o.

Die erste while-Schleife in Zeile 23 die Newline-Zeichen am Ende der Eingabezeichenfolge findet. Das ich Variable Märsche durch die Zeichenfolge ein Zeichen zu einem Zeitpunkt.

Nach dem Newline zu finden, die ich Zeiger enthält die Adresse des nächsten Zeichens in Eingang, die wollen wahrscheinlich nicht das, was Sie. So ist die Aussage in Zeile 25 staut sich ich beim letzten Zeichen in der Zeichenfolge vor dem Newline zu zeigen.

Zu Beginn der while-Schleife in Zeile 27, hält Zeiger o die Basis des Ausgangspuffers, um das erste Zeichen und Zeiger ich hält die letzte. Versuchen Sie, diese Situation zu denken, wie ich an der Spitze einer Treppe stehen und O am Boden steht.

Die while-Schleife dreht, bis die Adresse in Zeiger ich entspricht der Adresse am Beginn der Eingabezeichenfolge. Wie ich erniedrigt wird, bei der Adresse die Zeichen ich Adresse werden kopiert O. Im übertragenen Sinne, ich die Treppe marschiert nach unten, und O marschiert auf.

Zeile 29 Kappen der Ausgabezeichenfolge mit einem NULL-Zeichen. Das ist etwas, was Sie beachten müssen, wenn Sie Zeichenfolgen erstellen, indem Zeiger verwendet werden.

Die return-Anweisung in Zeile 31 sendet die Adresse des Ausgangspuffers, die umgekehrte Zeichenfolge, zurück an die aufrufende Aussage.

Übung 4: Geben Sie den Quellcode aus einem String in Ihren Editor rückgängig zu machen. Wie Sie den Code eingeben, fügen Sie Ihre eigenen Kommentare zu beschreiben, was los ist. Fühlen Sie sich frei, den Text als Leitfaden zu verwenden. Erstellen und das Programm auszuführen.

Menü