Por lo que sé sobre el operador '&', devuelve la dirección base del operando en la memoria.Comprensión del operador '&'
Imaginemos el siguiente escenario (como en mi máquina):
- sizeof (int) = 4 bytes
- sizeof (float) = 4 bytes
- sizeof (char) = 1 byte
Ahora, si escribo algo como esto:
void main() {
int i = 5411;
int *ip = &i;
char *c = &i;
printf("%d",*ip);
printf("%c",*c);
}
El primer printf() debería darme 5411. Hablando del segundo printf(), la dirección base de i contiene 10101001 (orden superior 8 bits = 1 byte para el puntero de tipo char). Por lo tanto, * c debería dar 169, que cuando se convierte a% c es un carácter no válido.
Pero el compilador me está dando '#' u otro resultado válido. Por que es esto entonces ? ¿Alguna entrada?
EDITAR (tomado del comentario del autor sobre una de las respuestas):
Eso era sólo un caso ficticio, ya que estaba lejos de la máquina real.
El caso actual es i = 5411
En cualquier caso, si intenta "imprimir" un "char" se mostrará como un carácter, no como el código entero correspondiente. –
probablemente tenga algo que ver con la codificación de caracteres que se usa, supongo. –
Sí, yo también estoy de acuerdo con eso. Pero debe haber una razón para obtener el valor '#' de la última impresión(). No es un valor de basura. –