DAVID J. Malan: Escriurem un programa en que tractem de canviar els valors de dues variables, X i Y. Per endavant, he escrit molt d'aquest programa ja. En primer lloc, declaro una variable, x, i emmagatzemar-hi el valor d'1. Llavors em declaro variable i i emmagatzemar-hi el valor de 2. Després procedeixo amb printf per mostrar els valors d'aquestes dues variables. Llavors jo reclam amb una altra printf per ser intercanvi d'aquestes variables. Llavors jo dic una funció anomenada swap. I llavors jo sostinc que les variables s'han intercanviat. I després imprimeixo el que jo reclamo són els nous valors de x i y. Ara, què és aquest canvi funció? No és una cosa que ve amb C. De fet, si ens fixem en la part superior de la meva arxiu, t'adonaràs que he declarat un prototip per a aquesta funció d'intercanvi especificant quals calen dos sencers, arbitràriament trucades A i B, i aquest funció no retorna res. Així que, presumiblement, es fa el que diu en una de les permutes i els valors de b. Ara anem a implementar swap. En primer lloc, vaig a declarar el temporal variable i assignar- el valor d'una, encara que només pogués com s'emmagatzema fàcilment en ella b. Llavors jo vaig a canviar el valor d'un ésser igual a la de B. I després, finalment, vaig a canviar el valor de b per ser el que era, però és un ara en temp. Ara puc reclamar el que acabo de fer és lògicament correcte. Jo he guardat una a una variable temporal, canviat el valor d'un ésser B i, a continuació, canviat el valor de b per ser el que va ser una de. Però quan compilar i executar aquest programa, em preocupa que no és va del que veig. Fer, no intercanvi. dot slash, cap intercanvi. I, per desgràcia, d'acord amb printf, el valor de x i i, fins i tot després que pretenem ser el canvi ells, segueix sent 1 i 2. Ara per què és això? Bé, resulta que en la principal, quan cridar a aquesta funció d'intercanvi, passant xiy com a arguments, en realitat és còpies de x i y que es va passar a swap. És a dir, els seus valors 1 i 2 són passat a la memòria d'intercanvi com a i b. I és a i b que som en última instància, intercanvi de principal. És a dir, 1 es converteix en 2, 2 es converteix en 1. Però a causa permuta no retorna cap valor i perquè va rebre còpies de x ei, és el comportament ha cap efecte en xi y. De fet, a i b estan en l'àmbit, per dir-ho, per canviar, mentre que x i y es mantenen com abast principal. Així que tenim un problema. Però, com solucionar-ho?