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

Что выведет: указатель по значению и по ссылке

Вопрос

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

#include <iostream>

void f(int* p) { p = nullptr; }
void g(int*& p) { p = nullptr; }
void h(int* p) { *p = 7; }

int main() {
    int x = 1;
    int* p = &x;
    f(p);
    std::cout << (p != nullptr) << '\n';
    h(p);
    std::cout << x << '\n';
    g(p);
    std::cout << (p == nullptr) << '\n';
}

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

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

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

Коротко

Код выведет: 1, 7, 1. f получает копию указателя и обнуляет копию: p в main не изменился, печатается 1. h меняет объект по адресу: x == 7. g получает ссылку на сам указатель и обнуляет его: печатается 1.

Что выведет

1
7
1

Разбор

f получает копию указателя и обнуляет копию: p в main не изменился, печатается 1. h меняет объект по адресу: x == 7. g получает ссылку на сам указатель и обнуляет его: печатается 1.

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

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

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