Как переменная union получает доступ к членам? - PullRequest
0 голосов
/ 05 июня 2019
#include <stdio.h>

union p
{
    int x;
    char y;
} k = {1, 97};

int main()
{
    printf("%d\n", k.y);
}

Ответ - 1, и я не понимаю как. Кто-нибудь может объяснить, пожалуйста?

1 Ответ

3 голосов
/ 05 июня 2019

Первый член инициализатора помещается в первый именованный член объединения, поэтому изменяется значение всех членов, поскольку все члены объединения совместно используют одну и ту же память. Затем чтение из y считывает из значения, хранящегося в объединении, или 1.

Второй элемент инициализатора на практике игнорируется, но должен выдавать диагностику компилятора для совместимых компиляторов.

Для GCC эта диагностика должна выглядеть примерно так:

test.c:7:11: warning: excess elements in union initializer
 } k = {1, 97};
           ^~
test.c:7:11: note: (near initialization for ‘k’)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...