Что выведет код Junior Указатели и ссылки обновлено

Что выведет: арифметика указателей и ссылки

Вопрос

Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.

#include <iostream>

int main() {
    int a[] = {10, 20, 30, 40};
    int* p = a;
    int& r = a[2];
    p += 1;
    *p = 25;
    r += 5;
    int* q = &r;
    std::cout << a[1] << ' ' << a[2] << '\n';
    std::cout << (q - p) << '\n';
    std::cout << *(a + 3) << ' ' << 3[a] << '\n';
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 25 35, 1, 40 40. p сдвинулся на a[1], запись p = 25 меняет a[1]. r это a[2], после += 5 там 35. q указывает на a[2], p на a[1]: разность в элементах 1.

Что выведет

25 35
1
40 40

Разбор

p сдвинулся на a[1], запись *p = 25 меняет a[1]. r это a[2], после += 5 там 35. q указывает на a[2], p на a[1]: разность в элементах 1. *(a + 3) и 3[a] это одно и то же выражение *(3 + a): 40.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме