2017-03-25 6 views
2
#include <iostream> 

using namespace std; 

int main() { 
    int* z = new int(9); 

    cout << "address: " << z << endl; 
    cout << "value: " << *z << endl; 
    cout << "referance: " << &z << endl; 
    return 0; 
} 

의 차이, 나는 같은 주소를 제공하는 주소와 참조를 기대했지만를 heres 출력은 무엇 : 약포인터 변수는 COUT 값을 보면 VAR 및 VAR

address: 0x7fc452c032a0 
value: 9 
referance: 0x7fff5191b8d8 

그냥 궁금해서 그 이유는 평범한 값 (z) 값이 9 인 힙의 변수 주소입니다. 여기서 var (& z)는 스택에있는 포인터 변수의 주소입니까?

enter image description here

+2

'& z '의'&'는 _address-of_ 연산자입니다. –

+0

'* (& z)'를 쓰면'z' –

답변

1

몇 가지 기본 사항을 먼저 살펴 보겠습니다.

  • 변수는 메모리에서 우리가 작업하고있는 값을 저장하는 위치를 나타내는 데 사용되는 이름입니다.

  • C/C++에서 '&'을 사용하면 변수의 주소를 얻을 수 있습니다.

  • 포인터는 변수의 주소를 저장하는 변수입니다.예를 들어, 당신이 참조하는 예제에서

    int* z = new int(9); 
    

    변수 z는 9 [new int (9)] 값의 주소를 저장합니다.

이제 마지막이 변수는 어떤 메모리 위치에 저장되어야하며 이것은 앰퍼샌드 (&)를 사용하여 액세스 될 수있다.

&z //gives the address of the pointer to value 9 (address of variable z). 

이것은 포인터와 포인터 (멀티 레벨 포인터)에 대한 포인터의 작동 방식과 동일합니다.

+0

에 오타가 생깁니다. 그것을 바로 잡자. 멋지다. –

+0

int 9가 주소 z 또는 주소 z에 저장되어 있습니까? –

+0

이렇게하면, 값 9의 주소는 변수 Z에 저장됩니다. 'int x = new int (9); int * z = & x;' –

3

&z이 포인터는 할당 된 ADRESS new int(9)를 저장 int * zADRESS를 지정인가 : 여기

은 시각화입니다.

포인터 z과 값 9은 메모리의 서로 다른 두 위치에 저장됩니다.

참조 여기에 단지 주소의 개념이 없습니다.

1
int* z; 

위의 명령문은 int 유형 선언의 포인터 변수를 의미합니다. 문 위

int* z = new int(); 

는 주소가 동적으로 int 유형의 변수를 포인터에 할당되는 것을 의미한다. 문 위

int* z = new int(9); 

9가 동적으로 할당에 저장되어있는 것을 의미한다. 코드의 라인 위

cout << "address: " << z << endl; 

는 포인터 변수 z의 주소를 알려줍니다. 코드의 라인 위

cout << "value: " << *z << endl; 

변수 z에 저장된 값을 알려줍니다.

cout << "referance: " << &z << endl; 

위의 코드 줄은 동적으로 생성 된 변수의 주소를 알려줍니다.