c ++:指针值与指向变量的地址不同
c++: pointer value different than address of the pointed variable
我刚刚做了一个愚蠢的小程序,关于使用指针将包含在另一个变量中的值传递给一个变量,就像对指针本身的介绍一样。我在赋值前后打印了所涉及的所有三个变量的值和位置。但是,作为指针中包含的值,我得到的地址与它指向的变量的地址不同,我只是不明白为什么。
这是我的主程序:
#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 成功获取了 a 的值,所以一切正常,但这是完整的输出:
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,对吗?那为什么会这样呢?
在您的 printeverything
函数中,parameter/local 变量 a
与您传递给它的变量完全不同。它恰好具有相同的名称,但这(就编译器而言)完全是巧合 - 它是具有不同地址的不同变量;您可以通过在函数内为 a
赋值,然后打印它来看到这一点 - 您会看到 "outer" a
将保持不变。
我刚刚做了一个愚蠢的小程序,关于使用指针将包含在另一个变量中的值传递给一个变量,就像对指针本身的介绍一样。我在赋值前后打印了所涉及的所有三个变量的值和位置。但是,作为指针中包含的值,我得到的地址与它指向的变量的地址不同,我只是不明白为什么。
这是我的主程序:
#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 成功获取了 a 的值,所以一切正常,但这是完整的输出:
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,对吗?那为什么会这样呢?
在您的 printeverything
函数中,parameter/local 变量 a
与您传递给它的变量完全不同。它恰好具有相同的名称,但这(就编译器而言)完全是巧合 - 它是具有不同地址的不同变量;您可以通过在函数内为 a
赋值,然后打印它来看到这一点 - 您会看到 "outer" a
将保持不变。