다른 값을 생성하는 동일한 주소의 변수
다음 코드 조각을 고려하세요.
#include <iostream> using namespace std; int main(void) { 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; return 0; }
이 코드는 놀랍게도 다음을 출력합니다. :
40 65 0xbfacbe8c 0xbfacbe8c
어때요? 동일한 주소에 있는 변수 a1이 두 개의 서로 다른 값인 40과 65를 생성할 가능성이 있습니까?
답변:
이 동작은 정의되지 않은 동작의 결과입니다. 이 코드는 const 변수(a1)의 값을 수정하여 C 규칙을 위반합니다. C 표준(섹션 7.1.6.1 단락 4)에 따르면, 수명 동안 const 개체를 수정하려고 하면 정의되지 않은 동작이 발생합니다.
이 경우 포인터 c1을 통해 const 변수 a1을 수정하면 다음과 같은 결과가 발생합니다. 예측할 수 없는 결과. 컴파일러는 수정 사항을 무시하거나 문서화된 방식으로 동작하거나 심지어 프로그램을 종료할 수도 있습니다.
따라서 a1이 두 개의 서로 다른 값을 생성하는 관찰된 동작은 정의되지 않은 동작의 결과입니다. const 변수를 수정하는 것은 권장되지 않으며 예측할 수 없고 잘못된 프로그램 동작을 초래할 수 있습니다.
위 내용은 C에서 동일한 메모리 주소의 Const 변수가 다른 값을 표시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!