2011-12-27 1 views
1

나는 코드데브 C++ 포인터 주소의 경우 다른 결과를 제공

int main(){ 
    int x = 36; 
    int const * p1; 
    p1 = &x; 

    printf("Values at p1: %d\n", *p1); 
    p1=0; 

    printf("Addresses pointed to by p1: %p ", &p1); 
    return 0; 
} 

의 다음 세트는

Addresses pointed to by p1 gives 0028FF480 

    int main(){ 
    int x = 36; 
    int const * p1; 
    p1 = &x; 

    printf("Values at p1: %d\n", *p1); 
    p1=0; 

    printf("Addresses pointed to by p1: %p ", p1); 
    return 0; 
    } 

주소가 P1 가리키는 제공

00000000 왜 이러한 차이를 제공 한 나는 양쪽 모두 같은 가치를 줄 것이라고 생각했다.

+1

Whay p1과 & p1이 같아야한다고 생각하십니까? –

+0

오, 젠장, 나는 .. 너를 얻었 어. – user882196

+4

dev-C++에는 ancienct 컴파일러가 함께 제공됩니다. 코드 블럭이나 qtcreator 나 cdt로 eclipse를 시도해 보시고 dev-C++는 사용하지 마십시오. – kechapito

답변

0
p1=0; 

출력에 제로 "P1"하지

*p1=0; 
+0

그것은 상수에 ponter 그 일을 할 수 없어 :) – user882196

+0

귀하의 예제에서는 불가능하지만, 내가 차이를 설명하기 위해 그것을 말했다. 첫 번째 예에서는 포인터를 0으로 설정하고 표시하고, 두 번째 예에서는 새 포인터를 만들고 그 주소를 표시합니다. – Listing

1

수행되어야 그것의 콘텐츠 모두 따라서 상이한 차이를 가리키는 포인터를 설정한다.

p1은 포인터가 가리키는 변수의 주소를 반환합니다.

&p1p1 포인터가 메모리에 저장되어있는 주소를 반환합니다.

+0

그리고 포인터 P1은 포인터가 가리키는 곳과 매우 다른 장소에 저장되어있을 가능성이 큽니다. – Raveline

1

처음에는 p1은 의 주소 (&x으로 획득)를 저장합니다. 나중에 널 주소를 저장하도록 p1을 설정하십시오.

첫 번째 조각에서 당신은하지 p1에서 저장된 주소 를 인쇄하기로 결정하지만, p1 자체주소. p1은 다른 변수와 마찬가지로 변수이며 나머지 변수와 마찬가지로 &p1은 해당 변수의 주소를 제공합니다. 이는 p1으로 액세스 할 수 있으며 두 번째 발췌 문장이 인쇄 한 값과 다릅니다. 다른 변수처럼

I like pictures

, 당신은 변수 p1의 주소를 변경할 수 없습니다, 당신은 단지 그것을 저장하는 값을 변경할 수 있으며, 포인터의 경우는 너무 값이 주소인지 발생합니다.