2013-08-22 2 views
0

포인터의 기본 원칙을 이해하려고합니다. 누군가 포인터 변수에 값을 할당하면 실제 변수 값이 변경된다고했습니다. 그게 사실이야? 나는 코드의 조각을 쓴이있어 :C의 포인터, 간단한 의문

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
    int x=5; 
    int *address_of_x = &x; 
    int y = *address_of_x; 
    *address_of_x = 9; 
    printf("The value of x is: %d\n", x); 
    printf("The X is at: %p\n", &address_of_x); 
    printf("value of y = %d\n", y); 
    return 0; 
} 

과 같은 출력을 가지고 :

The value of x is: 9 
The X is at: 0028FF04 
value of y = 5 

는 "Y"의 값이 5 체재 왜? 명령 명령 때문에? int y = *address_of_x;는 이것을 'address_of_x가'5을 포함 따라서 y

+0

다음번. 주소는 집을 가리 킵니다. 주소를 여러 곳에 복사 할 수 있으며 집을 이동하지 않으며 집을 파괴하지 않는 주소를 지우면됩니다. –

+0

(목사를 불러 집안을 복제하거나 한 집을 다른 집처럼 보이게하는'*'(선언이 아닌))을 사용하는 경우 –

+1

대부분의 영어권 세계에서 "의심" "질문"과 동의어가 아닙니다. "의심"이라는 단어는 불신을 의미합니다. –

답변

3

y은 포인터가 아니므로 정수입니다. 이 라인 :

int y = *address_of_x; 

는 기본적으로 값이 address_of_x 가리키는 받아 y에 복사 "라고

대신이 일을 한 경우.

int *y = address_of_x; 

그런 다음 *y9 될 것이다.

1

예 그 때문에 명령 의 순서이었다. address_of_x에는 x에 대한 포인터가 할당되지만 y은 완전히 독립적 인 int 변수입니다. 포인터를 통해 x과 동일한 값을 지정하지만 xy은 다른 변수입니다.

이 시점에서 *address_of_x에 할당하면 x의 값이 변경되지만 y은 변경되지 않습니다.

3

예, 그것이 그 값을 가지고 실행되면

0

포인터가 x이 아닌 포인터는 y입니다. x*address_of_x을 가리키는 포인터 이후에 y에 할당됩니다. *address_of_xx를 가리키는 때문에 그래서 yx의 인쇄 값 5

시도의 값을 얻을 것이다, 그것은 9로 변경됩니다.

printf("value of x = %d\n", x); //output = 9 
0

명세서

int y = *address_of_x; 

변수를 수정한다 address_of_xy로하고

*address_of_x = 9; 

이후에 값을 할당되는 (여기 x이다)에 address_of_x 점하지 y.

1
+--------------+  
| 5   | 
|*address_of_x | 
+--------------+ 
     ^
     |   y=*address_of_x =5 
     | 
+--------------+ 
| address_of_x | 
| 0028FF04  | 
+--------------+ 

포인터의 주소를 포함

*address_of_x = 9 

+--------------+  
| 9   | 
|*address_of_x | 
+--------------+ 
     ^
     |   but y still 5 
     | 
+--------------+ 
| address_of_x | 
| 0028FF04  | 
+--------------+