一、编译器层面上
引用=指针,反汇编的代码一致。
int main(void)
{
int a = 3;
int* p = &a;
int& r = a;
}
g++ -S test.c -o test.s
二、语法层面
- 初始化,指针可以不初始化,即野指针。引用不可以不初始化,会报错,更安全。
- 再次赋值,指针再次赋值是改变的指针指向,即改变了指针存的地址值,不会对地址中的内容做改变。引用始终指向第一个地址,再次赋值不会改变指针指向,把其指向的地址内容改为所赋的值。
-
++操作,指针++操作,是根据指针存的数据类型对地址的偏移。
引用++操作,是对地址中内容++操作,如果存int值,就是对int值+1。 -
sizeof , 对指针sizeof(),(32位)机器上,结果都是4字节。
对于引用 sizeof(),是该引用类型的长度,如果该引用是类类型,类中有2个int,那么sizeof()为2*4=8字节;
三、技术总结
- 引用是指针的限制版本,让引用更安全。
- 指针可以是野指针,引用不能。
- 平时编程时,建议在能使用引用的情况下,就不要轻易使用指针,当然,在操作数组或者大面积内存时,用指针更好。