c++中指针和引用到底存在什么区别?
本文章属于c++基础知识
前言:记录本人cpp的浅显理解
引用和指针
指针和引用的区别
1.定义和原理上的区别
指针和引用都是C++中用于访问内存地址的方法,但它们有一些不同之处。指针可以被重新赋值并指向其他内存地址,而引用一旦被初始化就不能再指向其他对象。此外,指针可以是空(null),而引用必须引用一个已经存在的对象。
另一个不同之处是,指针可以进行算术运算,而引用不能。指针可以像数组一样自增和自减,而引用只是一个别名,没有实际的内存地址。
指针和引用也有不同的语法。引用使用&运算符进行声明,而指针使用运算符进行声明。引用在使用时不需要解除引用,而指针需要使用运算符解除引用才能访问指向的内存地址。
虽然指针和引用有不同之处,但它们都是在C++中使用的重要概念。
通俗一点说,引用只不过是原来的一个别名。我们从内存的角度来看待这个问题,引用与原来的变量占有的是同一个存储单元,而指针则会占据一个新的存储单元。
2.使用上的区别
使用指针可以多级指针,但是引用只有一级
指针可以不初始化(不建议,建议nullptr),r不初始化不行(因为本身就是一个别名
比如下面p是指针,r是引用,如果
**int** *****p; *// 合法* **int** **&**r; *// 不合法* **int** a **=** 996; **int** **&**r **=** a; *// 合法*
指针可以指向别人(移情别恋),引用则只能指向一个(专一
如果在64位系统之下,指针和引用同时指向一个变量a,如下:
1 |
|
如果我们用sizeof函数分别查看p和r的size,就会发现p占了8字节,而r占了4字节,64位中指针变量占据8字节,如果进行自增操作
p++相当于指向a后面的内存
而r++就相当于a++
指针需要检测是否为空(null),但是引用不需要(因为定义的时候就已经引用给了一个变量)
两者均可以在函数中改变变量的实参数值
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!