指针和引用初理解
1. 指针是变量,指针变量的值是内存单元的地址,也可以说指针是内存单元的地址。
如下图所示:指针p指向变量n. p的值就是变量n的地址。我们只要掌握了变量n的地址(也就是它的指针p),就可以在任何地方对其内存单元进行操作。
也可以这么理解,指针变量也是一个变量。
指针变量的值:p = 0x22f. 是另一个变量n的地址
指针变量的地址:&p = 0xff68. 是二维指针变量的的值 ,假设int **p2=&p
指针变量指向的值: *p=3. 是另一变量的值3
int n=3; int *p=&n; *p=4; cout<<n<<endl;
2.引用是某块内存的别名。
引用是C++中的概念,注意这里的&不是取地址。以下程序中,n 是m 的一个引用(reference),m是被引用物(referent)。
int m; int &n=m;
n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n 既不是m 的拷贝,也不是指向m 的指针,其实n就是m 它自己。-----林锐高质量C++编程
int m=3; int &n=m; n=5; cout<<m<<endl;
3.指针与引用的区别
1、非空区别。任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象,但指针可以为空;因此如果使用一个变量让他指向一个对象,但是该变量某些时候可不能不指向任何对象,应该把变量声明为指针。如果,变量不为空,可以把变量声明为引用。
2,合法性区别。在使用引用指尖不需要测试它的合法性。相反,在使用指针之前最好先先进行测试,避免其指向NULL。
3.可修改区别。指针可以被修改指向另外一个不同的对象,而引用则总是指向其在初始化时被指定的对象。
#include<iostream> using namespace std; int main(void) { int a=10,b=1000; int &rInt=a;//rInt引用a,rInt等于10; rInt=b;//将b赋值给变量a,注意这里不非让rInt改变初衷引用b rInt=30;//改变rInt还是改变a. cout<<"a="<<a<<endl; int k=10,m=20; int *p=&k;//p指向a,可以通过操作p,来改变k p=&m;//改变了p的指向,之后改变p就对k,没有影响了。 *p=30; cout<<"k="<<k<<endl;//k还是10; getchar(); }
4.应用区别。如果总是指向一个对象并且一旦指向后就不会改变指向,此时应该使用引用。反之推荐使用指针。
总之:引用是变量的别名,不为空,一旦成为变量的别名就永远是那个变量的别名。
指针是变量地址,指向变量,可以为空,用之前要检查非空,可以改变指向。