Может кто-нибудь помочь мне с объяснением обработки этого фрагмента кода - PullRequest
0 голосов
/ 12 мая 2019

На самом деле я скомпилировал это в онлайн-компиляторе c, вывод кода был 5 ... как происходила обработка ??

#include <stdio.h>

int main()
{
    struct ab {char a,b;};
    union abcd
    {
        int c;
        struct ab d;
    }k;
    k.d.a=5;
    k.d.b=0;
    printf("%d",k.c);
}

1 Ответ

1 голос
/ 12 мая 2019

у вас есть объединение между целым числом и структурой, содержащей 2 символа.

Код изменяет первый символ структуры.Из-за объединения это влияет на первый байт другого члена объединения, который является целым числом.

На машине с прямым порядком байтов, установка первого байта целого числа равным 5 делает это целое число 5, и вот чтовы видите здесь.

На машине с прямым порядком байтов вы получите очень большое значение в зависимости от действительного размера целого числа.

...