Para eso se utilizando una acción (Función que no devuelve nada).
http://www.youtube.com/watch?v=1lk3hMqk0Twhttps://www.youtube.com/watch?v=cicFrj4TRJ0https://www.youtube.com/watch?v=8g9bdT005a8Busque como pasar parámetros por referencia y por puntero.
Si haces una función que devuelva datos con return solo vas a poder devolver un valor por que la función se da por terminado justo en el return.
A cambio si haces una función que no retorne nada y pases los parámetros por punteros y/o referencias, puedes hacer un calculo(a mas) por ejemplo y el resultado lo devuelve justo a la dirección de memoria de la variable que has pasado a la función.
O sea, seria algo así como: Yo indico 2 o mas números a una acción para a hacer un par de operaciones para que me devuelva 2 resultados y envés de pasar parámetros normalmente(copiar esos datos en la función) estoy diciendo que las modifique donde están, sin hacer copias de esos datos y después tener que guárdalos.
Eso se hace por que indico en que posición de la memoria están las variables, la acción va hace el calculo y modifica el numero allá donde este y no necesito hacer return.
Normalmente con una función tendría que guardar el resultado nuevamente en una variable de esta manera y no obtendría solo un valor.
Un ejemplo de una acción con parámetros por referencia seria:
int resultado = funcionsumar(A,B);
Suponemos que esta función suma 2 valores pasados y hace el return, el paso siguiente seria o imprimir con acción (función que no devuelve nada es una acción) o guardar el valor y despues imprimir o hacer lo que sea con ese valor.
Vamos a ver con la accion:supongamos que en main tengo esas 3 variables.
int A=10;
int B=30;
int C=40
int resultado1= 0;
int resultado2 = 0;
Y ahora vemos nuestra acción:
void accion( int& a, int& b, int& c, int& r1, int& r2 ){//Parámetros por referencia
r1 = a + b;
r2 = c - 13;
}
Ya he devuelto los resultados(fácil ¿no?), no necesito return por que la acción no retorna nada, sino que hace directamente los calculos sobre los valores pasados por referencia modificando los allí mismo donde estan.
llamaríamos la acción de igual manera que la función si es por referencia:
accion(A, B, C, resultado1, resultado2);
El código seria así pasando tanto por referencia como por punteros:
#include <stdio.h>
void accionRef ( int& a, int& b, int& c, int& r1, int& r2 ) { /*Parametros por referencia*/
r1 = a + b;
r2 = c - 13;
}
void accionPunt ( int* a, int* b, int* c, int* r1, int* r2 ) { /*Parametros por puntero*/
*r1 = *a + *b +20;
*r2 = *c - 13 + 112;
}
int main () {
int A = 10;
int B = 30;
int C = 40;
int resultado1 = 0;
int resultado2 = 0;
/*Lamamos a la accion*/
accionRef ( A, B, C, resultado1, resultado2 );
/* resultado1 aqui vale 40 y resultado2 vale 27*/
/*si eso es asi he echo 2 calculos con una accion¿comprobemos?*/
printf ("resultado1: %d\n resultado2: %d\n ", resultado1, resultado2);
/*Ahora volvamos a hacer pero con punteros*/
accionPunt ( &A, &B, &C, &resultado1, &resultado2 );
printf ("resultado1: %d\n resultado2: %d\n ", resultado1, resultado2);
return 0;
}
Espero haberlo aclarado.
Hay muchos mas y mejores ejemplos por Internet.
Busque acción, referencia y punteros....
Suerte!