2011-08-21 3 views
1

http://www.ideone.com/kRaMj설명 CONST 내가 algogeeks 포럼이 발견 저장

의 동작을 수정하는 방법에 대해 필요합니다. 아무도 i의 값이 여전히 0이지만, 주소가 같더라도 *p2 인 것을 보여줄 수 있습니까?

#include<stdio.h> 

int main() 
{ 
    const int i = 0; 
    int * p ; 
    p = (int *) & i; 
    *p = 2; 

    printf("(i,p): %x %x \n",&i,p); 
    printf("(i,p): %d %d \n",i,*p); 
} 

프로그램의 출력은 다음

(i,p): bfdf6234 bfdf6234 
(i,p): 0 2 
+0

링크를 게시하는 대신 질문에 코드를 포함하십시오. –

+0

@Nikhil : Q/Answers **를 포함하도록 노력하십시오. ** 여기 Ideone의 코드에 대한 링크를 게시했지만 복제 해 주어서 좋습니다. 그 이유는 링크가 어떤 이유로 링크가 무효화 될 경우, Q는 여전히 유효 할 것이고 그 응답은 다른 누군가에게 도움이 될 것입니다. –

+0

죄송합니다 실제 코드가 아니라 링크 게시. 미래의 게시물을 염두에 두어야합니다. – Nikhil

답변

9

그 코드는 정의되지 않은 동작을 야기한다.
상수 변수 i의 값을 p에 대한 포인터를 사용하여 변경하면 모든 베팅이 해제되고 모든 동작이 표시 될 수 있습니다.

정의되지 않은 동작은 어떤 일이 발생할 수 있으며 동작이 언어의 규칙을 정의하는 동작을 정의하지 않는 표준으로 설명 될 수 없음을 의미합니다.

+3

충분히 참. 이 경우 컴파일러는 'const' int를 수정하지 않고 단순히 상수 0을'printf'에 전파한다고 가정합니다. – Nemo

관련 문제