Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FKT en 24 Agosto 2015, 20:38 pm



Título: Como funciona un arreglo o vector?
Publicado por: FKT en 24 Agosto 2015, 20:38 pm
Buenas, se que los arrays son como unas "cajas imaginarias" en las que hay un indice que tu declaras que hace referencia a las "minicajas" por así decirlo, es un ejemplo muy cutre que se me ha ocurrido ahora mismo mientras escribo y alomejor no me habéis entendido.
En el siguiente codigo como funciona el array ?                                                                                         
                         
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main (){
  5.  
  6. /*Declarar e inicializar un arreglo Unidimensional o Vector*/
  7.  
  8. int numeritos[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
  9. int indice = 0;
  10.  
  11.    for(indice = 0; indice <= 9; indice++){
  12.     printf("\nEl indice %i tiene un %i\n",indice,numeritos[indice]);
  13. }
  14.  
  15. return 0;
  16. }
  17.  


El array entero no sino la parte de:
Código
  1. printf("\nEl indice %i tiene un %i\n",indice,numeritos[indice]);

Donde al final del "printf()" el array tiene la variable indice en donde estaria el indice de cada posicion empezando por el 0, no sabía que se podia meter una variable dentro de la declaración del indice.


Título: Re: Como funciona un arreglo o vector?
Publicado por: avesudra en 24 Agosto 2015, 20:47 pm
Lo que se hace con ese código es recorrer la cajita, desde su primer habitáculo (posición 0) hasta el último (posición 9), y mostrar por la pantalla el índice, y lo que contiene el array en esa posición. Nada más. Para ello se usa un bucle for para ir incrementando la variable índice de uno en uno.

Por otra parte sí, puedes poner lo que quieras entre corchetes incluso una expresión del tipo:

Código
  1. miarray[indice*constante + desplazamiento]
  2. miarray[laexpresión matematica que quieras siempre que el resultado sea entero]
Y en esas expresiones puedes usar la cantidad de variables que quieras. Siempre que el índice resultante esté dentro de los límites del array y sea un numero entero obligatoriamente. Entre otras cosas porque no existe la cajita 3,2. O la 3 o la 4, pero la 3,2 no.

Un saludo.


Título: Re: Como funciona un arreglo o vector?
Publicado por: FKT en 24 Agosto 2015, 20:49 pm
Tengo dificultades para comprenderlo la verdad, si no hay ninguna posicion que se llame indice por ejemplo porque no existe, entonces que pinta el array ?


Título: Re: Como funciona un arreglo o vector?
Publicado por: ivancea96 en 24 Agosto 2015, 20:52 pm
En memoria, un array es un conjunto de elementos colocados uno delante de otro.
Al hacer "array[ x ]", accedes a la posición X en memoria. Ese X es un entero, que puede ser una constante, una variable, o el retorno de una función, mientras sea un entero.

También puedes crear un array de tamaño dinámico así:

Código
  1. int *array = (int*)malloc(sizeof(int)*5);


Como dato:
Código
  1. int array[5];
  2. *(array + 2*sizeof(int)) == array[2];

Tengo dificultades para comprenderlo la verdad, si no hay ninguna posicion que se llame indice por ejemplo porque no existe, entonces que pinta el array ?

Visto lo anterior, verás que, al acceder a una posición de memoria inexistente, 1 de 2: o da error, o muestra/sobreescribe memoria que tendrá valores teóricamente desconocidos.


Título: Re: Como funciona un arreglo o vector?
Publicado por: avesudra en 24 Agosto 2015, 20:54 pm
Tengo dificultades para comprenderlo la verdad, si no hay ninguna posicion que se llame indice por ejemplo porque no existe, entonces que pinta el array ?

Creo que estás etiquetando cada habitáculo de la caja(o yo no te entiendo bien), no es que haya una posición que se llame índice. Las posiciones son valores exclusivamente números naturales (enteros positivos).

Me explico.

Mi Array

Posicion 0  ----------> Contenido: 3
Posicion 1  ----------> Contenido: 2
Posicion 2  ----------> Contenido: 1
Posicion 3  ----------> Contenido: 8
Posicion 4  ----------> Contenido: 0

Entonces la variable indice lo que hace es ponerse primero en 0. Y decimos ¿que hay en miarray[indice]? como la variable indice en ese momento contiene un cero es lo mismo que preguntarse, ¿qué hay en miarray[0]? Y el programa te dice pues el contenido de la posición 0 de miarray es un 3.

Luego la variable índice se incrementa en uno. Y ahora es lo mismo que preguntarse que hay en miarray[1], y así sucesivamente.

Saludos.


Título: Re: Como funciona un arreglo o vector?
Publicado por: FKT en 24 Agosto 2015, 21:09 pm
Creo que estás etiquetando cada habitáculo de la caja(o yo no te entiendo bien), no es que haya una posición que se llame índice. Las posiciones son valores exclusivamente números naturales (enteros positivos).

Me explico.

Mi Array

Posicion 0  ----------> Contenido: 3
Posicion 1  ----------> Contenido: 2
Posicion 2  ----------> Contenido: 1
Posicion 3  ----------> Contenido: 8
Posicion 4  ----------> Contenido: 0

Entonces la variable indice lo que hace es ponerse primero en 0. Y decimos ¿que hay en miarray[indice]? como la variable indice en ese momento contiene un cero es lo mismo que preguntarse, ¿qué hay en miarray[0]? Y el programa te dice pues el contenido de la posición 0 de miarray es un 3.

Luego la variable índice se incrementa en uno. Y ahora es lo mismo que preguntarse que hay en miarray[1], y así sucesivamente.

Saludos.
Así es avesudra lo que me he explicado mal, lo que no entendía, que ya me has aclarado, es lo del indice dentro de "[]".
Gracias  ;D


Título: Re: Como funciona un arreglo o vector?
Publicado por: Orubatosu en 25 Agosto 2015, 11:07 am
De todos modos, te recomiendo que llames a estas estructuras arreglos o arrays, no vectores.

El motivo es sencillo, en C++ (si te metes en el) existe un contenedor llamado vector, que se incluye como

#include <vector>

Los vectores son similares hasta cierto punto a los arrays, pero tienen herramientas para su manejo (por ejemplo los iteradores) que hacen su manejo mas seguro, desde el momento que el uso de iteradores es un "seguro" de que no te sales de los límites del mismo. Además los vectores tienen un tamaño dinámico. Esto es que no defines una cantidad de "casillas", sino que estas se añaden o eliminan según tus necesidades

Si ahora empiezas a llamar vectores a un array, luego puedes liarte.


Título: Re: Como funciona un arreglo o vector?
Publicado por: avesudra en 25 Agosto 2015, 20:58 pm
De todos modos, te recomiendo que llames a estas estructuras arreglos o arrays, no vectores.

El motivo es sencillo, en C++ (si te metes en el) existe un contenedor llamado vector, que se incluye como

#include <vector>

Los vectores son similares hasta cierto punto a los arrays, pero tienen herramientas para su manejo (por ejemplo los iteradores) que hacen su manejo mas seguro, desde el momento que el uso de iteradores es un "seguro" de que no te sales de los límites del mismo. Además los vectores tienen un tamaño dinámico. Esto es que no defines una cantidad de "casillas", sino que estas se añaden o eliminan según tus necesidades

Si ahora empiezas a llamar vectores a un array, luego puedes liarte.

Desgraciadamente en la Universidad, al menos aquí en España y en la mía, llaman a las estructuras "registros" y a los arrays "vectores"(provocando verdaderos dolores de cabeza cuando los estudiantes ven MIPS ya que los registros para ellos son estructuras y van más perdidos que qué).

Pero claro también usan fflush(stdin) como solución galáctica... así que la fiabiliad de estas "convenciones" para los nombres es un tanto cuestionable.

Y ya ni hablar de los que van de guays porque tienen un título(y son profesores) y mucha gente de este foro que no tiene papel que lo acredite le da 30000 vueltas en cualquier cosa.

Saludos y FKT te recomiendo lo mismo que Orubatosu.