HOlA! Ayuda con una duda basica en arreglos!

Iniciado por larregui15, 22 Julio 2015, 23:44 PM

0 Miembros y 1 Visitante están viendo este tema.

larregui15

Hola! Soy nueva en esto de la programacion, mi duda es la siguinte: Como hago para pedir la longitud de un arreglo antes de crear el mismo?

Por ejemplo, quiero que mi arreglo sea de longitud 7 ... entonces como pido eso? despues una vez que haya señalado que sera de longitud 7, pedir los 7 valores y de ahi ya iniciar con las operaciones teniendo mi arreglo de longitud 7 con los valores que yo quiera.
 
Agradezco de antemano su ayuda!  :rolleyes:  :rolleyes:  ;-)

engel lex

en C o en C++?

en C sería algo como (este método también se puede usar en C++)

int *arreglo;//un puntero a un tipo int
int largo; //aquí definiremos el tamaño

//le pides al usuario el tamaño por el método que quieras

arreglo = (int *) malloc(sizeof(int) * largo);



en C++ es ligeramente más simple

Código (cpp) [Seleccionar]

int largo; //aquí definiremos el tamaño

//le pides al usuario el tamaño por el método que quieras

int *arreglo = new int[largo];


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

crack81

No olvides algo muy importante que es liberar la memoria
despues utilizarlos

para c se usa la funcion free


  free(arreglo);


y para c++ delete cuando son punteros simples o delete[] cuando son arreglos dinamicos

Código (cpp) [Seleccionar]

  delete[] arreglo;
Si C/C++ es el padre de los lenguajes entonces ASM es dios.


0and6

 ;D ;D Genial la neta yo pensaba que eso no se podia hacer y veo que con punteros o apuntadores es posible
siempre trae algo bueno leer este foro
>:D >:D >:D

Helbal

No es buena idea gestionar la memoria manualmente. En C++ deberías utilizar los punteros inteligentes: unique_ptr<> o shared_ptr<>

ivancea96

Cita de: Helbal en  7 Agosto 2015, 12:22 PM
No es buena idea gestionar la memoria manualmente. En C++ deberías utilizar los punteros inteligentes: unique_ptr<> o shared_ptr<>

Por muchas clases y funciones que existan para evitar el uso de punteros a los programadores, saber asignar memoria es necesario. Y tampoco es difícil. Solo hay que recordar liberarla.

Helbal

Ese es el problema: "Solo hay que recordar liberarla". Eso es "mentira" y lo pongo entre comillas porque si y no. Me explico: el problema de utilizar punteros no es solo el recordar liberar la memoria sino que si en una función creas un puntero y surge algún tipo de error que envie una excepción, y que el delete se encuentra en esa misma función, va a haber una fuga de memoria.
Es cierto que puedes atrapar la excepción con un try{}, catch{} y liberar la memoria pero pueden surgir una enorme cantidad de problemas e intentar predecirlos todos no es precisamente fácil

ivancea96

Cita de: Helbal en  7 Agosto 2015, 16:51 PM
Ese es el problema: "Solo hay que recordar liberarla". Eso es "mentira" y lo pongo entre comillas porque si y no. Me explico: el problema de utilizar punteros no es solo el recordar liberar la memoria sino que si en una función creas un puntero y surge algún tipo de error que envie una excepción, y que el delete se encuentra en esa misma función, va a haber una fuga de memoria.
Es cierto que puedes atrapar la excepción con un try{}, catch{} y liberar la memoria pero pueden surgir una enorme cantidad de problemas e intentar predecirlos todos no es precisamente fácil

Como digo, hay que recordar liberarla. No liberarla en caso de excepción, es no recordar liberarla en una posible ruta del código xD

Temer a la memoria es absurdo. La memoria es parte necesaria del programa, que se usa constantemente. Creo que lo mejor que puede hacer un programador, es aprender C o ASM. Aprender lo que es la memoria. Aprender a tratarla. Aprender que es algo corriente, y aprender que hay que tener cuidado con ella. Es todo.

Helbal

Los punteros inteligentes son punteros. No se trata de evitar el gestionar la memoria sino de evitar cualquier tipo de fuente de errores. Un puntero inteligente no deja de ser un simple puntero pero mejorado para asegurar que la memoria va a ser liberada correctamente.