Рубрики

C | Структура и Союз | Вопрос 8

union test

{

    int x;

    char arr[4];

    int y;

};

  

int main()

{

    union test t;

    t.x = 0;

    t.arr[1] = 'G';

    printf("%s", t.arr);

    return 0;

}

Предсказать вывод вышеуказанной программы. Предположим, что размер целого числа составляет 4 байта, а размер символа равен 1 байту. Также предположим, что выравнивание не требуется.
(A) Ничего не напечатано
(B) G
(C) Символ мусора, сопровождаемый 'G'
(D) Символ мусора, сопровождаемый 'G', сопровождаемый большим количеством символов мусора
(E) Ошибка компилятора

Ответ: (А)
Объяснение: Поскольку x и arr [4] совместно используют одну и ту же память, когда мы устанавливаем x = 0, все символы arr устанавливаются как 0. O является значением ASCII '/ 0'. Когда мы делаем «t.arr [1] =« G »», arr [] становится «/ 0G / 0/0». Когда мы печатаем строку, используя «% s», функция printf запускается с первого символа и продолжает печатать, пока не найдет / 0. Поскольку первым символом является / 0, ничего не печатается.
Тест на этот вопрос

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

C | Структура и Союз | Вопрос 8

0.00 (0%) 0 votes