指针和引用的定义
指针:指针是一个变量,储存着指向变量的地址,通过对地址的解引用实现对变量的读取或者更改。
引用:引用是一个变量的别名,本质上和变量是一个东西.1
2int *p=&a;
int &b=a;
这里定义了一个指针p保存了a的地址,而定义了一个引用b,给a取了一个别名。a和b是一个东西在空间上占用同一个地址。
一些其他的不同
1.引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。
2.可以有const指针,但是没有const引用。
3.指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)。
4.指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化。
5.指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
6.sizeof引用得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小。
7.指针和引用的自增(++)运算意义不一样。
8.如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。
指针值传递
1 | void ptr(int *p) |
输出:0x6fc12e 1
指针p为NULL
因为这里传递的指针也是对p的一份临时拷贝,你不能通过形参而改变实参。要解决这种问题你只能传二级指针或者传引用
1 | void ptr(int *&a) |
输出结果:
0x12ff44 2
0x12ff44 2