引用
在正式介绍指针之前,先来看看什么是引用。- int a = 10;
- int &ref1 = a;
复制代码 你可能注意到了,上面的代码里有个 &。这就是我们的主角,引用。在变量名之前加上该符号,就可以指出它是个引用。
我们常说的引用,就是把别人的东西拿过来自己用。C++ 的引用也是如此,就是把另外一个对象拿过来用,然后起个名字。也就是说:- // a = 10
- ref1 = 11;
- // 现在,a = 11
复制代码 对象就像瓶子,引用就是瓶子上面的标签。访问引用时,就是找到标签所对应的瓶子。
引用必须满足以下条件:
- 引用指向的是一个对象,而不是值
- 引用类型和它指向的对象匹配
- 引用必须在声明时初始化
- 引用初始化后不能更改绑定的对象
要注意的是,引用必须在声明时初始化。下面代码会产生编译错误:另外要注意的一点是,可以一次声明多个引用,但都要加上 &。- int &ref1=a, ref2=a;// ref1 是引用,ref2 则是 a 值的拷贝
- int &ref1=a, &ref2=a;// 都是引用
复制代码 实际上,把 & 和类型名称放一起也是可行的,但是考虑到上面这个一次声明多个的问题,我还是建议和变量名放一起,否则有歧义。
指针
好好好,现在我们来到了正题。
先把上面的引用忘了,我们到最后再来讲指针和引用的差别。
创建指针
- int a = 10;
- int *p;
- p = &a;
复制代码 这里又有 * 又有 &,看晕了都。所以我把它拆成了三行,我们一行一行来。
首先,第二行,有个星号。这就是我们的主角,指针。* 表示创建的是指针。这一行声明了一个 int 类型的指针,但是并没有初始化。
第三行,把指针 p 指向 a 的地址。你肯定注意到这里有个老熟人 &。当然啦,我让你先把引用忘了是有原因的,因为这里的 & 和上面引用那里的完全不是一个东西。
这里的 & 叫做 取地址符。它和一个变量一起用可以返回那个变量的地址。各位都知道你的内存很大,位置很多,取地址符就是用于查找变量的位置的。
Warning! 这里不初始化指针拆成两行的方法是不推荐的,因为未初始化的指针行为未知。实际请务必初始化!
既然得到了位置,我们自然就知道指针的用法了——“一个指针对应一个对象的位置”。
注意:
- 引用不是对象,没有地址
- 指针自己是对象,所以可以用指针指向指针。这个后面再说。
ohhhhhhhh 恭喜你,你已经明白了怎么创建指针,接下来就用一下吧。
用指针
[code]cout |