У меня проблемы с прошлым экзаменационным вопросом по указателям в c, который я нашел по этой ссылке, http://www.cl.cam.ac.uk/teaching/exams/pastpapers/y2007p3q4.pdf
Вопрос такой:
Программист переменного токаработа с машиной с прямым порядком байтов с 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??
Заранее спасибо за любую помощь.