Обьяснить каждую строку выводящуюся на экран

Для следующего фрагмента программы записать в виде таблицы значение переменных после каждого шага программы (столбцы соответствуют переменным, строки – строкам программы). Тип int и указатели занимают по 4 байта. Компилятор расположил переменные по следующим адресам: a – 100, p1 – 120, p2 – 124, s.x – 128, s.y – 132.
Structstr {int x; inty;};
Inta[5] = {1, 2, 3, 4, 5};
int *p1, *p2;
str s;
p1 = &a[1%5+1];
p2 = a+1/5+1;
s.x = *p1;
s.y = *p2++;
*(p1-2)=s.y;
p2=&s;
p2->x=p1[1];
p2–>y=s.y;
a[5]=s.x
#include "stdio.h"
#include "math.h"
main()
{
struct str {int x; int y};
int *p1, *p2, *p;
struct str s;
int a[5]={1,2,3,4,5};
printf("p1=%p\n", p1);
printf("p2=%p\n",p2);
printf ("Start\n");
p1=&a[1%5+1];
printf("p1=%p *p2=%i\n", p2, *p2);
p=&s.x;
s.x=*p1;
printf("s.x=%i &s.x=%p\n", s.x, p);
s.y=*p2++;
printf ("s.y=%i *p2++=%i\n", s.y, *p2++);
printf ("1st *(p1-2)=%i", *(p1-2));
*(p1-2)=s.y;
printf(" 2nd *(p1-2)=%i\n", *(p1-2));
p2=&s;
printf ("p2=%p\n", p2);
((struct str*)p2)->x=p1[1];
printf ("p2->x=%i\n", ((struct str*)p2)->x);
((struct str*)p2)->y=s.y;
printf("p2->y=%i\n", ((struct str*)p2)->y);
a[5]=s.x;
printf ("a[5]=%i\n", a[5]);
} 28 декабря 2015 в 13:49
Ближайшие курсы
Создание интеллектуальных чат ботов на C#
Онлайн-курс
22
января
Интенсив «Сегментация клиентов. С чего начать?»
Онлайн-курс
22
января

Node.js
Серверное программирование на JavaScript
22
января
Новые статьи

Киберпонедельник в GeekBrains — сэкономьте до 160 000 рублей
12000

Борьба с болезнями, фолдинг белков и чтение мыслей
74400

Маркетолог-аналитик — новая специальность в GeekBrains
46400