Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zegaral en 9 Marzo 2019, 17:29 pm



Título: Trabajar con un array pasado de una función
Publicado por: Zegaral en 9 Marzo 2019, 17:29 pm
Hola gente!

Estaba haciendo un ejercicio de vectores y quería separarlo en diferentes funciones.
Una para pedir el tamaño del vector (memoria dinámica), otra para crear el propio vector con los valores introducidos, y otra para mostrar dicho vector.

Mi problema es, que aún no controlo mucho el tema de los punteros y la memoria dinámica, entonces no se como pasar el vector creado en la función de crear_vector, para poder mostrarlo en mostrar_vector. Mi código es este:
Código:
#include <stdio.h>
#include <stdlib.h>

int tamano_vector () ;
int crear_vector ( int a )  ;
void mostrar_vector ( int a , int *n ) ;


int main () {

int tamano = tamano_vector () ;

int n[tamano] ;

*n = crear_vector (tamano) ;

mostrar_vector (tamano , n ) ;


return 0 ;


}
//
//
//
int tamano_vector ()  {

int dimension ;

printf("\nTamanio del Vector\n");
scanf("%d", &dimension);

return dimension ;

}
//
//
//
int crear_vector ( int a ) {

int *v ;

v = (int*)malloc(sizeof(int)*a) ;

for ( int i = 0 ; i < a ; i++ ) {

printf("\nElemento %i:\t", i+1);
scanf("%i", &v[i]);

}

return *v ;

}
//
//
//
void mostrar_vector ( int a ,  int *n ) {

printf("\nTu vector es:\n[") ;
for ( int i = 0 ; i < a ; i++ ) {

printf("\t%i", *n) ;

}

printf("]\n");

}
Un saludo a tod@s y muchas gracias!  ::) :D


Título: Re: Trabajar con un array pasado de una función
Publicado por: K-YreX en 9 Marzo 2019, 17:40 pm
Coloca tu código entre etiquetas de código GeSHi (hay un desplegable encima del cuadro de texto cuando escribes/modificas un mensaje). Sin las etiquetas es difícil de interpretar el código ya que algunos corchetes [] se interpretan como etiquetas y el código parece incompleto... :rolleyes:

Lo primero decirte que en tu programa principal <main> has mezclado memoria estática y dinámica. Usa una o la otra, no las dos...
Y la función <crear_vector()> no devuelve un valor correcto, mira a ver eso, tienes que devolver el puntero a la primera posición del vector, no el valor de esa posición.

Cuando se pasa un array como parámetro lo que se pasa es un puntero que apunta a la primera dirección del array. Entonces en una función para mostrar, por ejemplo, un array, debes pasar el array (puntero al primer elemento) y su tamaño, para poder recorrerlo.

Si quieres reservar memoria en un puntero de forma dinámica, pasando el puntero como función, este debe pasarse por referencia (puedes buscar cómo pasar parámetros por referencia en C, ya que se pasa todo por valor). Y si reservas memoria con <malloc> (en C) o <new> (en C++), luego debes liberar esa memoria manualmente con <free> o <delete> respectivamente.

Suerte :-X