2016-12-18 3 views
0

이었고, 다음 코드는 나에게 주어졌다 : -연합 (EU) 및 메모리 관리는 내가 인터뷰에서

union mix 
{ 
    int i; 
    char c[2]; 
}; 

int main() 
{ 
    union mix key; 
    key.i=512; 
    printf("\n %d,%d,%d",key.i,key.c[0],key.c[1]); 
    return 0; 
} 

을하고 집에 와서 나는 출력을 가지고 시스템에 그것을 실행했을 때 : - 512,0 , 2.

누구나 설명해 줄 수 있습니까 어떻게 작동합니까? 아니면 c [1] = 2입니까?

편집 : 내가 아는 건 메모리의 비트 저장과 관련이있다.

+2

C 개발자를위한 인터뷰에서 데이터 유형과 메모리가 어떻게 작동하는지 모르겠다면 ... 데이터가 메모리에 어떻게 저장되어 있는지 이해하고 이해해야합니다. –

+0

Sami 그것은 C 개발자를위한 인터뷰가 아니 었습니다. HR 담당자가 개발자의 C 기술을 테스트하기로 결정한 Java에 대한 인터뷰였습니다. D – NeoR

+0

@ NeoR : 음, 그게 좋지는 않습니다 ... – alk

답변

5

노조입니다. 즉, ic은 같은 메모리를 차지합니다.
512는 0x200이며 첫 번째 바이트는 0이고 두 번째 바이트는 2입니다 (각 바이트는 두 자리 16 진수).
물론 이것은 CPU의 엔디안에 따라 다릅니다.

+0

엔디안에 대해 설명해 주시겠습니까? – NeoR

+0

@ NeoR - 할 수 있지만 위키 백과에서 더 잘 할 수 있습니다. https://en.wikipedia.org/wiki/Endianness. 그것은 기본적으로 바이트가 배열되는 순서입니다. 예는 리틀 엔디안입니다. –

+0

OP 코드는'key.c [0] = 0'과'key.c [1] = 2'를 _decimal_ 값으로 출력하고 이것이 지정된 바이트의 _decimal_ 표현임을 지적하는 것이 가치가 있다고 생각합니다 . 우연히'0x00' ='0'과'0x02' ='2'입니다. 즉,'key.i = 350'이라면 결과는 16 진수 표현과 같지 않을 것입니다. –

관련 문제