因为ptempptr收到一份间的地址,即使我们改变ptempptr,这并没有改变,PPTR点价值。因此,该程序打印
565
尽管本身的地址是按值传递的,你仍然可以解引用地址永久改变在该地址的值!这是区别通过地址(参考)从传值。
下一个问题是,“如果我们要修改实参的地址范围内的功能?“。原来,这是非常容易的。你只需要使用按引用传递指针本身(有效传递地址以供参考)。你已经学会了,通过引用传递的价值体现在功能恢复到原来的参数的任何变化。所以在这种情况下,我们告诉编译器,使ptempptr地址有任何变化应反映回PPTR!做一个指针的语法有点奇怪(易得向后):int *和PPTR。然而,如果你得到它时,编译器将给你一个错误。
下面的程序说明了使用参考一点
1
2
3
4
5
6
7
8
9
10
11
// pTempPtr is now a reference to a pointer to pPtr!
// This means if we change pTempPtr, we change pPtr!
void SetToSix(int *&pTempPtr)
{
using namespace std;
pTempPtr = &nSix;
// This will print 6
cout << *pTempPtr;
}
请注意,您还必须更新函数原型以上主要考虑的settosix()新原型:
1
2
3
|
//
Function prototype so we can define //
SetToSix below main() void
SetToSix( int
*&pTempPtr); |
当我们再次运行该程序与此版本的函数,我们得到的:
566
这表明调用settosix()确实改变间的地址!
很奇怪的是,这里的结论是,引用指针,与指针地址是按值传递的。通过地址传递价值(参考)来自于事实,我们可以取消引用地址改变原有的争论,我们可以不与正常值参数。