2013-09-28 6 views
0

C에서 int의 모든 바이트에 액세스 할 수있는 간단한 프로그램이 있습니다. 나는 32 비트 컴퓨터를 사용하고있다.C에서 개별 바이트에 액세스하려고 할 때 왜 형식 범위를 벗어나는 바이트에 액세스 할 수 있습니까?

int x = 1; 
unsigned char* bytes = (unsigned char*)&x; 
printf("Value: %d\n", bytes[10000]); 

마지막 줄 99을 인쇄 또는 유효한 문 이유를 이해하지 않습니다. 내 컴퓨터의 int에는 4 바이트 만 있어야합니다. bytes0-3의 키 값만 허용한다고 가정합니다.

무엇을 이해하지 못합니까?

+7

'bytes'는 변수가 아니라 경찰관입니다. 아무것도 허용하거나 거부하는 것이 아닙니다. –

답변

3

동작이 정의되지 않았기 때문에 "유효한 문"이 아닙니다. 그러나 이것은 제약 조건 위반이 아니며 컴파일러는 컴파일 타임에 잘못되었다고 말할 의무가 없습니다 그것이 틀렸다는 것을 알기 위해서, 컴파일러는 그것이 가리키는 것을 추적해야 할 것이고, 당신의 특정 예에서는 쉽지만, 일반적으로 그것은 가능하지도 않습니다.

(런타임시) bytes+10000 (표현식 bytes[10000]에 함축 됨)을 추가하면 결과 동작이 정의되지 않습니다. 정의되지 않은 동작은 프로그램에서 수행하는 작업에 대한 모든 배팅이 해제되었음을 의미합니다. 아무 것도 잘못되었다는 것을 알려주고, 희망대로 행동하지 않아도됩니다.

관련 문제