У меня возникли проблемы с прошлым экзаменационным вопросом по указателям в c, который я нашел по этой ссылке, http://www.cl.cam.ac.uk/teaching/exams/pastpapers/y2007p3q4.pdf
Возникает вопрос:
Программист C работает с мало-конечная машина с 8 бит в байта и 4 байта в слове. компилятор поддерживает неравномерный доступ и использует 1, 2 и 4 байта для хранения char, short и int соответственно. программист пишет следующее определения (справа внизу) для доступа значения в основной памяти (внизу слева):
Смещение байта адреса
--------- 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) Запишите значения для следующих выражений C:
**i
p->c[2]
&(*pps)[1]
++p->i
Я получаю
**i == 0xc78
p->c[2] == '62'
++p->i == 0x1000000
Я не понимаю третий вопрос (&(*pps)[1]
), может кто-нибудь объяснить, что здесь происходит? Я понимаю, что указатель pps был разыменован, но затем адрес оператора был применен к значению. Разве это не так, как просить адрес константы, например, если бы я сделал это
int i = 7;
int *p = &i;
&(*p) //would this mean address of 7??
Заранее благодарим за любую помощь.