c ++:指针值与指向变量的地址不同

Jef*_*ski 1 c++ variables pointers memory-address

我只是做了一个小愚蠢的程序,用一个指针传递一个变量包含在另一个变量中的值,就像对指针本身的介绍一样.我在分配之前和之后打印了所涉及的所有三个变量的值和位置.但是,作为指针中包含的值,我得到的地址不同于它指向的变量,我只是无法理解为什么.

这是我的主要计划:

#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;

}
Run Code Online (Sandbox Code Playgroud)

这是我的功能实现:

#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;

}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我的意思是,如果变量x在3285位置,而我这样做p = &x,指针p应该包含值3285,对吧?那为什么会这样呢?

psm*_*ars 6

printeverything函数中,参数/局部变量a与传递给它的变量完全不同.它碰巧具有相同的名称,但是(就编译器而言)完全是巧合 - 它是具有不同地址的不同变量; 你可以通过a在函数中指定一个值然后再打印它来看到这一点 - 你会看到"外部" a将保持不变.