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
2
3
4
int a = 10;
int *p = &a;
int &r = a;

如果我们用sizeof函数分别查看p和r的size,就会发现p占了8字节,而r占了4字节,64位中指针变量占据8字节,如果进行自增操作

p++相当于指向a后面的内存

而r++就相当于a++

指针需要检测是否为空(null),但是引用不需要(因为定义的时候就已经引用给了一个变量)

两者均可以在函数中改变变量的实参数值


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!