DAVID J. MALAN: La oss skrive et program i som vi prøver å bytte verdiene av to variabler, x og y. På forhånd har jeg skrevet mye av dette programmet allerede. Først, jeg erklærer en variabel, x, og lagre i den verdien, en. Så jeg erklærer variabel y og lagre i den verdien, to. Så jeg fortsetter med printf å vise verdiene av disse to variable. Så jeg hevder med en annen printf skal bytte disse variablene. Så jeg kaller en funksjon kalt swap. Og da jeg hevder at variablene har blitt byttet. Og så skriver jeg ut at det jeg hevder er de nye verdiene for x og y. Nå hva er denne funksjonen swap? Det er ikke noe som kommer med C. Faktisk, hvis vi ser på toppen av min fil, vil du se at jeg har erklært en prototype for denne funksjonen swap spesifisere at det tar to ints, vilkårlig kalles a og b, og denne Funksjonen returnerer ikke noe. Så formodentlig, det gjør hva det står i swap-A og b verdier. La oss nå gjennomføre swap. Først, jeg kommer til å erklære en midlertidig variable og tilordne til det verdien i en, selv om jeg bare kunne så enkelt lagres i det b. Jeg deretter kommer til å endre verdien fra et til å være lik det i b. Og så til slutt, jeg kommer til å endre verdien av b å være hva en var, men er nå i temp. Nå jeg hevder det jeg nettopp har gjort er logisk riktig. Jeg har lagret en i en midlertidig variabel, endret en verdi å være b ', og deretter endret b verdi å være hva en var. Men når jeg kompilere og kjøre denne programmet, jeg er redd for at det ikke kommer det jeg ser. Lag, ingen swap. dot slash, ingen swap. Og dessverre, i henhold til printf, verdien av x og y, selv etter at vi hevder å være å bytte dem, er fortsatt 1 og 2. Nå hvorfor er det? Vel, det viser seg at det i hovedsak når vi kaller denne funksjonen swap, passerer i x og y som argumenter, er det faktisk kopier av x og y som er gått inn swap. Nemlig, deres verdier 1 og 2 er gått inn swap som a og b. Og det er en og b som vi er til syvende og sist bytte i hoved. Det vil si, blir 1 2, 2 blir en. Men fordi swap har ingen returverdi og fordi det mottatte kopier av x og y, er det atferd har ingen effekt på x og y. Faktisk, a og b er angitt omfang, så å si, å bytte, mens x og y forbli scoped til hoved. Så vi har et problem. Men hvordan å fikse det?