Pregunta:
¿Cómo puedo hacer que una función regrese más de un valor en C?
soymasagudoquehermoso
2008-04-26 02:18:47 UTC
Una función en C solo puede regresar una función. ¿Qué debo hacer para que una función regrese más de un valor?

He leído que para esto se utilizan apuntadores pero no tengo idea de cómo. Saludos!
Seven respuestas:
salvador G █║▌│ █│║█
2008-04-26 09:13:35 UTC
Un apuntador seria como un arreglo dinamico en la memoria, pero si no sabes como hacerlo, entonces ocupa un arreglo simple, mete los valores que quieres regresar y listo. Si necesitas regresar datos diferentesm, como un entero y un flotante o un flotante y una cadena, definitivamente tendras que usar punteros.
mano amiga
2008-04-26 11:39:53 UTC
Debes pasar a la función un argumento adicional en el cual puedas devolver a quien llama a la función ese valor.



Me explico:

Tienes una función "f" que devuelve un tipo de dato "cualquier_tipo" (int, char, o cualquiera). Esta función f tiene un total de "n" argumentos [0 ≤ n ≤ (máximo - 1 número de argumentos que permita el lenguaje pasar a una función)].

Deberás adicionar un argumento a f para que puedas "devolverlo" a quien use la función. La característica de este nuevo argumento es que deberá ser un puntero o apuntador, para que su valor se pueda modificar o asignar dentro de la función f y para que además al terminar f y volver a quien la llama se conserve dicho valor.



Ejemplo de lo anterior, si f no tiene argumentos (solo el que se va a usar para retornar el valor adicional):

cualquier_tipo f(tipo * para_retornar);

{

... código ...

... más código ...

asignas o cambias el valor del argumento "para_retornar":

para_retornar = valor_de_ tipo_"tipo";

... código ...

return (valor_de_tipo_ "cualquier_tipo");

}



En el programa, cuando se vaya a llamar a f, se hace así:

{

tipo otro_valor; /* variable a usar para recibir el segundo valor de f */

cualquier_tipo resultado_de_f; /* variable para recibir el valor de f */



...código...

resultado_de_f = f( &otro_valor );

/* aquí ya tenemos los dos valores obtenidos de haber usado la función f */

... código ...

}



Lo anterior se puede extender para que una función retorne más de 2 valores, ya sean 3, 4, o más. El límite, como dije antes, es que se debe respetar el máximo número de argumentos que puede tener una función.
?
2016-12-16 14:23:23 UTC
gracias compa lo ke mas me importo es lo del regreso de team 3-d a WWE posiblemente esta se a una buena noticia si estos regresaran a ECW podria regresar un %. el prestigio a esta marca y siendo casi tmb ECW Originals sera una buena subida de rankings aber si WWE no l. a. caaga ke estos 2 le jobeen ala great esteroide team(cena y Batista) lo ke mas me sorprendio i mas me va doler es lode separar lax es l. a. mayor ********* ke e oido TNA tiene una solida branch de parejas y kitarle a LAX va ser un golpe duro no se por ke chingados Russo se le ocurre como undir ala TNA %. a %. peor aun no se como TNA lo permite una noticia resiente ke te falto es el despido de Braden Walker(Chris Hero) apenas teniendo pocos diaz luchando en ECW =S lastima Gracias por l. a. records ;P
El caballero sin alma ni corazón
2008-04-26 16:47:16 UTC
Lo más sencillo que puedes hacer:



Devolver una estructura.



Ejemplo:



struct mis_datos

{

char nombre[50];

int edad;

float notas[3];

};



// devolveremos tres variables al mismo tiempo

// de diferente tipo de dato primitivo

struct mis_datos mi_funcion ()

{

struct mis_datos retorno;



// aqui haces

// alguna cosa

// con los datos

// de la struct



return (retorno);

}



Otro ejemplo:

Quieres retornar un array



struct array_retorno

{

int array[100];

int num_elementos;

};



// devolvera un array de num_elementos

struct array_retorno mifuncion2(/* parametros */)

{

struct array_retorno valor_a_retornar;



// aqui haces

// alguna cosa

// con el array



return valor_a_retornar;

}



Y en el main(o donde lo vayas a utilizar) simplemente haces:



struct array_retorno miArray = mifuncion2();



// aqui ya puedes

// hacer algo con miArray

// como imprimirlo



for(int i=0;i
printf (miArray.array[i]);





--

La otra solución son los punteros



int * funcion(parametros)

{

...

}



Pero ves que usando estructuras es mas sencillo y entendible.
Nacho
2008-04-26 11:20:00 UTC
Una función en C sólo tiene un valor de retorno. Si quieres devolver más de un valor, lo tienes que hacer usando los parámetros.



Si alguno de los parámetros es un puntero (es lo que se llama "pasar un valor por referencia"), podrás modificar su valor dentro de la función y leer su valor modificado cuando salgas de ella.



Si quieres más detalles, mira el curso de C de AprendeAProgramar, en el apartado 9.5:



http://www.aprendeaprogramar.com/mod/resource/view.php?id=325
Eduardo Aguila
2008-04-26 07:47:20 UTC
retorna un array http://www.tecnologiaslibres.net el mejor sitio de Programación, Tecnologia y GNU/Linux
elfanatico2008
2008-04-26 02:23:12 UTC
Hay mas de un tipo de funcion en C, sino te funciono la menera que te dije anteriormente busca un manual que debe haber funciones que acepten mas de un regreso.





-------------





C no es tan dificil. Reemplaza la variable que usa el for, por un contador.


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...