Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Retornar un arreglo en C

Estas en el tema de Retornar un arreglo en C en el foro de C/C++ en Foros del Web. No encuentro --o no sé mejor dicho -- la manera de lograr que una función regrese un arreglo y asignarlo a otro arreglo. ¿Cómo debe ...
  #1 (permalink)  
Antiguo 03/04/2006, 01:07
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Retornar un arreglo en C

No encuentro --o no sé mejor dicho -- la manera de lograr que una función regrese un arreglo y asignarlo a otro arreglo. ¿Cómo debe de hacerse?.

Para pruebas creé el siguiente código:
Código:
#include <stdio.h>

char invierte(char arreglo[8]); /* Función que invierte el orden de un arreglo */

int main(void) {
    char original[8]= "Arreglo"; /* Arreglo original */
    char invertida[8]; /* Arreglo donde se asignará lo devuelto por la función */

    *invertida= invierte(original); /* Llamada de la función */
    
    printf("Resultado: %s", invertida); /* Imprimir el resultado [Solo imprime 'o'] */

return 0;    
}

char invierte(char entrada[8]) {
     int i, j=6;
     char salida[8]; /* Almacena el arreglo invertido */
     
     for(i=0; i<7; i++) {
          salida[i]= entrada[j]; /* Invertiendo el órden */
          j--;
     }
     salida[i]= '\0';
     
     printf("Prueba: %s \n", salida); /* Función correcta */

return *salida; /* Devolvemos el arreglo resultante */
}
La función invierte() es la que debe devolver el arreglo y asignarlo a la variable invertida.

El código lo dejo a cómo conseguí mejores resultados después de varios intentos... actualmente la variable inversa resullta con el primer elemento del arreglo salida... solo como dato quizá no sea la maneracorrecta.

Es bienvenido cualquier comentario.
(PD: encontré bastantes referencias de cómo pasarlo como parámetro más nada que me ayudase sobre su retorno...)
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #2 (permalink)  
Antiguo 03/04/2006, 08:56
 
Fecha de Ingreso: noviembre-2001
Ubicación: Montevideo
Mensajes: 506
Antigüedad: 22 años, 5 meses
Puntos: 0
Porque no trabajás con arreglos dinámicos??
__________________
Alvaro García
  #3 (permalink)  
Antiguo 03/04/2006, 15:39
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 3 meses
Puntos: 3
Si mandas los dos arreglos por referencia, las modificaciones que le hagas a estos en la otra funcion se reflejaran en la funcion main y cuando muetsres los resultados seran los modificados...

void invierte(char [], char *); /* Función que invierte el orden de un arreglo */

int main(void) {
char original[8]= "Arreglo"; /* Arreglo original */
char invertida[8]; /* Arreglo donde se asignará lo devuelto por la función */

invierte(original,&invertida); /* Llamada de la función */

printf("Resultado: %s", invertida); /* Imprimir el resultado [Solo imprime 'o'] */

return 0;
}
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #4 (permalink)  
Antiguo 03/04/2006, 18:22
 
Fecha de Ingreso: noviembre-2001
Ubicación: Montevideo
Mensajes: 506
Antigüedad: 22 años, 5 meses
Puntos: 0
No tengo muy claro para que necesita esa función jam1138. Pero con un arreglo estático estás un tanto limitado, a las posibilidades.
__________________
Alvaro García
  #5 (permalink)  
Antiguo 05/04/2006, 13:27
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
alvgarci: La función no la necesito "para nada", es solo teoría. Solo me platié el problema. Así pués, siendo teoría... ¿qué sugieres?.

Mephisto (de Acatlán? ): me perece válida tu sugerencia... la función no cambiaría de propósito (su funcionamiento) y no afectaría el código del main(). No puedo probar ahora pero en definitiva mea agradó la idea .

Pero entonces debo enterder que la respuesta a la pregunta "¿cómo retornar un arreglo?", ¿sería un "no se puede"?...

Teoría específica sobre apuntadores... ¿dónde?.

Gracias por sus comentarios
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 26/04/2006, 06:45
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Un arreglo como tal no se puede retornar de una funcion, sin embargo sabemos que un arreglo se puede asignar aun puntero por lo tanto es posible retornar un arreglo atravez de un puntero,

tipo* funcion(tipo ary[])
{
return ary;
o
return &ary[0];
}
pero la mejor froma de trabajar con arreglos en C es a la usansa de sus librerias.

void funcion(const tipo ary2[], tipo ary2[]); donde ary1 es el arreglo origen y ary2 es el arreglo destino.

otra forma de retornar un arreglo es atravez de una estructura, es decir que tu arreglo sea miembro de una estructura.
  #7 (permalink)  
Antiguo 06/08/2011, 21:16
Avatar de roque510  
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Retornar un arreglo en C

HOLA A TODOS! he econtrado este tema y logre resolver este problema de esta manera

void apuntarre(int []);
void main(){
int arre[5];

apuntarre(arre);

for(int x=0;x<5;x++)
printf("%d",arre[x]);






getch();
}//fin del main

void apuntarre(int arre[]){
int *ptr,a=0,b=0;

ptr=arre;

ptr[b]=a;
a++;b++;
ptr[b]=a;
a++;b++;
ptr[b]=a;
a++;b++;
ptr[b]=a;
a++; b++;
ptr[b]=a;


}//fin del apuntarre

ahora... mi pregunta es como hacerlo en un arreglo multidimensional... he intentado poniendolo de manera similar a esta pero... no corre.. me ayudan? GRAX!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 04:05.