DAVID J. MALAN: Lassen Sie uns ein Programm schreiben, in was wir versuchen, die Werte der Swap zwei Variablen, x und y. Im Vorfeld habe ich viel geschrieben dieses Programm bereits. Zuerst erkläre ich eine Variable, x, und speichern Sie es in den Wert, 1. Dann erkläre ich Größe y und speichern in den Wert, 2. Dann gehe ich mit printf angezeigt die Werte dieser beiden Variablen. Dann behaupte ich mit einem anderen printf zu werden, tauschen diese Variablen. Dann rufe ich eine Funktion namens Swap. Und dann behaupte ich, dass die Variablen vertauscht haben. Und dann drucke ich das, was ich behaupte, die neuen Werte von x und y. Nun, was ist diese Funktion Swap? Es ist nicht etwas, das mit C kommt In der Tat, wenn wir an der Spitze von meinem Datei, werden Sie feststellen, dass ich erklärt habe ein Prototyp für diese Funktion Swap die Angabe, dass es zwei Ganzzahlen, willkürlich genannt A und B, und das Funktion nichts zurückgibt. Daher ist anzunehmen, es tut, was es sagt in Swaps ein und b die Werte. Lassen Sie uns nun umsetzen Swap. Zunächst werde ich eine temporäre, zu erklären, Variable, und weisen es der Wert in eine, wenn auch ich konnte einfach wie leicht es in b gespeichert. Ich werde dann gehen, um den Wert zu ändern von a gleich der in b sein. Und dann schließlich, werde ich ändern Wert von b zu sein, was eine war, ist aber jetzt im Temp. Jetzt behaupte ich, was ich gerade gemacht habe ist logisch korrekt. I a in einer temporären Variablen gespeichert haben, verändert ein Wert b ist, und dann verändert den Wert b zu sein, was eine war. Aber wenn ich diese kompilieren und ausführen Programm, ich mache mir Sorgen, dass es nicht gehen, was ich sehe. Stellen, kein Swap. dot Schrägstrich, kein Swap. Und leider, nach printf, der Wert von x und y, sogar nachdem wir behaupten, tauschen sie ist immer noch 1 und 2. Nun, warum ist das so? Nun stellt sich heraus, dass in Haupt-, wenn wir rufen Sie diese Funktion swap, vorbei an x und y als Argumente, ist es eigentlich Kopien von x und y, die in Swap geleitet. Das heißt, die Werte 1 und 2 Swap als a und b übergeben. Und es ist a und b, dass wir letztlich Austausch in main. Dh 1 wird 2, 2 zu 1 wird. Aber weil Swap hat keinen Rückgabewert und weil sie empfangen Kopien x und y ist es Verhalten keine Wirkung auf die x und y. Ja, a und b sind alle Bereiche, sozusagen zu tauschen, wobei x und y bleiben Gültigkeitsbereich Haupt. So haben wir ein Problem. Aber wie man es beheben?