Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: apoeti en 10 Julio 2014, 17:05 pm



Título: Problema con la notación de punteros
Publicado por: apoeti en 10 Julio 2014, 17:05 pm
Hola.
Me ha surgido una pequeña duda repasando el tema de los punteros. La duda sale a partir de este código:

Código
  1. #include <stdio.h>
  2.  
  3. void main(void)
  4. {
  5. char *p;
  6.  
  7. p = (char*)3500; /* La duda me surge con este (char *) */
  8. while (p< (char*)5500)
  9. {
  10. printf("%c", *p);
  11. p++
  12. }
  13. }

Como digo en el código, la duda me surge con el (char *). No entiendo muy bien para qué sirve. Me estuve informando un poco acerca del casting de punteros, pero eso es con punteros genéricos void, y aquí no parece que tenga mucho que ver ¿Esa sentencia sería equivalente a esta otra?

Código
  1. *p = 3500;

Un saludo y gracias de antemano.


Título: Re: Problema con la notación de punteros
Publicado por: eferion en 10 Julio 2014, 17:24 pm
Código
  1. p = (char*)3500;

En esa línea estás haciendo que el puntero p apunte a la dirección 3500.

El cast lo hace porque a "p" le estás pasando un entero... y dado que "p" es un puntero, fuerza la compatibilidad entre tipos con un cast.

El programa básicamente imprime por pantalla el contenido de la memoria de la posición 3500 a la 5500.


Título: Re: Problema con la notación de punteros
Publicado por: apoeti en 10 Julio 2014, 17:28 pm
Y el hecho de que fuerce un cast a char es porque el puntero "p" está declarado como apuntador a char, ¿no? ¿Podría haberse elegido cualquier otro tipo para apuntar? ¿No se podría haber elegido tipo int para evitar el casting?


Título: Re: Problema con la notación de punteros
Publicado por: MinusFour en 10 Julio 2014, 17:49 pm
No se si el compilador te tire algún error pero basicamente está diciendo que está apuntando a un dato de typo char en la dirección 3500. CUando lo dereferencias estás escribiendo/leyendo en un byte. Me imagino que si te acepta un int* cuando lo dereferencias estás escribiendo/leyendo en 4 bytes, pero no estoy seguro si no te tire error el compilador.


Título: Re: Problema con la notación de punteros
Publicado por: eferion en 10 Julio 2014, 20:45 pm
Y el hecho de que fuerce un cast a char es porque el puntero "p" está declarado como apuntador a char, ¿no? ¿Podría haberse elegido cualquier otro tipo para apuntar? ¿No se podría haber elegido tipo int para evitar el casting?

se hace un cast a char* porque "p" es de tipo char*... si "p" fuese de tipo unsigned long long* entonces el cast hubiese sido a unsigned long long*


Título: Re: Problema con la notación de punteros
Publicado por: apoeti en 11 Julio 2014, 00:32 am
Ah, vale, entendido.

Gracias a los dos :)