2014-09-06 4 views
1

이 간단한 프로그램을 작성하여 유니온 변수의 메모리 표현을 확인했습니다.유니온의 메모리 표현

int main() 
{ 
    short s=0x7080; 
    union{ 
     char c; 
     short s; 
    }un1={s}; 
    printf(" %#X",un1.s); 
    return 0; 
} 

출력 :으로 un1 0x0045FE3C 80 000X80

메모리 표현. 나는 그것을 기대하고 있었다 0x0045FE3C 80 70
왜 변수 s이 보유하고 있지 않다 '80 70'?

답변

4

왜 변수가 '80 70 '을 보유하고 있지 않습니까?

c이 초기화되었으므로 s이 아닙니다. 초기화는 당신이 첫 번째 요소를 설정한다고 가정합니다, 그래서

un1 = {s}; 

cunion의 첫 번째 요소이기 때문에, 다음, chars 변환 un1.c에 할당 "을 의미한다.

할당 할 경우 예상대로,

un1 = {.s = s}; 

Demo. (인쇄 0X7080 : s로는, 지정된 초기화를 사용 ed).