• 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的地址和原变量的地址一样
    指针是系统新分配一个地址来存放指针变量,这个地址存放的是指向的地址
    引用没有新分配,它就是原变量。
    修改引用就是修改原值。
    由于引用只是改变了原地址上的值,地址没变,所以原来指向该地址的指针,获取的值也被改变了。

  • 相关阅读:
    Android获取当前时间的3中方法总结
    解决 C# .NET WebClient WebRequest请求缓慢的问题
    无刷新的批量图片上传插件.NET版
    <img>标签显示本地路径的图片的.NET解决方案
    无刷新分页
    Shader基本类型
    shader内置变量和函数
    Shader基础
    Lua中的基本函数库
    Lua中的操作系统库
  • 原文地址:https://www.cnblogs.com/haiton/p/14987377.html
Copyright © 2020-2023  润新知