해결된 질문
작성
·
66
0
안녕하세요 union 관련하여 질문드립니다.
예제 1에서 num.floating = 3.14 재사용하면서 덮어쓰기처럼 되었기에 그 밑의 num.integer가 쓰레기값이 되었다고 설명주셔서 이해하였습니다.
그런데 예제 2에서 data.integer를 통해 재사용하였는데 그 밑의 sizeof(data.character)값이 1 bytes로 출력될 수 있는지 궁금합니다.
저는 data.integer이 값을 할당한 직후기 때문에 sizeof(data.character)도 4 bytes로 출력될 것으로 예상했습니다.
감사합니다.
답변 1
1
질문이 너무 훌륭하십니다.
제가 설명을 올린대로, 공용체(union)에서는 모든 멤버가 같은 메모리 공간을 공유합니다. 그래서 data.integer = 65;
로 값을 변경하면 data.character
와 data.integer
가 가리키는 메모리 공간이 같기 때문에 data.character
의 값도 변경됩니다.
그런데 sizeof 연산자는 할당된 값과 상관없이 변수의 자료형 크기를 알려줍니다. 그래서 char 자료형의 크기는 항상 1byte로 리턴됩니다. 값이나 메모리 공유 여부와 상관없이 "자료형" 기준입니다.