Был создан массив sA типа struct Alphabet, состоящий из 5 элементов и выглядит он так:
1a2b3c4d5e
Так как в структуре имеется 2 переменных, то при создании массива этого массива sA[5]=(1,'a',2,'b',3,'c',4,'d',5,'e'):
1 элемент будет состоять из двух переменных - это 1a (то есть i = 1, c = 'a')
1a
2 элемент будет состоять из двух переменных - это 2b (то есть i = 2, c = 'b')
2b
3 элемент будет состоять из двух переменных - это 3c (то есть i = 3, c = 'c')
3c
4 элемент будет состоять из двух переменных - это 4d (то есть i = 4, c = 'd')
4d
5 элемент будет состоять из двух переменных - это 5e (то есть i = 5, c = 'e')
5e
Так как это массив, то эти все элементы будут идти друг за другом:
1a2b3c4d5e
sA[0] = 1a
sA[1] = 2b
sA[2] = 3c
sA[3] = 4d
sA[4] = 5e
Дальше создается указатель *psA типа struct Alphabet
Ему присваивают начальный адрес массива, то есть адрес элемента sA[0]
Цикл k=0:
Так как указатель psA имеет такой же тип, как и массив, то он может спокойно перемещаться по элементам этого массива и в строке psA++ он перемещается на следующий элемент: psA = sA[1]
И на экран выводится значение переменной c элемента sA[1] ,
psA->c = b
Цикл k = 1
Указатель psA перемещается на следующий элемент: psA = sA[2]
И на экран выводится значение переменной c элемента sA[2] ,
psA->c = c
Цикл k = 2
Указатель psA перемещается на следующий элемент: psA = sA[3]
И на экран выводится значение переменной c элемента sA[3] ,
psA->c = d
Цикл k = 3
Указатель psA перемещается на следующий элемент: psA = sA[3]
И на экран выводится значение переменной c элемента sA[3] ,
psA->c = e
Цикл k = 4
Цикл завершается, так как k < 4 (4 < 4), условие не выполняется, 4 не может быть больше себя.
Сигнатура функции f(int a, int *b, int &c). Первая переменная приходит по значению, вторая - по указателю, третья - по ссылке. Это значит, что изменения переменных b и с в функции будут влиять на переданные переменные.
Итак, мы имеем переменные
a = 3; b = 1; c = 2;
Передаём переменные в функцию как f(c, &b, a). Здесь а и с меняются местами.
В функции получаем
a = 2; b = 1; c = 3;
++a - увеличивает переменную на 1 и возвращает 3. a = 3
++(*b) - увеличивает переменную на 1 и возвращает 2. b = 2
с++ - возвращает 3 и увеличивает переменную на 1. с = 4.
Получаем return 3 + 2 + 3 (=8)
Переменные перед выходом
a = 3; b = 2; c = 4;
Выходим из функции. Не забываем про связь между переменными в вызове f(c, &b, a).
Был создан массив sA типа struct Alphabet, состоящий из 5 элементов и выглядит он так:
1a2b3c4d5e
Так как в структуре имеется 2 переменных, то при создании массива этого массива sA[5]=(1,'a',2,'b',3,'c',4,'d',5,'e'):
1 элемент будет состоять из двух переменных - это 1a (то есть i = 1, c = 'a')
1a
2 элемент будет состоять из двух переменных - это 2b (то есть i = 2, c = 'b')
2b
3 элемент будет состоять из двух переменных - это 3c (то есть i = 3, c = 'c')
3c
4 элемент будет состоять из двух переменных - это 4d (то есть i = 4, c = 'd')
4d
5 элемент будет состоять из двух переменных - это 5e (то есть i = 5, c = 'e')
5e
Так как это массив, то эти все элементы будут идти друг за другом:
1a2b3c4d5e
sA[0] = 1a
sA[1] = 2b
sA[2] = 3c
sA[3] = 4d
sA[4] = 5e
Дальше создается указатель *psA типа struct Alphabet
Ему присваивают начальный адрес массива, то есть адрес элемента sA[0]
Цикл k=0:
Так как указатель psA имеет такой же тип, как и массив, то он может спокойно перемещаться по элементам этого массива и в строке psA++ он перемещается на следующий элемент: psA = sA[1]
И на экран выводится значение переменной c элемента sA[1] ,
psA->c = b
Цикл k = 1
Указатель psA перемещается на следующий элемент: psA = sA[2]
И на экран выводится значение переменной c элемента sA[2] ,
psA->c = c
Цикл k = 2
Указатель psA перемещается на следующий элемент: psA = sA[3]
И на экран выводится значение переменной c элемента sA[3] ,
psA->c = d
Цикл k = 3
Указатель psA перемещается на следующий элемент: psA = sA[3]
И на экран выводится значение переменной c элемента sA[3] ,
psA->c = e
Цикл k = 4
Цикл завершается, так как k < 4 (4 < 4), условие не выполняется, 4 не может быть больше себя.
В итоге на экран выведется:
bcde
ответ: C
Преобразуем выражение в (++a)+(++(*b))+(c++).
Сигнатура функции f(int a, int *b, int &c). Первая переменная приходит по значению, вторая - по указателю, третья - по ссылке. Это значит, что изменения переменных b и с в функции будут влиять на переданные переменные.
Итак, мы имеем переменные
a = 3; b = 1; c = 2;
Передаём переменные в функцию как f(c, &b, a). Здесь а и с меняются местами.
В функции получаем
a = 2; b = 1; c = 3;
++a - увеличивает переменную на 1 и возвращает 3. a = 3
++(*b) - увеличивает переменную на 1 и возвращает 2. b = 2
с++ - возвращает 3 и увеличивает переменную на 1. с = 4.
Получаем return 3 + 2 + 3 (=8)
Переменные перед выходом
a = 3; b = 2; c = 4;
Выходим из функции. Не забываем про связь между переменными в вызове f(c, &b, a).
Значит после выхода переменные равны
a = 4; b = 2; c = 2 (передавалась по значению);
z = 8.
На выход будет подано 4228.