> 백엔드 개발 > C++ > `const` 변수의 메모리 주소를 수정하면 다른 값이 표시되는 이유는 무엇입니까?

`const` 변수의 메모리 주소를 수정하면 다른 값이 표시되는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-20 18:58:10
원래의
749명이 탐색했습니다.

Why Does Modifying a `const` Variable's Memory Address Show Different Values?

변수와 상수를 사용한 메모리 주소 동작 이해

const 변수와 이에 대한 포인터가 포함된 코드 조각에서 서로 다른 관찰 동일한 메모리 주소에 값이 있으면 의문이 생깁니다.

코드 분석

#include <iostream>
using namespace std;

int main() {
    const int N = 22;
    int * pN = const_cast<int*>(&N);
    *pN = 33;
    cout << N << '\t' << &N << endl;
    cout << *pN << '\t' << pN << endl;
}
로그인 후 복사

출력

22      0x22ff74

33      0x22ff74
로그인 후 복사

질문

왜 우리는 동일한 메모리 주소에서 두 개의 다른 값(22 및 33)을 관찰합니다. (0x22ff74)?

Answer

관찰과 달리 동일한 메모리 주소에 서로 다른 두 값이 저장되어 있지 않습니다. 이는 컴파일러 최적화의 결과입니다.

컴파일러는 const 변수에 대한 언급을 마치 변수의 컴파일 시간 값이 직접 사용되는 것처럼 처리할 권한이 있습니다. 이 코드에서 컴파일러는 코드를 다음과 같이 간주합니다.

int * pN = const_cast<int*>(&22);
*pN = 33;
로그인 후 복사

컴파일러는 이 최적화를 적용할 권한이 있습니다. 그러나 컴파일러는 이 작업으로 제한되지 않는다는 점에 유의하는 것이 중요합니다. const 변수와 관련된 메모리 수정과 같은 위험한 관행에 참여할 경우 하드 드라이브의 데이터를 잠재적으로 지울 수 있는 최적화를 포함하여 다른 최적화를 사용할 수 있습니다.

위 내용은 `const` 변수의 메모리 주소를 수정하면 다른 값이 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿