C++中的指针和引用

来源:互联网 发布:java泛型有什么用 编辑:程序博客网 时间:2024/05/22 06:56

定义一个变量,它有四个维度:类型、名字、地址、值

理解:

指针的值是:地址

指针是存放变量地址的变量,逻辑上是独立的,它可以被改变,包括所指向的地址的改变及所指向地址中存放的数据的改变。

引用:一个对象的别名,值是这个对象的名字,改变对象和引用,对值有同样的影响。

引用是一个别名,逻辑上不是独立的,它的存在具有依附性,所以定义时必须初始化,并且不能改变指向。

用法:

int a=8;

int& ra=a;

int* p=&a;

使用时,可以直接使用ra,与使用a的效果一样;但是使用p,结果是地址,要取得值,使用*p。

区别:

1.引用不可以为空,定义的时候必须初始化;指针可以为空,不要求一定初始化。

声明指针时,可以不指向任何对象,也是因为这个原因,使用指针之前需要做判空操作,引用就不需要。

2.引用不可以改变指向,对一个对象”至死不渝“;而指针可以改变指向,指向其他对象。

    int i=10;

    int& ref=i;

    ref++;

    int j=20;

    ref=j;

虽然引用不可以改变指向,却可以改变所指向的值,以上的结果是:ref仍然指向i,只是将i的值改变为j的值,ref的改变不会对j产生任何影响。

3.引用的大小是它所指对象的大小;指针的大小是本身,4个字节(sizeof()=4)。

特别标明一点,无论string类型的变量里存放多长的字符串,sizeof()的值是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关,sizeof(string)=4可能是最典型的

实现之一,不过也有sizeof()为12、32字节的库实现。我们一般接触到的string类型所占字节数为 8+。

4.引用比指针使用形式上漂亮:

定义引用后,在程序中使用时可以直接使用引用名,但是指针除了在定义时需要使用*,赋值时需要用&取地址,如果使用所指向地址中的值,还需要用到*。

5.引用比指针更安全:

因为引用不允许为空,定义时必须初始化,并且一旦指向一个变量,就不能被改变,所以比较安全;指针可以随时改变指向,并且可以不被初始化,或者为NULL,所以不安全。

野指针:多个指针指向一块内存,free掉一个指针后,别的指针就成了野指针。

6.引用有类型检查,指针没有。

7.引用和指针作为函数参数传递时,引用是传址,会改变原函数的值;指针是传值,不会改变原函数的值。

引用和指针:类似”外号“和”职位“

0 0
原创粉丝点击