C++二级指针和指针引用

Posted clwsec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++二级指针和指针引用相关的知识,希望对你有一定的参考价值。

前提

已经清晰一级指针和引用。
可参考:指针和引用与及指针常量和常量指针 或查阅其他资料。

一级指针和二级指针

例子

个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析,可参考文末参考文章。

#include <iostream>
using namespace std;

void make(int **pp)

    **pp = 66;//这样只是改变了指向的值,即a, 指向没有改变

int main()

     int a=5;
     int *q=&a;
     int **pp=&q;
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"      value:"<<*q<<"  "<<a<<endl;
     //可将下面的注释去掉运行通过结果对比查看一级指针与二级指针的关系
//     cout<<*pp<<"  "<<&*pp<<"  "<<*&pp<<"  "<<**pp<<endl;
     make(pp);
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"      value:"<<*q<<"  "<<a<<endl;
     return 0;

运行结果:

技术图片

如果改为:

#include <iostream>
using namespace std;

void make(int **pp)

   int * p=new int(66);
   *pp=p; //这样便使用函数通过二级指针更改了一级指针的指向(值便也改了),但原指向

int main()

     int a=5;
     int *q=&a;
     int **pp=&q;
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"       value:"<<*q<<"  "<<a<<endl;
     make(pp);
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"       value:"<<*q<<"  "<<a<<endl;

运行结果:

技术图片


指针引用

#include<iostream>
using namespace std;

void make(int *pp)

    pp=new int(66); //试图改变p指向的地址,但没有用,因为pp只是p的一个拷贝。

int main()

    int a=5;
    int *p=&a; //指针变量指向一个int类型的地址
    cout<<"address:"<<&a<<"       value:"<<a<<endl;
    cout<<"address:"<<p<<"       value:"<<*p<<endl;
    make(p);
    cout<<"address:"<<p<<"       value:"<<*p<<endl;

运行结果:

技术图片

更改为:

#include<iostream>
using namespace std;

void make(int *&pp)

    pp=new int(66); //此时pp相当于p的别名,所以改的就是指针p本身,所以更改成功。

int main()

    int a=5;
    int *p=&a; //指针变量指向一个int类型的地址
    cout<<"address:"<<&a<<"       value:"<<a<<endl;
    cout<<"address:"<<p<<"       value:"<<*p<<endl;
    make(p);
    cout<<"address:"<<p<<"       value:"<<*p<<endl;

运行结果:

技术图片

参考:

二级指针和指针引用函数传参(C++)

以上是关于C++二级指针和指针引用的主要内容,如果未能解决你的问题,请参考以下文章

李连杰的二级指针,二级指针的用途,多级指针的定义使用,数组与指针的区别,void 类型指针,引用

c++指针最全总结(附源码和详细总结)

一级指针,二级指针,指针数组,数组和指针

Visual C++中二级指针的定义,初始化,赋值问题

彻底理解链表中为何使用二级指针或者一级指针的引用

一级指针与二级指针