2015-02-05 4 views
1

포인터를 사용하여 다른 변수에 포함 된 값을 전달하는 작은 바보 같은 프로그램을 만들었습니다. 저는 과제 전후에 관련된 세 가지 변수의 가치와 위치를 인쇄했습니다. 그러나 포인터 안에 들어있는 값과 포인터가 가리키는 변수와 다른 주소를 얻었고 그 이유를 이해할 수 없습니다.C++ : 포인터 값이 뾰족한 변수의 주소와 다릅니다

이 내 주요 프로그램 :

#include <iostream> 
#include "01.Point.h" 

using namespace std; 

int main() 

{ 

    int a,b; 

    cout << "Insert variable's value: "; 

    cin >> a; 

    int * point; 

    cout << "Before assignment:" << endl; 

    printeverything (a,b,point); 

    point = &a; 

    b = * point; 

    cout << "After assignment:" << endl; 

    printeverything (a,b,point); 

    cout << endl; 

} 

그리고이 제 기능의 구현 :

#include <iostream> 
#include "01.Point.h" 

using namespace std; 

void printeverything (int a, int b, int * c) { 

    cout << "First variable's value: " << a << "; its address: " << &a << endl; 

    cout << "Second variable's value: " << b << "; its address: " << &b << endl; 

    cout << "Pointer's value: " << c << "; its address: " << &c << endl; 

} 

b는 성공적으로의 값을 가져옵니다, 그래서 모든 것이 잘 작동하지만,이 전체 출력 :

Before assignment: 
First variable's value: 5; its address: 0x7fffee49b77c 
Second variable's value: 0; its address: 0x7fffee49b778 
Pointer's value: 0x7fffee49b8a0; its address: 0x7fffee49b770 
After assignment: 
First variable's value: 5; its address: 0x7fffee49b77c 
Second variable's value: 5; its address: 0x7fffee49b778 
Pointer's value: 0x7fffee49b7ac; its address: 0x7fffee49b770 

변수 x가 3285 위치에 있고 i가인 경우를 의미합니다. 10, 포인터 p는 값 3285를 포함해야합니다. 그렇다면 왜 이런 일이 발생 했습니까?

답변

6

printeverything 함수에서 매개 변수/로컬 변수 a은 전달한 변수와 완전히 다른 변수입니다. 그것은 같은 이름을 가지지 만 컴파일러에 관한 한 전적으로 우연의 일치입니다. 이것은 다른 주소를 가진 다른 변수입니다. 함수 내에서 a에 값을 할당 한 다음 나중에 인쇄하면이 값을 볼 수 있습니다. "outer"a은 변경되지 않습니다.

+0

고마워요! 그런 다음 함수의 프로토 타입을'(int * a, int * b, int * c)'로 변경하고, 두 변수는 각각'a '와'a'두 개의 cout을 호출하여 이렇게 호출합니다. printeverything (& a, & b, point);'. 좋은 하루 되세요. 함수에 대한 참조를 올바르게 전달하는 법을 배울 수있을 것 같습니다. –

관련 문제