2015-02-05 2 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; 

} 

б успешно получает свою стоимость, так что все работает правильно, но это полный выход:

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, и я делаю p = &x, указатель p должен содержать значение 3285, правильно? Так почему это происходит?

ответ

6

В вашей функции printeverything параметр/локальная переменная a - это совершенно другая переменная из той, которую вы передали ей. Это имеет одно и то же имя, но это (насколько это касается компилятора) полностью совпадение - это другая переменная с другим адресом; вы можете увидеть это, назначив в функции значение a, а затем распечатав его потом - вы увидите, что «внешний» a останется без изменений.

+0

Большое спасибо! Затем я решил изменить прототип моей функции на '(int * a, int * b, int * c)', две переменные: '' '' '' '' '' '' '' '' '' '' '' и ' printeverything (& a, & b, point); '. Имейте хороший день, я думаю, я могу узнать, как правильно передать ссылки на функции! –