Tengo problemas con una pregunta de examen pasado sobre los punteros en C y que encontré de este enlace, http://www.cl.cam.ac.uk/teaching/exams/pastpapers/y2007p3q4.pdfpuntero Difícil pregunta
La pregunta es la siguiente:
AC programador está trabajando con una máquina little-endian con 8 bits en un byte y 4 bytes en una palabra. El compilador admite el acceso no alineado y usa 1, 2 y 4 bytes para almacenar caracteres, cortos e int respectivamente. El programador escribe los siguientes de fi niciones (abajo a la derecha) para acceder a valores en la memoria principal (abajo a la izquierda):
Dirección Offset de byte
--------- 0 --1-- 2-- 3
0x04 | 10 00 00 00
0x08 | 61 72 62 33
0x0c | 33 00 00 00
0x10 | 78 0c 00 00
0x14 | 08 00 00 00
0x18 | 01 00 4c 03
0x1c | 18 00 00 00
int **i=(int **)0x04;
short **pps=(short **)0x1c;
struct i2c {
int i;
char *c;
}*p=(struct i2c*)0x10;
(a) Anote los valores de las siguientes expresiones C:
**i
p->c[2]
&(*pps)[1]
++p->i
consigo
**i == 0xc78
p->c[2] == '62'
++p->i == 0x1000000
No entiendo la tercera pregunta (&(*pps)[1]
), ¿alguien podría explicar lo que está pasando aquí? Entiendo que el puntero pps ha sido desreferenciado pero luego la dirección del operador se ha aplicado al valor. No es como pedir la dirección de una constante, por ejemplo, si lo hice
int i = 7;
int *p = &i;
&(*p) //would this mean address of 7??
Gracias de antemano por cualquier ayuda.
¿Por qué demonios preguntan estas cosas en lugar de enseñar programación útil y limpia? – slezica
Me alegra que alguien más lo piense así también. También me gustaría agradecer a todos por su esfuerzo en dar respuestas rápidas y concisas. Para mí es mucho más claro. –