C++学习笔记30,指针的引用(2)


 

 

可以创建任何类型的引用,包括指针类型。

看一个简单的指针的引用的例子。例如:

 

#include <iostream>
using namespace std;
int main(){
    int x=10;
    int y=20;
    int z=30;
    int* ptx=&x;
    int* ptz=&z;
    //指针的引用,声明从右往左看,rtp与&结合,
    //剩余的符号和左边结合
    //引用一旦创建,不能改变其指向,只能改变其值
    int* &rtp=ptx;
    cout<<"&x="<<&x<<endl;
    cout<<"&ptx="<<&ptx<<"           "<<"&rtp="<<rtp<<endl;
    cout<<"ptx="<<ptx<<"           "<<"rtp="<<rtp<<endl;
    cout<<"*ptx="<<*ptx<<"           "<<"*rtp="<<*rtp<<endl<<endl;
    ptx=&y;
    //ptx的值改变了,rtp的值也相对改变了
    //但其指向不变
    cout<<"&y="<<&y<<endl;
    cout<<"&ptx="<<ptx<<"           "<<"&rtp="<<rtp<<endl;
    cout<<"ptx="<<ptx<<"           "<<"rtp="<<rtp<<endl;
    cout<<"*ptx="<<*ptx<<"           "<<"*rtp="<<*rtp<<endl<<endl;
    rtp=ptz;
    //rtp的值改变了,ptx的值也相对改变了
    //但rtp指向不变
    cout<<"&ptz="<<&ptz<<endl;
    cout<<"&ptx="<<ptx<<"           "<<"&rtp="<<rtp<<endl;
    cout<<"ptx="<<ptx<<"           "<<"rtp="<<rtp<<endl;
    cout<<"*ptx="<<*ptx<<"           "<<"*rtp="<<*rtp<<endl<<endl;

}

输出结果:


这样看不明显,我们来简化一下例子,并通过调试来查看其变量地址以及值。

 

#include <iostream>
using namespace std;
int main(){
    int x=10;
    int y=20;
    int z=30;
    int* ptx=&x;
    int* ptz=&z;
    //指针的引用,声明从右往左看,rtp与&结合,
    //剩余的符号和左边结合
    //引用一旦创建,不能改变其指向,只能改变其值
    int* &rtp=ptx;
    ptx=&y;
    //ptx的值改变了,rtp的值也相对改变了
    //但其指向不变
    rtp=ptz;
    //rtp的值改变了,ptx的值也相对改变了
    //但rtp指向不变

}

单步运行截图:(看ptx和rtp的值)

可以看到,rtp一直指向0x22fed8,而这个地址,正是&ptx的地址,从这里可以看出,引用一旦创建其指向不可改变,能改变的只是其值(ptx的值)!

这就是指针的引用,指向引用的指针请看下一篇博文!

 

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注