union
오버레이 서로의 상단에 나열된 모든 부재 (일부 중첩 초기 부분보다 더 연장 될 수 있지만)은 동일한 메모리 부분에 기록된다. 이를 염두에두고 출력물을 이해해야합니다.
당신이 정말로 트위스트 시나리오에서 10
의 출력을 기대한다면 당신은 아마 struct
의 행동을 생각하고, 그것은 동시에 노동 조합에 저장된 다른 값의 일부를 가지고하는 것이 가능하지만, 일반적으로 부분적으로 덮어 쓰기 값은 손상된 것으로 간주됩니다. 예를 들어,이 :
union {
char a;
struct { char ba; char bb; } b;
} s;
동시에 s.a
및 s.b.bb
를 저장할 수 있지만, s.a
이후 s.b.ba
에 s.a
발을 굴러에 할당 s.b.ba
를 중복하지 않으며, 암시 적으로 s.b
모두가 더 이상 신뢰할 수 있습니다.
종종 다른 유형을 저장하기위한 노동 조합은 조합원이 사용하고 그 첫 번째 구성원 기록 구조체에 포함됩니다
: 표시하기 위해 여기
struct {
int type;
union {
char ch;
int n;
} datum;
} atom;
이 type
아마 열거 값을 포함 할 datum.ch
또는 datum.n
여부 원자에서 사용되었다.
당신이 무엇을 요구하고 있는지 확실하지 않습니다. 그러나 [Google] (https://www.google.com/search?q=c+union)에는 C 노조에 관한 많은 정보가 있습니다 –
Thanks @JensGustedt. 오해의 소지가있는 설명을 삭제했습니다. (가장 최근에 작성된 필드를 읽는 것으로 가정합니다) – Himanshu