Рубрики

C | Операторы | Вопрос 6

Каковы результаты работы программы ниже?

#include <stdio.h>

int foo(int* a, int* b)

{

    int sum = *a + *b;

    *b = *a;

    return *a = sum - *b;

}

int main()

{

    int i = 0, j = 1, k = 2, l;

    l = i++ || foo(&j, &k);

    printf("%d %d %d %d", i, j, k, l);

    return 0;

}

(А) 1 2 1 1
(Б) 1 1 2 1
(С) 1 2 2 1
(D) 1 2 2 2

Ответ: (А)
Объяснение: Элемент управления в логическом ИЛИ переходит ко второму выражению, только если первое выражение приводит к FALSE. Функция foo () вызывается, потому что i ++ возвращает 0 (постинкремент) после увеличения значения i до 1. Функция foo () фактически меняет значения двух переменных и возвращает значение второго параметра. Таким образом, значения переменных j и k обмениваются, а выражение OR оценивается как TRUE.
Тест на этот вопрос

Рекомендуемые посты:

C | Операторы | Вопрос 6

0.00 (0%) 0 votes