Autor Tema: Puntero o un Arreglo. Comprendo pero cual es la diferencia entre ellos  (Leído 6229 veces)

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

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Puntero o un Arreglo. Comprendo pero cual es la diferencia entre ellos
« en: 26 de Septiembre de 2006, 16:33:14 »

Hola amigos creo ando dando algo de lata. Gracias por siempre ayudar me.


Hola he leido que

Los punteros apuntan a la direccion de una variable o arreglo. (creo)

digamos entonces


Código: Matlab M
  1. void funcion(int* puntero, int16 tamaño)
  2. {
  3.    int *ptr;
  4.    ptr = puntero
  5. printf("La direccion donde esta guardada la informacion es %u ",ptr )
  6.  
  7. }
  8.  
  9.  
  10. void main()   {
  11.  
  12.    while(TRUE)        
  13.    {
  14.       if(Boton)                          // Boton externo para generar la funcion y ver que onda
  15.       {
  16.          packet_buffer[0] = 0x01
  17.          packet_buffer[1] = 0x20
  18.          packet_buffer[2] = 0;
  19.          packet_buffer[3] = 0;
  20.          packet_buffer[4] = 9;
  21.          packet_buffer[5] = 'H';
  22.          packet_buffer[6] = 'i';
  23.          packet_buffer[7] = ' ';
  24.          packet_buffer[8] = 't';
  25.          packet_buffer[9] = 'h';
  26.          packet_buffer[10] = 'e';
  27.          packet_buffer[11] = 'r';
  28.          packet_buffer[12] = 'e';
  29.          packet_buffer[13] = '!';
  30.          funcion(packet_buffer, 14);
  31.       }
  32. }



Ahora  digamos ahora otro ejemplo:


Código: Matlab M
  1. if( bit_test(*packet_buffer, 0)
  2.         {
  3.      
  4.          }
  5.          else{
  6.  
  7.          }




Ademas veo  que se utiliza para pasar informacion digamos el arrglo anterior  packet_buffer, he visto que lo utilizan para mandar el arreglo por una funcion  y ya en la funcion podemos manipular cada elemento packet_buffer[N]

ENTONCES POR QUE DICEN QUE APUNTAN A UNA DIRECCION O NO LO ENTIENDO BIEN?




HELP ME



La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puntero o un Arreglo. Comprendo pero cual es la diferencia entre ellos
« Respuesta #1 en: 26 de Septiembre de 2006, 16:48:58 »

Hola amigos creo ando dando algo de lata. Gracias por siempre ayudar me.


Hola he leido que

Los punteros apuntan a la direccion de una variable o arreglo. (creo)

Ademas veo  que se utiliza para pasar informacion digamos el arrglo anterior  packet_buffer, he visto que lo utilizan para mandar el arreglo por una funcion  y ya en la funcion podemos manipular cada elemento packet_buffer[N]


Un puntero "apunta" a la dirección de memoria de una variable.

Hacer que un puntero sea igual a la primer posición de memoria de un arreglo es una cosa, pero de ahí a confundir un puntero con un arreglo no.  No son iguales.

Un arreglo es un conjunto de bytes continuos y acotados de un tipo de dato , por ejemplo 20 bytes char.

Un puntero es una variable que ocupará 2 bytes (típicamente en un pic) y que puede accesar a cualquier posición de memoria RAM.

Cuando quieres pasar un array como parámetro a una función, no se pasa el array sino solo un puntero a la primera posición.

La razón es que si pasas el array el compilador debe guardar cada byte del array en un lugar temporal (stack) y luego sacarlo de ahí en la función (para que la función pueda conocer su contenido).  Luego ahí trabajas con esos datos.  Esto es lento, consume memoria, velocidad y no es una buena costumbre.

El puntero en este caso nos ayuda a solo pasar el puntero al arreglo, y manejarnos con el puntero.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Puntero o un Arreglo. Comprendo pero cual es la diferencia entre ellos
« Respuesta #2 en: 26 de Septiembre de 2006, 16:59:34 »
Entonces no son iguales mmm se me cae el mundo.

Ok entonces sapra crear un arreglo siempre son continuos, es decir se guardan siempre en la memoria de forma contiguas, 0x32,033,0x034 , etc

a por eso simplemente se manda el puntero.

en tonces que pasa aqui?


Código: Matlab M
  1. int *puntero
  2. puntero=0
  3.  
  4.  if(bit_test(*puntero, 5)){
  5.  
  6.   }
  7.   else{
  8.  
  9.   }

Lo que empiricamente haria el micro seria del arreglo que tengo, puntero,  revisaria del byte  0 el bit 5.

AHORA OTRO EJEMPLO:

Código: Matlab M
  1. int *puntero
  2. puntero=0;
  3. puntero = puntero + 2;
  4.  if(bit_test(*puntero, 5)){
  5.  
  6.   }
  7.   else{
  8.  
  9.   }

entonces lo  que revisaria, por decirlo de alguna forma, revisa el byte 2 (0,1). Entonces revisaria el byte 2 y revisaria la posicion del quinto bit. verdad.


MMm bueno te dejomi reflexion de lo que acabas de enseñarme.

Espero que este bien mis ejemplitos.

GRACIAS
« Última modificación: 26 de Septiembre de 2006, 17:03:49 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puntero o un Arreglo. Comprendo pero cual es la diferencia entre ellos
« Respuesta #3 en: 26 de Septiembre de 2006, 17:27:30 »
Sí, el compilador ubicará los bytes de un arreglo uno a continuación de otro.

Tienes bien el concepto es así como lo has pensado  pero sí y solo si, el parámetro que accepta bittest es de tipo int.  Si acepta otro tipo de datos te debiera dar error el compilador o al menos un warning.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything