zoukankan      html  css  js  c++  java
  • C++引用和指针&, *

    声明变量时
    *表示该变量为指针型
    &表示该变量为引用型

    int a = 12;
    int *p;
    int &d = a;  //引用必须定义时就初始化
    
    d = *p;
    p = &d;
    
    int vala = *p;
    int valb = d;
    
    

    指针的意义是地址,引用的意义是值
    所以如上,p是指针,是地址,d是引用是值(所指向地址的值)
    所以想获取指针的值,需要*, *p是指针指向的值
    想获取引用的地址,需要&,&d是获取引用指向的地址
    除却定义时的声明外,*用于从指针取值,&用于从数值取地址

    指针就是地址,所以上面代码中,p 可以等于 &d
    引用是地址所存储的值,所以d 可以等于 *p

    
    int main()
    {
        int i = 100;
        int &y = i;
        int *p = &i;
        int val = 150;
        cout << "Step1, i的地址:" << &i << "=y的指向:" << &y << "=p的值:" << p << "=p指向的值" << *p << endl;
        cout << "p的地址:" << &p << endl;
    
        y = val;
        cout << "Step2, i的地址:" << &i << "=y的指向:" << &y << "=p的值:" << p << "=p指向的值" << *p << endl;
        cout << "p的地址:" << &p << endl;
    }
    
    

    结果:

    Step1, i的地址:004FFE48=y的指向:004FFE48=p的值:004FFE48=p指向的值100
    p的地址:004FFE30
    Step2, i的地址:004FFE48=y的指向:004FFE48=p的值:004FFE48=p指向的值150
    p的地址:004FFE30
    

    可以看到,
    引用本身是和指针很类似的东西,都是一个地址,
    只不过指针本身就是一个保存地址的变量,指针的值是指向的地址,可以通过获取指针的指向来获取指针指向的值
    而引用,就是一个目标地址的拷贝,一个别名,引用等同于原变量,和原变量是完全一样的东西
    从上面的结果就可以看得出来,y的地址和原变量的地址一样
    指针是系统新分配一个地址来存放指针变量,这个地址存放的是指向的地址
    引用没有新分配,它就是原变量。
    修改引用就是修改原值。
    由于引用只是改变了原地址上的值,地址没变,所以原来指向该地址的指针,获取的值也被改变了。

  • 相关阅读:
    Html5与CSS3(选择器)
    halo博客安装教程,一款优秀的java开源博客系统
    java的read方法
    css故障文字动画
    从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
    创建一个springboot项目
    每日算法训练
    Error running 'tomcat': Unknown error
    java: 程序包javax.servlet.http不存在
    idea配置阿里maven镜像
  • 原文地址:https://www.cnblogs.com/haiton/p/14987377.html
Copyright © 2011-2022 走看看