공용체 예시 질문이요

0
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가 나오는게

맞지 않나요.

appler의 이미지
3494
points

공용체의 정의를

0
points

공용체의 정의를 참고하세요!!!

공용체안의 가장큰 자료형의 메모리 공간을 같이 사용한다고 공용이라는 언어가 붙은겁니다.

혹시 정의를 알고 계신데.. 제 답변이 이상하다면 좀더

추가적인 질문 바랍니다.;;

laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

re

0
points

아 그렇군요 메모리공간을 같이 쓰고 있다는 사실은 알았는데, 동시에 쓴다면 어떤 변수가 우선순위를

가지게 되는건가요? v.c와 v.a중 어떤것을 가질지 어떻게 예상을 하죠?

dragonkun의 이미지
4285
points

예상할 수

0
points

예상할 수 없습니다.
따라서 v.c와 v.a가 같은 의미를 가진 값이 아니라면,
공용체를 쓰는 것은 코딩에 혼란만 줄 수 있습니다.
--
Emerging the World!

나중에 대입한 v.i =

0
points

나중에 대입한 v.i = 10000이 같은 메모리주소를 가지는 v.c의 값도 바꾸는겁니다.

10진수 10000 은

0
points

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:
이렇게 찍히는게 맞습니다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.