变量在内存中的操作其实是需要经过2个步骤的:
1)找出与变量名相对应的内存地址。
2)根据找到的地址,取出该地址对应的内存空间里面的值进行操作。
什么是指针?指针变量和任何变量一样,也有变量名,和这个变量名对应的内存空间,只是指针的特殊之处在于:指针变量相对应的内存空间存储的值恰好是某个内存地址。这也是指针变量区别去其他变量的特征之一。例如某个指针的定义如下:
int x = 5;
int *ptr = &x;
ptr即是一个指正变量名。通过指针获取这个指针指向的内存中的值称为dereference。
reference是一种特殊的pointer。reference在内存中的存储结构应该跟上面的指针是一样的,也是存储的一块内存的地址。
reference 和 pointer主要有以下3中不同点:
1)reference不需要dereference即可直接获取到指向的内存空间的值。例如上例中,直接y就可以获取reference y所指向的内存空间的值,而不需要*y来获取。
2)reference的赋值操作也不需要取地址符来赋值,可以直接通过变量名,例如上例中,int &y = x, 而不需要 int &y = &x;
- reference 在申明的时候就必须要有初始值,而且reference变量指向的内存地址是不能变化,不像pointer那样可以很灵活的重新指向其他地址。