Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FKT en 7 Septiembre 2015, 19:38 pm



Título: Como funciona este arreglo?
Publicado por: FKT en 7 Septiembre 2015, 19:38 pm
Código
  1. #include <stdio.h>
  2.  
  3. int arreglo [5]
  4.  
  5. int main(){
  6.  
  7.    for(int i = 0; i > 5; i++)
  8.    {
  9.    printf("\nIngrese el valor del arreglo en la posicion %i: ",i);
  10.    scafn("%i",&arreglo[i]);
  11.  
  12. return 0;
  13.  
  14.  

Si declaramos un arreglo con 5 posiciones, (0, 1, 2, 3, 4)  por qué pone en el printf "arreglo ?? Si no hay ninguna posicion "i" Solo hay 5  ?¿


Título: Re: Como funciona este arreglo?
Publicado por: engel lex en 7 Septiembre 2015, 19:54 pm
"i" es una variable... la declaras en el for

Código
  1. for(int i = 0; i > 5; i++)

puedes traducirlo como

"para i empezando en 0; mientras que i sea mayor que 5; incrementa en 1 a i por ciclo"


viendo eso tienes un error (en realidad 2 porque te falta cerrar el for)


Título: Re: Como funciona este arreglo?
Publicado por: FKT en 7 Septiembre 2015, 19:57 pm
"i" es una variable... la declaras en el for

Código
  1. for(int i = 0; i > 5; i++)

puedes traducirlo como

"para i empezando en 0; mientras que i sea mayor que 5; incrementa en 1 a i por ciclo"


viendo eso tienes un error (en realidad 2 porque te falta cerrar el for)


Ya, sé como funciona el "for", y si , me he dejado el "}"  para cerrar el for, también sé que "i" es una variable xD Lo que pregunto es que que hace la "i" dentro del arreglo?? Y como funciona ?


Título: Re: Como funciona este arreglo?
Publicado por: engel lex en 7 Septiembre 2015, 20:03 pm
un arreglo es un señalador a una posición de memoria, el tipo es el largo del tipo de dato, el valor entre brackets es un multiplicador... ejemplo


arreglo aparta de la posición "326" de memoria, y aparta 5 espacios de 4 bits (tipo int)

cuando haces arreglo[0], sería "qué contiene la posición de memoria (326+4*0)?"

es decir
Código:
arreglo[0]

es similar a
Código:
*(arreglo+0)


Título: Re: Como funciona este arreglo?
Publicado por: FKT en 7 Septiembre 2015, 20:14 pm
un arreglo es un señalador a una posición de memoria, el tipo es el largo del tipo de dato, el valor entre brackets es un multiplicador... ejemplo


arreglo aparta de la posición "326" de memoria, y aparta 5 espacios de 4 bits (tipo int)

cuando haces arreglo[0], sería "qué contiene la posición de memoria (326+4*0)?"

es decir
Código:
arreglo[0]

es similar a
Código:
*(arreglo+0)

Sigo sin entender el motivo de la variable "i" dentro de el arreglo.


Título: Re: Como funciona este arreglo?
Publicado por: engel lex en 7 Septiembre 2015, 20:16 pm
i es un señalador a la posición de memoria... es decir


Código:
*(arreglo+i)

el primer valor será (con el ciclo corregido)

Código:
imprime *(arreglo+0)
imprime *(arreglo+1)
imprime *(arreglo+2)
...etc...


Título: Re: Como funciona este arreglo?
Publicado por: FKT en 7 Septiembre 2015, 20:46 pm
i es un señalador a la posición de memoria... es decir


Código:
*(arreglo+i)

el primer valor será (con el ciclo corregido)

Código:
imprime *(arreglo+0)
imprime *(arreglo+1)
imprime *(arreglo+2)
...etc...

Me estas diciendo que *(arreglo+0) es lo mismo que arreglo[0], *(arreglo+1) es igual que arreglo[1] y así... Si me estas diciendo eso, ya lo sé aunque creo que no has entendido mi pregunta o es que no me he explicado bien. Vuelvo ha hacer la pregunta:

Código
  1. #include <stdio.h>
  2.  
  3. int arreglo [5]
  4.  
  5. int main(){
  6.  
  7.    for(int i = 0; i > 5; i++)
  8.    {
  9.    printf("\nIngrese el valor del arreglo en la posicion %i: ",i);
  10.    scafn("%i",&arreglo[i]);
  11.    }
  12. return 0;

Aquí en:
Código
  1. scanf("%i",arreglo[i]);

La variable "i" a que parte del programa hace referencia y como la opera?


Perdona.. Modifico este mensaje porque creo que lo he entendido, puede ser que en "arreglo" significa "arreglo[Aquí si por ejemplo "i" es igual a 20 pues hará referencia a el índice 20??]"


Espero tu respuesta.


Título: Re: Como funciona este arreglo?
Publicado por: RockPosts en 7 Septiembre 2015, 21:21 pm
Como se ha dicho en este hilo, un arreglo, es decir, un puntero, apunta hacia una dirección de memoria. Ahora bien, en en caso de los arreglos, pasa lo siguiente:

Pongamos este ejemplo:
Código
  1. #include <iostream>
  2.  
  3. int main() {
  4.        int valor[4] = {2, 3, 1, 4};
  5.  
  6.        std::cout << valor[0] << std::endl;
  7.  
  8.        std::cin.get();
  9.        return 0;
  10. }

En este caso, hemos declarado e inicializado un arregle de 4 elementos. Aunque tu veas el arreglo así, en realidad lo que almacena 'valor' es una dirección que apunta al primer byte de ese arreglo:

(http://k30.kn3.net/6/4/6/D/8/1/886.png)

Como puedes ver,lo que almacena en realidad nuestro arreglo, es donde se encuentran los datos del arreglo

Entonces, volviendo al tema, lo que le debes pasar a scanf es DONDE quieres que guarde lo que ha leido de la consola, entonces debes pasarle LA DIRECCION DEL ELEMENTO DEL ARRAY QUE LE QUIERES PASAR. Para hacer esto, primero debes indicar que elemento quieres cambiar (lo cual se hace con los corchetes []), y después debes pasarle donde está ese elemento, con el operador &.

Entonces, en resumidas cuentas, lo que hace este programa es acceder a los elementos del arreglo por orden, porque la variable 'i' va tomando valores desde 0 hasta 4


Título: Re: Como funciona este arreglo?
Publicado por: FKT en 7 Septiembre 2015, 22:54 pm
Por fin lo he entendido  ;D Gracias gente y Saludos.


Título: Re: Como funciona este arreglo?
Publicado por: RockPosts en 7 Septiembre 2015, 23:34 pm
Me alegro que te sirviese!! Cada vez que se se te resuelva una duda, marca el hilo como que ya ha sido respondida tu duda


Título: Re: Como funciona este arreglo?
Publicado por: FKT en 8 Septiembre 2015, 11:25 am
Me alegro que te sirviese!! Cada vez que se se te resuelva una duda, marca el hilo como que ya ha sido respondida tu duda

Listo.
Gracias por el consejo.