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

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

Barbara Streisand
풀어 주다: 2024-11-28 17:26:14
원래의
904명이 탐색했습니다.

Why Does a Const Variable at the Same Memory Address Show Different Values in C  ?

다른 값을 생성하는 동일한 주소의 변수

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

#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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