Указатели и адресная арифметика - C (СИ)
Формулировка задачи:
Помогите с заданием
Язык C. Задание звучит так:
2) Для этого фрагмента программы написать значения каждой переменной после каждого шага. Адреса переменных: a – 100, p1 – 120, p2 – 124, s.x – 128, s.y – 132. N=10 в данном случае.
struct str {int x; int y;};
int a[5] = {1, 2, 3, 4, 5};
int *p1, *p2;
str s;
p1 = &a[N%5+1]; //строка 1
p2 = a+N/5+1; //строка 2
s.x = *p1; // строка 3
s.y = *p2++; //строка 4
*(p1-2)=s.y; //строка 5
p2=&s; //строка 6
p2->x=p1[1]; //строка 7
p2–>y=s.y; //строка 8
a[5]=s.x; //строка 9
Решение задачи: «Указатели и адресная арифметика»
textual
Листинг программы
p1 = &a[N%5+1]; // p1=104 p2 = a+N/5+1; // p2=112 s.x = *p1; // s.x=2 s.y = *p2++; // s.y=4, p2=116 *(p1--)=s.y; // a[0]=4, p1=100 p2=&s; // p2=128 p2->x=p1[1]; // s.x= 2 p2–>y=s.y; //s.y=4 a[5]=s.x; // a[5]=2
Объяснение кода листинга программы
В данном коде выполняются следующие действия:
- Инициализируется указатель
p1
на элемент массиваa
с индексом, вычисляемым какN % 5 + 1
, то есть на один элемент вперед относительно остатка от деленияN
на 5. Значениеp1
при этом будет равно 104. - Инициализируется указатель
p2
на элемент массиваa
, смещенный вперед относительноN/5+1
. Значениеp2
при этом будет равно 112. - Значение указателя
p1
присваивается элементуs.x
. Таким образом,s.x
становится равным 2. - Значение указателя
p2
присваивается элементуs.y
, после чего указательp2
инкрементируется. В результатеs.y
становится равным 4, аp2
становится равным 116. - Значение указателя
p1
уменьшается на единицу, после чего значениеp1
присваивается элементу массиваa
с индексом 0. Таким образом,a[0]
становится равным 4, аp1
становится равным 100. - Инициализируется указатель
p2
на структуруs
. Значениеp2
при этом будет равно 128. - Значение указателя
p2
используется для доступа к полюx
структурыs
, которое становится равным значению указателяp1
(которое равно 104), то естьs.x
становится равным 2. - Значение указателя
p2
используется для доступа к полюy
структурыs
, после чего указательp2
уменьшается на единицу. В результатеs.y
становится равным 4, аp2
становится равным 116. - Значение поля
s.y
присваивается элементу массиваa
с индексом 5. Таким образом,a[5]
становится равным 4.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д