비상수 포인터를 통해 const 수정
다음 코드를 고려하세요.
<code class="cpp">const int e = 2; int* w = (int*) &e; // (1) cast to remove const-ness *w = 5; // (2) cout << *w << endl; // (3) outputs 5 cout << e << endl; // (4) outputs 2 cout << "w = " << w << endl; // (5) w points to the address of e cout << "&e = " << &e << endl;</code>
In (1 ), w는 e의 주소를 가리킨다. (2)에서는 해당 값이 5로 변경됩니다. 그러나 *w와 e의 값을 표시하면 해당 값이 다릅니다. 그런데 포인터 w와 e의 주소를 인쇄하면 둘의 값은 같습니다.
왜 e가 5로 변경되었는데도 여전히 2를 포함합니까? 별도의 위치에 보관되었나요? 아니면 임시? 그런데 w가 가리키는 값이 왜 여전히 e의 주소인가요?
답변
const 값을 수정하면 정의되지 않은 동작 영역에 들어가게 됩니다. 그러나 추측하자면:
위 내용은 const가 아닌 포인터를 통해 `const` 값을 수정하면 정의되지 않은 동작이 발생하지만 여전히 포인터와 원래 변수에 대해 다른 값을 인쇄하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!