공용체 예시 질문이요

876
points
points
#include
union example{
int i;
char c;
};
int main(void)
{
union example v;
v.c = 'A';
printf("v.c:%c, v.i:%i\n",v.c,v.i);
v.i = 10000;
printf("v.c:%c, v.i:%i\n",v.c,v.i);
}
다음 프로그램을 돌려보면
v.c:A, v.i:-858993599
v.c:, v.i:10000
출력결과는 다음과 같은데, 제 생각에는 처음의 v.i의 결과는 알수없는 값이 나오는게 맞는데
두번째의 v.c의 결과는 예상이 안되네요. 처음에 v.c의 결과가 A이니 두번째 결과도 A가 나오는게
맞지 않나요.

points
공용체의 정의를
공용체의 정의를 참고하세요!!!
공용체안의 가장큰 자료형의 메모리 공간을 같이 사용한다고 공용이라는 언어가 붙은겁니다.
혹시 정의를 알고 계신데.. 제 답변이 이상하다면 좀더
추가적인 질문 바랍니다.;;
不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.
points
re
아 그렇군요 메모리공간을 같이 쓰고 있다는 사실은 알았는데, 동시에 쓴다면 어떤 변수가 우선순위를
가지게 되는건가요? v.c와 v.a중 어떤것을 가질지 어떻게 예상을 하죠?
points
예상할 수
예상할 수 없습니다.
따라서 v.c와 v.a가 같은 의미를 가진 값이 아니라면,
공용체를 쓰는 것은 코딩에 혼란만 줄 수 있습니다.
--
Emerging the World!
points
나중에 대입한 v.i =
나중에 대입한 v.i = 10000이 같은 메모리주소를 가지는 v.c의 값도 바꾸는겁니다.
points
10진수 10000 은
10진수 10000 은 16진수로 2710 이 됩니다.
little endian 방식이라고 가정하면,
union v 는 4바이트이므로
v.i = 10000; 을 했을 때,
메모리는
10 27 00 00
가 됩니다.
이 시점에서 v.c 의 값을 물어봤으므로,
v.c 의 값은 16진수로 10. 즉 10진수로 16
ASCII 코드 16에 해당하는 값을 보면 v.c:
이렇게 찍히는게 맞습니다.