Punteros y funciones en C

– Prog103

/* Prog103.cpp */

#include <stdio.h>
void main()
{
int v1,v2,aux;
printf(«n Primer valor ? «); scanf(«%d»,&v1); printf(«n Segundo valor ? «); scanf(«%d»,&v2);
aux=v1;
v1=v2;
v2=aux;
printf(«nn Nuevo primer valor: %d»,v1); printf(«nn Nuevo segundo valor: %d»,v2);
}

Estudio del PROG103:

– El programa lo que hace es simplemente intercambiar los valores de 2 variables
– Recuerda (ya lo hicimos en el PROG088), que el intercambio de valores se consigue gracias al uso de una variable auxiliar:
aux=v1;
v1=v2;
v2=aux;
v1 adquirirá el valor de v2 y v2 tomará el valor de v1.

– El problema del “intercambio” se encuentra en el caso de una función, como veremos a continuación.

Se trata de hacer el programa anterior, pero el proceso de “intercambio” lo pondremos en una función.

– Prog104

/* Prog104.cpp */

#include <stdio.h>
void cambiar(int v1,int v2);
void main()
{
int v1,v2,aux;
printf(«n Primer valor ? «); scanf(«%d»,&v1);
printf(«n Segundo valor ? «); scanf(«%d»,&v2); cambiar(v1,v2); printf(«nn Nuevo primer valor: %d»,v1); printf(«nn Nuevo segundo valor: %d»,v2);
}
void cambiar(int v1,int v2)
{
int aux;
aux=v1;
v1=v2;
v2=aux;
}

Si todo funciona correctamente verás que el programa PROG104 no funciona, es decir: “no se intercambian los dos valores”..

Vamos a solucionar el problema, se trata de hacer el mismo programaPROG104, pero trabajando con punteros.

– Prog105

/* Prog105.cpp */

#include <stdio.h>
void cambiar(int *pv1,int *pv2);
void main()
{
int v1,v2,aux;
printf(«n Primer valor ? «); scanf(«%d»,&v1);
printf(«n Segundo valor ? «); scanf(«%d»,&v2); cambiar(&v1,&v2); printf(«nn Nuevo primer valor: %d»,v1); printf(«nn Nuevo segundo valor: %d»,v2);
}
void cambiar(int *pv1,int *pv2)
{
int aux;
aux=*pv1;
*pv1=*pv2;
*pv2=aux;
}
Graba el programa con el nombre PROG105, en TuCarpeta.

Ejecútalo varias veces.

Observa que el uso de punteros no sirve sólo para ahorrar memoria.

Fuente: Programación en C/C++ (Manual FV) de Fermí Vilà