>백엔드 개발 >C++ >C에서 동일한 메모리 주소의 변수가 다른 값을 출력하는 이유는 무엇입니까?

C에서 동일한 메모리 주소의 변수가 다른 값을 출력하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-03 03:44:09190검색

Why Do Variables at the Same Memory Address Output Different Values in C  ?

고유한 값을 출력하는 동일한 주소의 변수

다음 코드 조각을 고려하세요.

const int a1 = 40;
const int* b1 = &a1;
char* c1 = (char *)(b1);
*c1 = 'A';
int *t = (int*)c1;

cout << a1 << " " << *t << endl;
cout << &a1 << " " << t << endl;

놀랍게도 이 코드는 출력:

40 65
0xbfacbe8c 0xbfacbe8c

같은 주소(c1과 t)에 있는 변수가 두 개의 다른 값('A'와 65)을 생성하는 것이 어떻게 가능합니까?

설명은 다음과 같습니다. 정의되지 않은 행동의 본질. 이 경우 상수 변수(*c1)를 수정하면 정의되지 않은 동작이 트리거됩니다. C 표준에 따르면, 정의되지 않은 동작은 프로그램 종료부터 문서화된 동작(진단 메시지 포함 또는 제외)에 이르기까지 예측할 수 없는 결과를 초래할 수 있습니다.

이 특정 사례에서 정의되지 않은 동작을 통해 컴파일러는 코드를 최적화할 수 있습니다. 예상치 못한 방법. 상수 변수를 수정함으로써 컴파일러는 a1의 원래 값을 효과적으로 재정의합니다. 그러나 이 동작은 보장되지 않으며 다양한 컴파일러 및 환경에 따라 다를 수 있다는 점에 유의하는 것이 중요합니다.

따라서 상수 변수 및 포인터로 작업할 때 예측 가능한 프로그램을 보장하려면 이러한 변수를 수정하지 않는 것이 중요합니다. 행동.

위 내용은 C에서 동일한 메모리 주소의 변수가 다른 값을 출력하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.